关于YUV420p的一些问题

不在线的程序员 2013-04-03 06:42:09
我用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格式的资料,没有找到答案,求大神帮助...........
...全文
176 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1---》for(i=0; i<c->height; i++) fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, f_out); 2---for(i=0; i<c->height/2; i++) fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, f_out); 3---for(i=0; i<c->height/2; i++) fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, f_out); 哪个是V数据组,哪个是U数据组
  • 打赏
  • 举报
回复
我的是YU12数据格式,Y数据一组,下来是U数据,下来是V数据
zodiac1111 2013-04-05
  • 打赏
  • 举报
回复
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)个像素的每一个字节代表的意思,按照网上参考的采样就可以了
  • 打赏
  • 举报
回复
顶起.........

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧