财会通讯编辑部电话:MSDK格式转化篇(一)从YV12到NV12 – 英特尔? 软件网络博客 - 中文

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 12:17:28

MSDK格式转化篇(一)从YV12到NV12

作者: Yanqing Wang (Intel) (76 篇文章)日期: 七月 26, 2010 在 3:25 下午

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格式。

分类: Blog Challenge, 图形和视觉计算, 英特尔® 软件网络 2.0
如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.