设计在线设计网站,北京建设工程网站,工程公司网站建设,深圳网站建设培训学校YUV420P#xff0c;Y#xff0c;U#xff0c;V三个分量都是平面格式#xff0c;分为
I420
和
YV12
。
I420
格式和
YV12
格式的不同处在U平面和V平面的位置不同。在I420格式中#xff0c;U平面紧跟在Y平面之后#xff0c;然后才是V平面#xff08;即#xff1a;YUVYUV三个分量都是平面格式分为
I420
和
YV12
。
I420
格式和
YV12
格式的不同处在U平面和V平面的位置不同。在I420格式中U平面紧跟在Y平面之后然后才是V平面即YUV但YV12则是相反即YVU。
YUV420SP, Y分量平面格式UV打包格式, 即NV12。 NV12与NV21类似U 和 V 交错排列,不同在于UV顺序。
I420: YYYYYYYY UU VV YUV420P
YV12: YYYYYYYY VV UU YUV420P
NV12: YYYYYYYY UVUV YUV420SP
NV21: YYYYYYYY VUVU YUV420SP dxva 输出 NV12
x264 输入、输出 I420 void yuv420p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, int height) { unsigned int x, y; for (y 0; y height; y) { uint8_t *Y yuv420[0] y * width; uint8_t *Cb yuv420[1] (y / 2) * (width / 2); uint8_t *Cr yuv420[2] (y / 2) * (width / 2); for (x 0; x width; x 2) { *(dest 0) Y[0]; *(dest 1) Cb[0]; *(dest 2) Y[1]; *(dest 3) Cr[0]; dest 4; Y 2; Cb; Cr; } } } YUV420P 最近一周整理了一下网上关于YUV数据的转化和显示方面的资料, 与大家共享一下. 1. 关于YUV. 百度百科: http://baike.baidu.com/view/189685.htm 英文资料: http://en.wikipedia.org/wiki/YUV#Y.27UV420p_.28and_Y.27V12.29 YUV转换算法: http://www.kldby.com/baidunews/index.php/article/jdgg/2010-10-04/10436.html YUV格式: http://www.fourcc.org/yuv.php 自定义数据结构参考: http://www.rosoo.net/a/200604/6051.html 2. YUV数据的显示. 目前尝试了两种显示YUV数据的方法 YUV表面显示和GDI显示. YUV表面显示: 这个网上有很多源码, 当然为了大家省去一些查找和编译的苦恼, 提供我整理后的源码. 这种显示方式呢, 比较直接, CPU占用也不是很高, 而且不管是YUV420还是YUV420P(分辨率1280*720)都可以显示出来. 但是有一个缺点是: 只能创建一个显示画面, 就是要同时显示几个画面是不行的, 而且按下WIN键和D后, 画面还在屏幕上, 很无语. (我不确定此点是否正确, 我在一天之内没突破它的这个缺点后放弃). GDI显示: 就是用相关算法将YUV420P数据---RGB24之后,使用StretchDIBits函数将每一帧的图像显示出来. 在转化算法方面, 在网上找到不止10几种, 除去一些存在错误无法编译的外, 筛选了5种方法. 此种显示方法上, CPU占用肯定比YUV表面显示高, 但至少可以多画面显示了,并且没有其他缺点. 转化算法见下一篇随笔. YUV420 显示源码 http://files.cnblogs.com/doorsky/YUV%e6%98%be%e7%a4%ba.rar YUV文件 http://files.cnblogs.com/doorsky/YUV%e6%96%87%e4%bb%b6.rar (在本文中U 一词相当于 CbV 一词相当于 Cr。) YUV422 format as shown below 4:2:2 表示 2:1 的水平取样没有垂直下采样 YUV420 format as shown below 4:2:0 表示 2:1 的水平取样2:1 的垂直下采样. YUV4:2:0并不是说只有U即 Cb, V即 Cr一定为 0而是指UV互相援引时见时隐也就是说对于每一个行只有一个U或者V份量如果一行是4:2:0的话下一行就是4:0:2再下一行是4:2:0...以此类推。