2013-03-12 11 views
7

Przeczytałem (gdzieś, nie pamiętam i znajduję to już teraz - być może pytanie byłoby dla mnie przestarzałe, w przeciwnym razie), że niektóre funkcje FFmpeg nie są bezpieczne do wywoływania z wielu wątków w tym samym czasie.ffmpeg: które funkcje są wielowątkowe bezpieczne?

Sam FFmpeg nie jest wielowątkowy bezpieczny w tym sensie, że nie powinieneś nazywać się av_read_frame lub avcodec_decode_audio4 w tym samym kontekście z różnych wątków w tym samym czasie - ale to jest w większości oczywiste.

Ale na przykład wygląda na to, że avformat_find_stream_info nawet w różnych kontekstach nie można bezpiecznie wywoływać z różnych wątków w tym samym czasie. Aby to zapewnić, potrzebowałbyś globalnego muteksa.

Czy istnieje lista funkcji, które nie są bezpieczne?

Odpowiedz

9

Niektóre dyskusje znalazłem: here lub here

Z tego co znalazłem do tej pory wydaje się, że tylko avcodec_open i avcodec_close nie są bezpieczne dla wątków.

Jednak właściwym rozwiązaniem wydaje się użycie av_lockmgr_register do zarejestrowania obsługi muteksa w FFmpeg, która jest następnie wywoływana automatycznie przez FFmpeg w wymaganych miejscach. Zobacz here lub here. Również Chrome to robi, zobacz here.

+1

wystarczy wspomnieć, że avformat_find_stream_info również nie jest bezpieczny dla wątków. –

+3

Jeśli zbudujesz FFmpeg z '--enable-pthreads', FFmpeg automatycznie użyje własnej domyślnej implementacji menedżera blokad, więc nie ma potrzeby wywoływania' av_lockmgr_register() '. – smokris

Powiązane problemy