Рассмотрим следующий фрагмент псевдокода:
init {
avdevice_register_all
avformat_network_init
}
thread {
// open input
av_find_input_format
avformat_open_input
avformat_find_stream_info
// open output
avformat_alloc_output_context2
avio_alloc_context(outputbuffer,size,1,extradata,0,&staticWrite,0)
avformat_new_stream
avcodec_parameters_copy
avformat_write_header
loop {
av_read_frame
av_write_frame
}
}
staticWrite {
// here comes data
}
Когда у меня только один поток, все работает хорошо. Однако, когда появляется больше потоков (2,3), возникают непредвиденные сбои (в основном, segfaults).
Теперь моя цель с этим вопросом - не найти мои segfaults, но Я хочу получить подтверждение того, что приведенный фрагмент хорош с точки зрения многопоточного avformat , или, если нет, что еще мне нужно, чтобы иметь возможность использовать функции avformat из нескольких потоков?
ffmpeg был скомпилирован с этой конфигурацией:
configuration: --enable-cross-compile --cross-prefix=arm-linux-gnueabihf- --arch=armhf --target-os=linux --prefix=. --enable-mmal --enable-omx --enable-omx-rpi --enable-gpl --enable-nonfree --enable-pthreads --extra-ldflags='-Llib -Wl,-rpath-link,lib' --extra-libs=-ldl --extra-cflags=-Iinclude