使用FFMPEG从NV12原始数据转换为H264时出现颜色不匹配

问题描述 投票:0回答:1

我正在尝试使用FFMPEG的hw编码器将NV12原始数据转换为H264。

将原始数据传递给编码器我使用以下逻辑传递AVFrame结构:

    uint8_t * buf;
    buf = (uint8_t *)dequeue();
    frame->data[0] = buf;
    frame->data[1] = buf + size;
    frame->data[2] = buf + size;
    frame->pts = frameCount;
    frameCount++;

但是使用这个逻辑,我得到的颜色不匹配的H264数据,

有人能告诉我,如何将缓冲区传递给AVFrame数据?

感谢提前,harshil

c ffmpeg h.264 libavcodec libavformat
1个回答
0
投票

我通过传递AVFrame结构的正确lineize和数据值来解决颜色不匹配问题。

假设NV12有4x4图像的YYYYUVUV平面,那么在ffmpeg中,我们需要通过

linesize [0] = y的起始位置

linesize [1] = 4因为u的位置从4开始,我们不需要指定linesize [2],因为uv是打包的。

以及数据的情况

data [0] = y的起始位置

数据[1] = 4

© www.soinside.com 2019 - 2024. All rights reserved.