Allocate AVFrame for sws_scale()



尝试编写使用libav从任意视频中提取原始像素数据(~BMP(的程序。除了sws_scale()未能将AVFrame转换为RGB24之外,一切都很顺利。

我给出了一个最小的例子,其中AVFrame是用互联网上的4种不同方法创建和初始化的:https://github.com/SlavMFM/libav_bmp_example-所有这些都以不同的方式失败。如何修复它以便sws_scale()进行转换?

首先,不要使用avcodec_decode_video2。使用avcodec_send_packetavcodec_receive_frame

第二,不要在源上调用av_frame_get_buffer,只需将其分配给av_frame_allocavcodec_receive_frame将设置其余的

然后分配一个目的帧帧,如:

AVFrame* frame = av_frame_alloc();
frame->format = whatever;
frame->width = w;
frame->height = h;
av_frame_get_buffer(frame, 32);