视频编解码学习(1):YUV格式学习
2015-07-02 22:55
316 查看
1.YUV格式详解
参考文章 : /article/1879384.html http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html http://blog.csdn.net/leixiaohua1020/article/details/25346147这些文章我学习到几点,现在记录下来:
a.
YUV(亦称YCrCb)是三个分量,Y是亮度信息,U,V是色度信号。如果只有Y,那么电视播放出来的是黑白,Y加上U,V后就是彩色电视。
这样解决黑白电视也能播放彩色电视的信号的问题。
b. 刚开始学,不能贪多。我就先说说YUV420格式吧。
YUV 4:2:0采样,即每4个Y公用一组UV分量。如下图:
因为一个Y分量对应一个像素点,所以若该图片的宽为width, 高为height,那么Y就等于(width * height),同理U就等于(Y / 4), V也等于(Y / 4)
那么这个YUV图片在内存中的长度就为:Y + Y/4 + Y/4 = (Y * 3) / 2 = (width * height) / 2
当然YUU420还可以细分为YUV420p,YUV420sp,这个暂时先放放,后面遇到再说话。
既然上面是理论知识,我们就需要学习一些代码来实践一下。第3个URL里面就是实际的代码。我现在截取一点分析一下。
int numBtyes = avpicture_get_size(***_PIX_FMT_YUVJ420P, 480, 272);返回的值为:195840 = (480 * 272 * 3) /2;
验证了我们的结果。
同理,下面还有一段代码:
//Read YUV FILE *in_file = fopen("cuc_view_480x272.yuv", "rb"); if( fread(picture_buf, 1, y_size*3/2, in_file) <= 0 ) { printf("Could not read input file."); return -1; } picture->data[0] = picture_buf; // Y picture->data[1] = picture_buf+ y_size; // U picture->data[2] = picture_buf+ y_size*5/4; // V这里y_size的值为: 480 * 272 ,即130560
我翻译一下就是:
picture->data[0] = picture_buf;
picture->data[1] = picture_buf + 130560;
picture->data[2] = picture_buf + 163200;
正好就把Y,U,V三个分量取了出来。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 2015/7/31添加
2. YUV的 packet格式 和 planar格式
YUV格式有两大类:planar和packed。对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
相关文章推荐
- 移动App应用开发的五大流行趋势
- CodeForces 368B Sereja and Suffixes
- android中list数据与json互转
- Eclipse for Mac 常用快捷
- 149.根据公式计算值
- git命令
- Python 2.7.9 Demo - 获取调用的参数
- 作业2.30
- 路由子系统——Scope
- 欢迎使用CSDN-markdown编辑器
- codeforces #311 557E E. Ann and Half-Palindrome(trie+dp+dfs)
- llinux下为Firefox安装Adobe Flash Player
- IBM Minus One(water)
- 【CF】283D Tennis Game
- stm32笔记2—读写I2C存储芯片
- 查询员工最后一个月的工资情况
- 面试题
- Hadoop,HBase集群环境搭建的问题集锦(一)
- Oracle ->> 变量赋值 Demo
- hd1496---->这道题是水水的数论吗?