我正在尝试使用 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