sws_scale()不会简单地将图像从源复制到目标来转换图像



试图将任意视频读取为普通RGB24像素,因此使用sws_scale()转换帧的方式如下:

//...
AVFrame* pic_out = av_frame_alloc();
pic_out->format = AV_PIX_FMT_RGB24;
pic_out->width  = 1920;
pic_out->height = 1080;
av_frame_get_buffer( pic_out, 32 );
struct SwsContext * img_convert_ctx = sws_getContext(
1920, 1080, AV_PIX_FMT_YUV420P,
1920, 1080, AV_PIX_FMT_RGB24,
SWS_BICUBIC,
NULL, NULL, NULL
);
//...
sws_scale(
img_convert_ctx,
pic_src->data,     //pic_src is from avcodec_receive_frame()
pic_src->linesize,
0,
1080,
pic_out->data,
pic_out->linesize
);

一切都没有任何错误,但pic_out最终拥有与pic_src相同的数据。可能是什么问题?

完整的最小示例在这里(应该是RGB24图像是2.bmp,看起来实际上是YUV之类的(

问题是我将pic_out->data处理为RGB24图像数据,但它需要是pic_out->data[0]

相关内容

  • 没有找到相关文章

最新更新