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

Getting color mismatch while converting from NV12 raw data to H264 using FFMPEG

我正在尝试使用 FFMPEG 的硬件编码器将 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 数据?

提前致谢, 哈希尔

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

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

linesize[0] = y 的起始位置

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

还有数据

data[0] = y 的起始位置

数据[1] = 4