如何逐像素填充AvFrame

时间:2017-05-18 12:41:47

标签: c++ video ffmpeg libavcodec libav

我尝试使用ffmpeg将opengl输出编码为mp4文件,但是当我想用这段代码片段填充像素颜色的AvFrame时:

for (y = 0; y < c->height; y++) {
for (x = 0; x < c->width; x++) {
    int offset = 3 * (x + y * c->width);

    if (x > 2* c->width / 3 && x <c->width )
    {
        frame->data[0][offset + 0] = 0; // B
        frame->data[0][offset + 1] = 0; // G
        frame->data[0][offset + 2] = 255; // R
    } 
    else if(x < 2 * c->width / 3 && x > c->width / 3) {
        frame->data[0][offset + 0] = 0; // B
        frame->data[0][offset + 1] = 255; // G
        frame->data[0][offset + 2] = 0; // R
    }
    else {
        frame->data[0][offset + 0] = 255; // B
        frame->data[0][offset + 1] = 0; // G
        frame->data[0][offset + 2] = 0; // R
    }
}

然后我有这个视频输出:

enter image description here

我有ffmpeg的这个选项:

编解码器:libx264rgb &安培; pix_fmt:AV_PIX_FMT_BGR24

事实上,我希望像这样的视频输出:

enter image description here

我也是ffmpeg的新手,我真的不知道关于视频编码的高级内容,所以任何人都知道什么是问题?

1 个答案:

答案 0 :(得分:1)

我改变了:

ret = av_frame_get_buffer(frame, 32);

ret = av_frame_get_buffer(frame, 1);

并且修复了。