<div>Hello</div><div><br></div><div>I've been getting a lot of issues when attempting to open/close input files/streams in a multi threaded application, mostly resulting in memory problems and segfaults.</div><div>I've found a small reference to thread-safety in the post here: <a href="http://lists.libav.org/pipermail/libav-api/2011-June/000126.html">http://lists.libav.org/pipermail/libav-api/2011-June/000126.html</a> but I'm using a lot more calls than the ones referenced here.</div>
<div><br></div><div><br></div><div>My application has one input thread opened with avformat_open_input followed by multiple output threads which use avio_open to send the stream over rtmp,</div><div>I've noticed that if all my output threads try to open the output stream at the same time that I experience the problems, where as if I do this sequentially, one after the other, they work fine.</div>
<div><br></div><div>Are these functions thread-safe? if not which functions should I mutex/lock ?</div><div><br></div><div><br></div><div>My application currently runs in this order,</div><div><br></div><div>Input (Thread 1)</div>
<div><br></div><div>avformat_open_input</div><div>avformat_find_stream_info</div><div>av_find_best_stream</div><div>avcodec_open2</div><div><br></div><div>while(av_read_frame){</div><div>  avcodec_decode_audio3</div><div>
  avcodec_decode_video2</div><div>  av_free_packet</div><div>}</div><div><br></div><div><br></div><div>/* Some encoder threads in the middle */</div><div><br></div><div><br></div><div>Output (Thread 2,3....)</div><div>av_guess_format</div>
<div>avformat_alloc_context</div><div>av_new_stream</div><div>avio_open</div><div>avformat_write_header</div><div>while (/*packets to send */){</div><div>  av_write_frame</div><div>}</div><div><br></div><div><br></div><div>
(I'm working under the assumption that ANY of the calls mentioned above can occur at the same time.)</div><div><br></div><div>Can you please advise which of these calls need to be protected with mutex locks?</div><div>
<br></div><div>Regard</div><div>Evgeny</div>