zoukankan      html  css  js  c++  java
  • 从YV12到NV12

    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
    }

  • 相关阅读:
    环境变量
    Python的简介和入门程序
    Mybatis的分页插件PageHelper的使用
    SQLyog 快捷键总结
    如何查看开发项目框架的版本信息
    Linux find命令示例 30
    转:数据库索引原理------MemCached
    array_merge 和 + 的区别
    [介绍]PHP设计模式:DAO(数据访问对象模式)
    PHP业务逻辑层和数据访问层设计
  • 原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/3316756.html
Copyright © 2011-2022 走看看