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

SDL 显示解码后的yuv12数据的更多相关文章

  1. 用libvlc 抓取解码后的帧数据

    vlc是一套优秀的开源媒体库,其特点是提供了完整的流媒体框架, 用它可以非常方便的实现抓取解码帧的功能. 与此功能有关的关键API为 libvlc_video_set_callbacks /*设置回调 ...

  2. 嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并通过SDL显示)

    /* 编译命令:arm-linux-gcc -o show2642 264showyuv2.c -I/usr/local/ffmpeg_arm/include/ -L/usr/local/ffmpeg ...

  3. FFMPEG结构体分析:AVFrame(解码后的数据)

    https://blog.csdn.net/jxcr1984/article/details/52766524 本文转自: http://blog.csdn.net/leixiaohua1020/ar ...

  4. ls显示前几行或后几行数据

    显示前3行数据 ls -l|head -n 3 显示后3行数据 ls -l|tail -n 3

  5. FFMPEG的解码后的数据格式

    这两天在阅读电视转发服务器中的流媒体底层库的源码时,在看到显示部分的时候,遇到了一些疑问: 就是在用d3d做显示时候,我们显示的数据格式,指定为yv12,对于YV12的数据格式在内存中的分布,可以参考 ...

  6. SDL显示文字

    前面教程里,我们只显示图片,没提到如何显示文字, SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字.ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它 ...

  7. PDO exec 执行时出错后如果修改数据会被还原?

    PDO exec 执行时出错后如果修改数据会被还原? 现象 FastAdmin 更新了 1127 版本,但是使用在线安装方式出现无法修改管理员密码的问题. 一直是默认的 admin 123456 密码 ...

  8. Linux 意外操作后如何进行数据抢救

    Linux 意外操作后如何进行数据抢救 在 GUI 中使用  shift + delete  组合键或是 CLI 下使用 rm -rf 删除选项,这个文件并没有从硬盘(或是其它存储设备)上彻底销毁.当 ...

  9. Activity 事件以及如何得到新打开Activity关闭后返回的数据

    1: package com.example.activity_basic; 2:   3: import android.os.Bundle; 4: import android.app.Activ ...

随机推荐

  1. 锐捷与Vmare网络冲突解决办法

    首先,禁用掉VMare的两个适配器,然后在我的电脑右键管理中找到服务,把VMare的所有服务开起来,并把手动改成自动,最后把VMare的网络设置设置为NAT连接即可.

  2. Oracle用户密码过期和用户被锁解决方法

    [原因/触发因素] 确定是由于oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180天"所导致. [影响和风险] 影响    密码过 ...

  3. Hibernate核心技术简介

    Hibernate核心技术简介 1.Hibernate映射文件开发     Hibernate映射文件就是项目中*.hbm.xml文件,其主要是完成各元素的配置,包括根元素.类元素.定义主键.设置主键 ...

  4. 一致性算法RAFT详解

    原帖地址:http://www.solinx.co/archives/415?utm_source=tuicool&utm_medium=referral一致性算法Raft详解背景 熟悉或了解 ...

  5. [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)

    在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...

  6. Linux 下系统调用的三种方法

    系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...

  7. ClearContainer 网络部分源码分析

    // cc-oci-runtime/src/oci.c /*! * Create the state file, apply mounts and run hooks, but do not star ...

  8. markdown编辑器

    经过一番探索终于找到两个可以实时预览的markdown编辑器 一,sublime text 3 + MarkDown Editing + OmniMarkupPreviwer 安装方法网上均有,这里要 ...

  9. CH Round #72树洞[二分答案 DFS&&BFS]

    树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...

  10. $(this)与this的区别

    相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的  $()  这个符号,实际上这个符号在JQuery中相当于JQu ...