我正在尝试使用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数据吗?
预先感谢, 哈西尔
答案 0 :(得分:0)
我通过传递正确的行大小和AVFrame结构的数据值解决了颜色不匹配的问题。
假设NV12具有用于4x4图像的YYYYUVUV平面,那么在ffmpeg中,我们需要通过
linesize [0] = y的起始位置
linesize [1] = 4,因为u的位置从4开始 而且我们不需要指定linesize [2],因为uv是压缩的。
以及数据情况下
data [0] = y的起始位置
数据[1] = 4