首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于YUV420p的一些有关问题

2013-06-26 
关于YUV420p的一些问题我用ffmpeg将数据转化为YUV420格式,代码如下:for(i0 ic-height i++)fwrite(pic

关于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)个像素的每一个字节代表的意思,按照网上参考的采样就可以了

热点排行