尝试编写使用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
将设置其余的
然后分配一个目的帧帧,如:
AVFrame* frame = av_frame_alloc();
frame->format = whatever;
frame->width = w;
frame->height = h;
av_frame_get_buffer(frame, 32);