分享

博客聚合 - MSDK格式转化篇(一)从YV12到NV12 : sokerspace.com

 techres 2011-04-21


作者: Yanqing Wang (Intel) | 英特尔? 软件网络博客 - 中文
日期: 2010/7/26 15:25
点击: 30

Media SDK的decoder,vpp,encoder对输入输出格式有着严格的限制,现在仅仅支持NV12。那么如何从其他格式转化为NV12是日常工作中经常遇到的事情。本篇文章以此为目的,讨论如何将YV12格式转化为NV12格式。


YV12格式是常用的CODEC格式,它的格式如图1所示。



                                                    图1 YV12格式


图1中:

W表示图像的宽度,即Width的缩写。

H表示图像的高度,即Height的缩写

Stride表示图像行的跨度,超出Width部分为填充数据,主要目的是为了字节对齐,一般以16字节或者32字节对齐居多。


NV12是英特尔定义的视频格式,它在英特尔硬件平台上是原生态支持,它的格式如图2所示。



                                                    图2 NV12格式


从图1,图2可以看出,YV12和NV12基本上相似:

- Y有相同的格式

- U和V不同。YV12将VU分开存储,而NV12将其交叉存储。


程序伪代码实现YV12转成NV12

1. 拷贝Y数据

memcpy( NV12->Y, YV12->Y, Height * Stride );

2. 拷贝UV数据

while ( 有数据 )

{

NV12->U[ index ] = YV12->U[ index ];

NV12->V[ index ] = YV12->V[ index ];

++ NV12->U;

++ NV12->V;

++ YV12->U;

++ YV12->V;

++ index

}


【小结】

- YV12转成NV12是相对简单的工作,重点是要认识这两种格式对YUV数据如何存储。

- 伪代码仅仅是提供了一种思路,实际的使用中可以根据情况来决定是否需要开辟新的存储空间来存放NV12格式。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多