我正在尝试为以RGB24格式初始化的AVFrame填充示例数据。
我使用以下代码片段填充RGB数据。
但是在编码的视频中,我只能看到灰度条仅覆盖视频帧的1/3。
此代码段假定仅填充红色。
有什么提示我在这里做错了什么?

AVFrame *targetFrame=.....
int height=imageHeight();
int width=imageWidth();


  for(y=0;y<encoder.getVideoParams().height ;y++){
       for(x=0;x< encoder.getVideoParams().width;x++){


   targetFrame->data[0][(y* width)+x]=(x%255); //R
   targetFrame->data[0][(y* width)+x+1]=0;     //G
   targetFrame->data[0][(y* width)+x+2]=0;     //B


  }
   }

最佳答案

如果您使用的是RGB24,则需要先缩放坐标,然后再索引到数据缓冲区中。这是可以正确执行的内部循环版本:

int offset = 3 * (x + y * width);
targetFrame->data[0][offset + 0] = x % 255; // R
targetFrame->data[0][offset + 1] = 0; // G
targetFrame->data[0][offset + 2] = 0; // B


这是一个更简单的方法:

uint8_t *p = targetFrame->data[0];
for(y = 0; y < encoder.getVideoParams().height; y++) {
    for(x = 0; x < encoder.getVideoParams().width; x++) {
        *p++ = x % 255; // R
        *p++ = 0; // G
        *p++ = 0; // B
    }
}

09-07 09:04