Allocate AVFrame for sws_scale()

Viewed 501

Trying to write program which uses libav to extract raw pixel data (~BMP) from arbitrary video. Everything goes well except sws_scale() failing to convert AVFrame to RGB24.

I formulated minimal example of it where AVFrame is being created and initialized with 4 different methods found on internet: https://github.com/SlavMFM/libav_bmp_example - all of them fail in different ways. How can I fix it so sws_scale() does the convertion?

1 Answers

First, don't use avcodec_decode_video2. Use avcodec_send_packet and avcodec_receive_frame

second, Don't call av_frame_get_buffer on source Just allocate it with av_frame_alloc, avcodec_receive_frame will set up the rest

Then allocate a destination frame frame like:

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