[Libav-user] FFmpeg thread safety

John Orr john.orr at scala.com
Wed Aug 20 17:32:12 CEST 2014


On 8/18/2014 5:22 PM, Patrick Dehne wrote:
> Am 18.08.2014 um 23:10 schrieb wm4 <nfxjfg at googlemail.com>:
>
>> On Mon, 11 Aug 2014 12:39:02 +0200
>> Ole Andre Birkedal <o.birkedal at sportradar.com> wrote:
>>
>>> Hi.
>>> I'm currently developing a multithreaded C++ program using std::thread.
>>> Recently I have been having some crashing issues and it all seems to
>>> related non-thread safety of some function in the FFmpeg API.
>>>
>>> Does there exist an exhausting list of all the function that are not
>>> thread safe?
>> All of them.
> You may want to take a look at the documentation of av_lockmgr_register.


Certain ffmpeg open and close functions need to be serialized across all 
threads.

These include avformat_open_input/avformat_close_input and 
avcodec_open/avcodec_close.

By default ffmpeg assumes your app is single threaded and doesn't need 
locking, so the underlying "locks" are no-ops. There is a function, 
av_lockmgr_register, that allows the app to provide your locking mechanism.

The docs for avcodec_open/close and avformat_open/close_input do not 
mention av_lockmgr_register. It wasn't until I looked through ffmpeg 
source code and found the no-op locking mechanism that I found out about 
av_lockmgr_register. That gave me something to google for, so I found 
some discussions about it, like this one:


http://stackoverflow.com/questions/13888915/thread-safety-of-libav-ffmpeg


--Johno



More information about the Libav-user mailing list