读书人

关于YUV420p的一些有关问题

发布时间: 2013-06-26 14:29:32 作者: rapoo

关于YUV420p的一些问题
我用ffmpeg将数据转化为YUV420格式,代码如下:
for(i=0; i<c->height; i++)
fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, f_out);
for(i=0; i<c->height/2; i++)
fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, f_out);
for(i=0; i<c->height/2; i++)
fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, f_out);
为什么对U和V的大小要除以2?

其次:对于一个YUV数据流,data为数据的首地址:
LPBYTE lpYUV=data;
LPBYTE lpY=lpYUV;
LPBYTE lpV=lpY+WIDTH*HEIGHT;//lpYUV+WIDTH*HEIGHT;
LPBYTE lpU=lpV+WIDTH*HEIGHT/4;//lpYUV+WIDTH*HEIGHT*3/2;

为什么要除以4??


我找了很多关于YUV420格式的资料,没有找到答案,求大神帮助........... YUV420p
[解决办法]
http://zh.wikipedia.org/wiki/YUV
yuv420也有很多中排列,
"我用ffmpeg将数据转化为YUV420格式",首先得确定原始的数据是什么格式排列,
Y'UV, YUV, YCbCr,YPbPr 也被称为yuv

1.紧缩格式(packed formats):将Y、U、V值储存成Macro Pixels阵列,和RGB的存放方式类似。
2.平面格式(planar formats):将Y、U、V的三个份量分别存放在不同的矩阵中。

之前的一点点学习笔记 https://github.com/zodiac1111/learn-opencv
https://github.com/zodiac1111/learn-opencv/blob/master/v4l2_c_test1_opencam/main.c process_image函数是从yuv420平面格式一个一个像素转化成为rgb(bgr?)格式的一个一个像素.

粗看你这里是yuyv的平面格式.4个字节表示2个像素.
http://shellman.blog.sohu.com/139831864.html
4和2分别跟字节和像素有关,先弄清前面4(2)个像素的每一个字节代表的意思,按照网上参考的采样就可以了

读书人网 >C++

热点推荐