Выделить AVFrame для sws_scale () - PullRequest
0 голосов
/ 13 марта 2020

Попытка написать программу, которая использует libav для извлечения необработанных данных пикселей (~ BMP) из произвольного видео. Все идет хорошо, за исключением того, что sws_scale() не удалось преобразовать AVFrame в RGB24.

Я сформулировал минимальный пример этого, где AVFrame создается и инициализируется с помощью 4 различных методов, найденных в inte rnet: https://github.com/SlavMFM/libav_bmp_example - все они терпят неудачу по-разному. Как я могу это исправить, чтобы sws_scale() сделал преобразование?

1 Ответ

2 голосов
/ 13 марта 2020

Во-первых, не используйте 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);
...