SDL 显示解码后的yuv12数据
2024-10-19 05:26:44
在上篇h264解码为yuv12后http://jhlong12345.blog.163.com/blog/static/1230631292015725115058709/
,需要显示出来,使用sdl比较方便,网上没C#的例子,全是C++的,
SDL_LockYUVOverlay(overlay); memcpy(overlay->pixels[], y_video_data, w * h); memcpy(overlay->pixels[], u_video_data, w * h / ); memcpy(overlay->pixels[], v_video_data, w * h / ); SDL_UnlockYUVOverlay(overlay);
这里贴出来研究很久才做出来的C#代码
if (H264Dec.Hi264DecAU(_decHandle, pH264Data, frameLen, , ref _decodeFrame, ) == ) { IntPtr[] ips = new IntPtr[] { _decodeFrame.pY, _decodeFrame.pV,_decodeFrame.pU }; //U(Cb)分量 V(Cr)分量 object obj = Marshal.PtrToStructure(yuv, typeof(Sdl.SDL_Overlay)); //在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU) Sdl.SDL_Overlay overlayYuv = (Sdl.SDL_Overlay)obj; Sdl.SDL_LockYUVOverlay(yuv); GCHandle hObject = GCHandle.Alloc(ips, GCHandleType.Pinned); IntPtr pObject = hObject.AddrOfPinnedObject(); overlayYuv.pixels = pObject; Marshal.StructureToPtr(overlayYuv, yuv, true); Sdl.SDL_UnlockYUVOverlay(yuv); Sdl.SDL_DisplayYUVOverlay(yuv, ref rect); //画点文字图形啥的 Sdl.SDL_Flip(surfacePtr); Sdl.SDL_UpdateRect(surfacePtr, , , rect.w, rect.h); if (hObject.IsAllocated) hObject.Free(); }
其中 IntPtr yuv = Sdl.SDL_CreateYUVOverlay(width, height, Sdl.SDL_YV12_OVERLAY, surfacePtr);
最新文章
- 用css实现网站切角效果 使用css3属性:渐变
- 如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(二)
- javascript高级程序设计---拖拉事件
- Windows 8.1 应用再出发 - 几种常用控件
- Android接口回调机制
- EF6 Database First (DbContext) - Change Schema at runtime
- Android_Fragment_Fragment具体解释
- OBJ-C中dispatch_once的用法
- Python爬虫学习--用Python结合Selenium实现 明日之子节目直播时为自己喜欢的选手自动点赞拉票!!!
- 【IDEA&;&;Eclipse】3、IntelliJ IDEA 的 20 个代码自动完成的特性
- Mysql在master上查看有哪些slave
- Java之CountDownLatch使用
- 使用Git将项目上传到GitHub管理
- HDU2552 三足鼎立 【数学推理】
- 20172308《Java软件结构与数据结构》第四周学习总结
- Linux/Unix 新手和专家教程
- (3.5)mysql基础深入——mysqld_safe脚本功能及流程
- python函数里面,一个*是可变参数的元祖,两个*是可变参数的字典
- POJ 1023
- scroll滚动到一定距离触发事件/返回顶部animate
热门文章
- Mysql zip包在Windows上安装配置
- allocation size overflow
- Nova 组件详解 - 每天5分钟玩转 OpenStack(26)
- 2016 最佳 Linux 发行版排行榜
- C#按位操作,直接操作INT数据类型的某一位
- jackson annotations注解详解
- .replace(R.id.container, new User()).commit();/The method replace(int, Fragment) in the type FragmentTransaction is not app
- gcc/g++中weak弱符号及alias别名
- Ubuntu安装Maven3
- POJ 1273 Drainage Ditches题解——S.B.S.