YUV(二)-YUV格式转换缩放

来源:互联网 发布:java调用外部接口 编辑:程序博客网 时间:2024/05/20 23:38

本文转自:

http://blog.csdn.net/zhuweigangzwg/article/details/17222581

YUV(二)-YUV格式转换缩放

   本文主要讲解yuv各种格式相互转换的功能实现及原理,以常用的yuv420p,yuv422p,yuv444p作为转换格式比较清晰的解析各

种格式,以及用ffmpeg做转换的实现,同时有需要的朋友也可以用opencv做实现。
   (一):内存采样
    YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,这里强调的

是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的

转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
YUV 4:4:4采样,每一个Y对应一组UV分量。 2. 3.YUV 4:2:2采样,每两个Y共用一组UV分量。 4.5.YUV 4:2:0采样,每四个Y共

用一组UV分量。
 

   (二):内存分布
        1:YUV420
          (1):I420:
              YYYYYYYY UU VV    =>YUV420P
          (2):YV12
              YYYYYYYY VV UU    =>YUV420P
          (3):NV12
              YYYYYYYY UVUV     =>YUV420SP (dxva 输出 NV12)
          (4):NV21
              YYYYYYYY VUVU     =>YUV420SP (x264/ffmpeg 输入、输出 I420)
        2:YUV422
          (1):YUVY:(实际格式与YUY2相同)


          (2):UYVY:


          (3):YUV422P


        3:YUV444
          (1):YUV444P
              YYYYYYYY  UUUUUUUU VVVVVVVV
   (三):ffmepeg实现
          (1):AVFrame内存关联


          (2):判断输入输出格式


          (3):格式转换



   (四):扩展分析
          (1):本例只实现上述中的几种格式,还有很多格式未有实现。
          (2):内存分布中,还有不同的格式可以扩展例如:YUV444->可以扩展为:YYYYYYYY   VVVVVVVV   UUUUUUUU.等等 

内存格式。
          (3):本文采取yuv-yuv格式之间的转换,底层用到的是双三次差值算法。

原创粉丝点击