Авформат с кастомным IO - threadsafe? - PullRequest
0 голосов
/ 30 марта 2020

Рассмотрим следующий фрагмент псевдокода:

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
...