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



我正在尝试使用 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 中,我们需要通过

线型[0] = Y 的起始位置

线型[1] = 4,因为您的位置从 4 开始而且我们不需要指定线型[2],因为UV是包装的。

以及在数据的情况下

数据[0] = Y 的起始位置

数据[1] = 4

最新更新