YUV420P格式分析
2015-12-30 18:07
190 查看
YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放YUV三个分量
YUV420P(planar格式)在ffmpeg中存储是在struct AVFrame的data[]数组中
data[0]-------Y分量 data[1]------U分量
data[2]-------V分量
YUV420P的内存结构:
4个Y分量对应1个UV分量
YUV420格式是指,每个像素都保留一个Y(亮度)分量,而在水平方向上,不是每行都取U和V分量,而是一行只取U分量,则其接着一行就只取V分量,以此重复(即4:2:0,
4:0:2, 4:2:0, 4:0:2 .......),所以420不是指没有V,而是指一行采样只取U,另一行采样只取V。在取U和V时,每两个Y之间取一个U或V。但从4x4矩阵列来看,每4个矩阵点Y区域中,只有一个U和V,所以它们的比值是4:1。所以对于一个像素,RGB需要8 * 3 = 24位,即占3个字节;而YUV420P,8 + 8/4 + 8/4 = 12位,即占2个字节,其中8指Y分量,8/4指U和V分量。
YUV420内存格式:
YYYYYYYY UU VV
------最常见的
YYYYYYYY UU VV
------也有,不过我开发中没遇到过
我们用ffmpeg把yuv420P 存储到文件中,然后利用一些yuv播放器就可以播放YUV原始数据,貌似VLC不能播放YUV原始数据:
data[]中存放着YUV原始数据(在struct AVFrame中的,位于frame.h中----ffmpeg)
http://my.oschina.net/u/589963/blog/167766
YUV420P(planar格式)在ffmpeg中存储是在struct AVFrame的data[]数组中
data[0]-------Y分量 data[1]------U分量
data[2]-------V分量
YUV420P的内存结构:
4个Y分量对应1个UV分量
YUV420格式是指,每个像素都保留一个Y(亮度)分量,而在水平方向上,不是每行都取U和V分量,而是一行只取U分量,则其接着一行就只取V分量,以此重复(即4:2:0,
4:0:2, 4:2:0, 4:0:2 .......),所以420不是指没有V,而是指一行采样只取U,另一行采样只取V。在取U和V时,每两个Y之间取一个U或V。但从4x4矩阵列来看,每4个矩阵点Y区域中,只有一个U和V,所以它们的比值是4:1。所以对于一个像素,RGB需要8 * 3 = 24位,即占3个字节;而YUV420P,8 + 8/4 + 8/4 = 12位,即占2个字节,其中8指Y分量,8/4指U和V分量。
YUV420内存格式:
YYYYYYYY UU VV
------最常见的
YYYYYYYY UU VV
------也有,不过我开发中没遇到过
我们用ffmpeg把yuv420P 存储到文件中,然后利用一些yuv播放器就可以播放YUV原始数据,貌似VLC不能播放YUV原始数据:
data[]中存放着YUV原始数据(在struct AVFrame中的,位于frame.h中----ffmpeg)
http://my.oschina.net/u/589963/blog/167766
相关文章推荐
- Let it crash philosophy part II
- 对象第复制operator=
- jQuery -- 判断元素是否存在
- 那些年我准备的前端面试题集合
- unbind死亡效果
- viewpager.setOnPageChangeListener中方法的参数详解
- 关于Relay Log无法自动删除的问题
- 对nodejs express 框架的简单封装实现快速开发
- 学习笔记--View滑动效果的七种实现方式(一)
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- 第二章 身份验证——《跟我学Shiro》
- DetachedCriteria用法
- 模仿QQ5.0界面侧滑
- linux服务器上部署java项目
- 朋友会触动我们的心灵
- 参加51CTO学院薛大龙软考班感想
- SQL Server DBA面试知识点(五)-- 索引与执行计划
- POST GET 区别
- Let it crash philosophy for distributed systems
- php composer包管理工具