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
    }

  • 相关阅读:
    poj 3111 卖珠宝问题 最大化平均值
    如何在b站上传高码率视频
    AC自动机总结
    NOIP2018 旅行
    NOI2008 假面舞会 DFS
    鸽子的记录
    Unity学习笔记
    LuoguP1196 [NOI2002]银河英雄传说 并查集
    Luogu1801 黑匣子 堆
    Luogu P1321 单词覆盖还原 字符串
  • 原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/3316756.html
Copyright © 2011-2022 走看看