YUV422转换YUV420应用实例

YUV422转换YUV420应用实例在上一篇文章中 JPEG 编码学习 JPEG 数据转 YUV 数据应用实例已经可以将 v4l2 采集到的 JPEG 数据转换为 YUV422 格式 但是我们有时候需要使用其他格式的数据 比如用 YUV420 作为 H264 的输入数据格式 做数据格式转换 首先需要明白各种数据类型的采样分布格式 如下图 我们在上一篇中通过 JPEG 解码转换过来的是 YUYV 数据格式 YUV422 他的数据分布是 现在我们需要把 YUYV

    在上一篇文章中JPEG编码学习—JPEG数据转YUV数据应用实例 已经可以将v4l2 采集到的JPEG数据转换为YUV422格式,但是我们有时候需要使用其他格式的数据,比如用YUV420作为H264的输入数据格式。做数据格式转换,首先需要明白各种数据类型的采样分布格式。如下图:

YUV422转换YUV420应用实例

我们在上一篇中通过JPEG解码转换过来的是YUYV数据格式(YUV422),他的数据分布是:

YUV422转换YUV420应用实例

现在我们需要把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,转换后的数据下过入下图,

YUV422转换YUV420应用实例看到画面左边的图片显示是正常的,右边的画面颜色有问题,应该是UV分量与左边的一样。出现这样的问题,应该是在转换的时候,我们有丢弃一行数据的UV分量造成的。别问我为什么需要这么折腾把数据装换这么多次,最后弄到数据失真。其实我只是想验证这样的转换是否可行和实际的效果是如何。

工程代码可以在这里下载:YUV422转换为YUV420数据格式

本文参考:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html

——————————————2022.08.21——————————————

该博客将停止更新 

新的文章内容和附件工程文件

请到 liwen01博客首页信息查询

——————————————2022.08.21——————————————

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219679.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:08
下一篇 2026年3月17日 下午10:09


相关推荐

  • 广东电信 DNS 设置更改

    广东电信 DNS 设置更改因为未知原因(真的不知中国电信为何如此,有空打10000问问),原先广东电信用户可以使用的DNS服务器,如202.96.128.68202.96.128.110,不能使用了。因此,如果你的ADSL是使用路由方式共享上网的,并且手动设置了DNS服务器地址为以上ip,将会出现上不了网的情况。这就需要把DNS服务器地址更…

    2022年7月11日
    45
  • JS文件相互调用

    JS文件相互调用title JS 文件相互调用 date 2019 06 2517 03 36tags JavaScript TypeScript 我们在写 js 代码的时候 常常会碰到两个 js 文件之间相互调用 直接上代码 messageText js 定义数组 varmsgArray name Infunction value 在函数 name

    2025年11月29日
    8
  • vue中改变滚动条样式(CSS)

    vue中改变滚动条样式(CSS)改变滚动条的样式 让浏览器的滚动轴变细 这篇博客给出了完整的代码实现

    2026年3月18日
    2
  • 智能体来了,从 0 到 1 实现一个可运行的 Agent 系统

    智能体来了,从 0 到 1 实现一个可运行的 Agent 系统

    2026年3月15日
    2
  • 关于MSHTML_Html格式

    关于MSHTML_Html格式本文翻译自http://msdn.microsoft.com/workshop/browser/mshtml/overview/overview.aspMSDNHome>MSDNLibra

    2022年8月2日
    8
  • c语言中static关键字用法详解

    c语言中static关键字用法详解概述static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。在程序中使用static变量1.局部变量普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰…

    2022年4月30日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号