Всякий раз, когда выделяется AVFrame * с использованием следующего кода:
AVFrame *frame = av_frame_alloc();
frame->format = codec_context->pix_fmt;
frame->width = codec_context->width;
frame->height = codec_context->height;
if(av_frame_get_buffer(frame, 0) < 0){
//handle error
}
А позже попробуйте освободить этот кадр * с помощью av_frame_free(&frame);
, моя программа аварийно завершится ... однако, если я выделю кадр с помощью:
AVFrame *frame = av_frame_alloc();
int num_bytes = av_image_get_buffer_size(codec_context->pix_fmt, codec_context->width, codec_context->height, 1);
buffer = (uint8_t*) av_malloc(num_bytes * sizeof(uint8_t));
av_image_fill_arrays(frame->data, frame->linesize, buffer, codec_context->pix_fmt, codec_context->width, codec_context->height, 1);
Тогда av_frame_free (& frame) не вылетает. Что я делаю неправильно? Каковы различия в распределении моего кадра этими двумя способами? Спасибо за любую помощь!