为 sws_scale() 分配 AVFrame

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_alloc分配它,avcodec_receive_frame将设置其余的

然后分配目标帧 frame 如:

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