YUV422转换YUV420应用实例
发布日期:2021-06-29 12:42:14
浏览次数:2
分类:技术文章
本文共 973 字,大约阅读时间需要 3 分钟。
在上一篇文章中 已经可以将v4l2 采集到的JPEG数据转换为YUV422格式,但是我们有时候需要使用其他格式的数据,比如用YUV420作为H264的输入数据格式。做数据格式转换,首先需要明白各种数据类型的采样分布格式。如下图:
我们在上一篇中通过JPEG解码转换过来的是YUYV数据格式(YUV422),他的数据分布是:
现在我们需要把YUYV数据格式转换为YUV420Plane模式。根据上面的两张图片我们可以知道,YUYV是交叉分布存储的,它是每两个Y公用一组UV。YUV420它是顺序存储的,它是每4个Y与共用一组UV分量。要实现YUYV装换为YUV420,那么需要把YUYV中的Y分量全部读取,然后隔行读取UV分量。这里一定要注意,这里是需要分行的,如果不分行,随意的组合Y,U,V三个分量,那么形成的画面是会花屏的。下面是我写的转换函数。
void yuyv_to_yuv420P(char *in, char*out,int width,int height) { char *p_in, *p_out, *y, *u, *v; int index_y, index_u, index_v; int i, j, in_len; y = out; u = out + (width * height); v = out + (width * height * 5/4); index_y = 0; index_u = 0; index_v = 0; for(j=0; j< height*2; j++) { for(i=0; i在我的工程代码中,我使用的是v4l2 采集JPEG数据格式,然后再将JPEG格式转换YUV422格式,最后再将YUV422转换为YUV420,转换后的数据下过入下图,
看到画面左边的图片显示是正常的,右边的画面颜色有问题,应该是UV分量与左边的一样。出现这样的问题,应该是在转换的时候,我们有丢弃一行数据的UV分量造成的。别问我为什么需要这么折腾把数据装换这么多次,最后弄到数据失真。其实我只是想验证这样的转换是否可行和实际的效果是如何。
工程代码可以在这里下载:
本文参考:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
转载地址:https://caibiao-lee.blog.csdn.net/article/details/53767245 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月15日 09时14分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
力扣的移除元素 解法 Python3
2019-04-29
力扣的三数之和解法(Python3)
2019-04-29
力扣的最接近的三数之和解法(Python3)
2019-04-29
力扣的买卖股票的最佳时机 III之解法(Python3)
2019-04-29
LeetCode 合并两个有序链表 解法 (Python)
2019-04-29
力扣的删除排序链表中的重复元素解法 (Python3)
2019-04-29
力扣的环形链表解法 (Python)
2019-04-29
力扣的盛最多水的容器解法 (Python)
2019-04-29
力扣的电话号码的字母组合解法(Python)
2019-04-29
力扣的组合总和解法 (Python)
2019-04-29
力扣的两数相加解法 (Python)
2019-04-29
力扣的删除链表的倒数第N个节点解法(Python)
2019-04-29
力扣的串联所有单词的子串解法(Python)
2019-04-29
力扣的接雨水解法(Python3)
2019-04-29
HTML5 五种密码框
2019-04-29
Node.js npm uuid
2019-04-29
JavaScript 滑动验证
2019-04-29
CSS3 二级菜单
2019-04-29
CSS3 帧动画(Sprite,直译叫雪碧图)
2019-04-29
JavaScript 帧动画
2019-04-29