2013-08-22 4 views
0

Я пишу приложение BlackBerry 10, которое декодирует видеопоток H264 (из Parrot AR Drone) с использованием ffmpeg и libx264. Эти библиотеки были скомпилированы для BlackBerry QNX.Malloc Check Ошибка при открытии видеопотока

Вот мой код:

av_register_all(); 
avcodec_register_all(); 
avformat_network_init(); 

printf("AV setup complete\n"); 

const char* drone_addr = "http://192.168.1.1:5555"; 
AVFormatContext* pFormatCtx = NULL; 
AVInputFormat* pInputFormat = av_find_input_format("H264"); 

printf("Opening video feed from drone\n"); 

//THIS LINE FAILS 
int result = avformat_open_input(&pFormatCtx, drone_addr, pInputFormat, NULL); 

Последняя строка завершается с ошибкой:

Malloc Check Failed: :../../dlist.c:1168 

Как я могу исправить эту ошибку или отлаживать его дальше?

Обновление: Ошибка возникает только при подаче pInputFormat в avformat_open_input. Если я поставлю NULL, я не получу ошибку. Но для моего приложения я должен предоставить этот параметр, так как ffmpeg не может определить формат видео из одного канала.

+0

Вы пытались использовать «h264» - это маленькие колпачки? 'ffmpeg -formats' перечисляет h264, и, как известно, он довольно разборчив. – SirDarius

+0

Спасибо, хорошая идея, к сожалению, я все равно получаю ту же ошибку. 'pInputFormat' не является нулевым, поэтому я предполагаю, что он инициализирован правильно. – donturner

+0

ну, я думаю, вам нужно будет найти способ получить полную обратную трассировку от ошибки. У вас есть GDB или аналогичное программное обеспечение в вашем распоряжении? – SirDarius

ответ

0

Я установил это, добавив --enable-memalign-hack к флагам конфигурации для ffmpeg. Я сузил проблему до: libavutil/mem.c, которая включает некоторые препроцессоры для различных обработчиков памяти, которые привели меня к этому значению конфигурации.

Не уверен, что это правильное исправление, или я настроюсь на проблемы позже. Похоже, у кого-то другие проблемы были схожими: http://ffmpeg.org/pipermail/ffmpeg-devel/2013-February/138634.html

0

Try:

AVFormatContext * pFormatCtx = avformat_alloc_context();

Затем

avformat_free_context (pFormatCtx);

+0

Спасибо за предложение. К сожалению, это не сработало. Согласно документам (http://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#ga10a404346c646e4ab58f4ed798baca32), вы можете указать указатель NULL для 'AVFormatContext'' 'avformat_open_input'. – donturner