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