为 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_packet
和 avcodec_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);
正在尝试编写使用 libav
从任意视频中提取原始像素数据 (~BMP) 的程序。一切顺利,除了 sws_scale()
无法将 AVFrame
转换为 RGB24。
我制定了它的最小示例,其中 AVFrame
正在使用 4 种在互联网上找到的不同方法创建和初始化:https://github.com/SlavMFM/libav_bmp_example - 所有这些都以不同的方式失败。我该如何修复它以便 sws_scale()
进行转换?
首先,不要使用avcodec_decode_video2
。使用 avcodec_send_packet
和 avcodec_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);