Я пытаюсь декодировать видео с помощью libav, следуя демонстрационному коду: здесь
Мне нужно иметь возможность контролировать, где хранятся данные кадра в pFrame->data[0]
.Я попытался установить pFrame->data
для моего собственного буфера следующим образом:
// Determine required buffer size and allocate buffer
int numBytes = av_image_get_buffer_size(pixFmt, width, height, 1);
(uint8_t*) dataBuff = (uint8_t*) malloc (numBytes * sizeof(uint8_t));
// Assign buffer to image planes in pFrame
av_image_fill_arrays(frame->data, frame->linesize, dataBuff, pixFmt, width,
height, 1);
В то время как pFrame->data
устанавливает dataBuff
(если я печатаю их адреса, они совпадают), этот вызовret = avcodec_receive_frame(pCodecContext, pFrame)
для получения декодированных данных всегда записывает данные на другой адрес.Кажется, он управляет собственной памятью где-то в базовом API и игнорирует dataBuff
, который я назначил pFrame
прямо перед этим.
Так что я застрял - как я могу сказать libav
написатьдекодированные данные кадра в память, которую я предварительно выделил?Я видел, как люди задают подобные вопросы онлайн и на форуме libav, но не смогли найти ответ.
Большое спасибо ~