在上篇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);

最新文章

  1. 用css实现网站切角效果 使用css3属性:渐变
  2. 如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(二)
  3. javascript高级程序设计---拖拉事件
  4. Windows 8.1 应用再出发 - 几种常用控件
  5. Android接口回调机制
  6. EF6 Database First (DbContext) - Change Schema at runtime
  7. Android_Fragment_Fragment具体解释
  8. OBJ-C中dispatch_once的用法
  9. Python爬虫学习--用Python结合Selenium实现 明日之子节目直播时为自己喜欢的选手自动点赞拉票!!!
  10. 【IDEA&&Eclipse】3、IntelliJ IDEA 的 20 个代码自动完成的特性
  11. Mysql在master上查看有哪些slave
  12. Java之CountDownLatch使用
  13. 使用Git将项目上传到GitHub管理
  14. HDU2552 三足鼎立 【数学推理】
  15. 20172308《Java软件结构与数据结构》第四周学习总结
  16. Linux/Unix 新手和专家教程
  17. (3.5)mysql基础深入——mysqld_safe脚本功能及流程
  18. python函数里面,一个*是可变参数的元祖,两个*是可变参数的字典
  19. POJ 1023
  20. scroll滚动到一定距离触发事件/返回顶部animate

热门文章

  1. Mysql zip包在Windows上安装配置
  2. allocation size overflow
  3. Nova 组件详解 - 每天5分钟玩转 OpenStack(26)
  4. 2016 最佳 Linux 发行版排行榜
  5. C#按位操作,直接操作INT数据类型的某一位
  6. jackson annotations注解详解
  7. .replace(R.id.container, new User()).commit();/The method replace(int, Fragment) in the type FragmentTransaction is not app
  8. gcc/g++中weak弱符号及alias别名
  9. Ubuntu安装Maven3
  10. POJ 1273 Drainage Ditches题解——S.B.S.