财位在家的哪个位置:博客聚合 - MSDK格式转化篇(三)从YVYU到NV12 : sokerspace.com
来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 20:16:35
MSDK格式转化篇(三)从YVYU到NV12
作者: Yanqing Wang (Intel) |英特尔® 软件网络博客 - 中文
日期: 2010/7/28 16:24
点击: 1
在MSDK格式转化篇(二)从YUY2到NV12中,作者已经讲述了YUY2的格式,以及如何将其转化为NV12的方法。在本篇文章中,将会介绍另外一种常用格式YVYU,及其如何将其转化为NV12格式。
首先认识一下YVYU的基本格式是如何?
YVYU的基本格式是 Y0V0Y1U0 Y2V1Y3U1 Y4V2Y5U2 ...,如图1所示:
图1 YVYU格式
请注意,图1是按照数据的YUV的格式标注,它不同于采样格式。YVYU的采样格式如下:
Y0V0Y1U0 Y2V2Y3U2 Y4V4Y5U4 ...
细心的网友可能发现,YVYU和YUY2基本上格式一致,仅仅是红蓝位置相互颠倒了。
即:
YUY2是YUYV
而
YVYU是YVYU
对于它们之间的格式转化,仅仅是将UV的数据交换就可以实现。
图2展示了NV12的基本格式。
图2 NV12格式
可以相仿YUY2的方式将它转化为NV12格式,算法如下:
for ( row = 0; row < Height; ++ row )
{
for ( col = 0; col < Width; ++ col )
{
NV12->Y[ index1 ++ ] = YUY2->Data[ index ++ ];
NV12->V[ index3 ++ ] = YUY2->Data[ index ++ ];
NV12->U[ index2 ++ ] = YUY2->Data[ index ++ ];
NV12->Y[ index1 ++ ] = YUY2->Data[ index ++ ];
}
index += (Stride - Width);
}
【小结】
- YVYU和YUY2格式仅仅是UV互换了一下,转化算法可以参考YUY2。
- 如果使用SSEx进行优化,那么可以定义统一内敛汇编进行转化,比如:
#define YUY2ToNV12( Y, U, V ) UNIFORM_MACO( Y, U, V )
#define YVYUToNV12( Y, U, V ) UNIFORM_MACO( Y, V, U )
<< MeeGo兼容问题的一些思考我在google code上建了一个项目。 >>
URL:http://www.sokerspace.com/modules/planet/view.article.php/687
Trackback:http://www.sokerspace.com/modules/planet/trackback.php/687