【问题标题】:Optimize YUY2 to I420 conversion优化 YUY2 到 I420 的转换
【发布时间】:2014-04-04 04:41:01
【问题描述】:

我正在编写一个使用 x264 作为编码器的视频会议应用程序。我从网络摄像头接收 YUY2 原始帧,然后按照 x264 的要求将它们转换为 I420。问题是 - 我自己编写了转换算法,但速度不是很快(占整个 CPU 时间的 20%,数据由分析器提供)。我怎样才能让它更快?这是我的代码:

int YUY2ToI420(BYTE *in, BYTE *out){

    long pixels = _width * _height;
    long macropixels = pixels / 2; // macropixel count
    // new size will be w * h * 3/2 -> 12 bits per pixel 4:2:0

    long mpx_per_row = info.biWidth / 2;

    // for each macropixel
    for (int i = 0, ci = 0; i < macropixels; i++){ // ci is chroma index
        // get macropixel address, order is Y0 U0 Y1 V0
        BYTE *mpAddress = in + i * 4;

        // copy luma data
        out[i * 2] = mpAddress[0];
        out[i * 2 + 1] = mpAddress[2];

        // copy chroma data - we skip odd rows because of 4:2:0 sampling
        long row_number = i / mpx_per_row;
        if (row_number % 2 == 0) {
            out[pixels + ci] = mpAddress[1]; // shift by Y vector
            out[pixels + pixels / 4 + ci] = mpAddress[3]; // shift by Y and U vector
            ci++;
        }
    }

    return pixels * 12 / 8; // I420
}

【问题讨论】:

    标签: c++ video optimization


    【解决方案1】:

    我强烈建议您使用 ffmpeg 项目中的 sws_scale。它具有针对大多数 CPU 和颜色格式的优化功能。我相信你也可以使用 opencv,但我没有第一手经验。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多