2013-03-12 14 views
7

Ho letto (da qualche parte, non ricordo e lo trovo più ora - forse la domanda sarebbe comunque obsoleta per me in ogni caso) che alcune funzioni FFmpeg non siano sicure per chiamare da più thread allo stesso tempo.ffmpeg: quali funzioni sono multithreading sicure?

FFmpeg per sé non è multithreading al sicuro, nel senso che non si dovrebbe chiamare av_read_frame o avcodec_decode_audio4 sullo stesso contesto da diversi thread allo stesso tempo - ma che è per lo più evidente.

Ma ad esempio, sembra che avformat_find_stream_info anche in contesti separati non sia sicuro per essere chiamato da thread diversi allo stesso tempo. Quindi, per renderlo sicuro, avresti bisogno di un mutex globale.

Esiste un elenco di funzioni che non sono sicure?

risposta

9

Alcune discussioni che ho trovato: here o here

Da quello che ho trovato finora, sembra che solo avcodec_open e avcodec_close non sono thread-safe.

Tuttavia, la soluzione corretta sembra essere quella di utilizzare av_lockmgr_register per registrare un gestore mutex in FFmpeg che viene quindi chiamato automaticamente da FFmpeg nei punti necessari. Vedere here o here. Anche Chrome lo fa, vedi here.

+1

voglio solo ricordare che avformat_find_stream_info non è thread-safe. –

+3

Se si costruisce FFmpeg con '--enable-pthreads', FFmpeg usa automaticamente la propria implementazione di lock manager predefinita, quindi non c'è bisogno di chiamare' av_lockmgr_register() '. – smokris

Problemi correlati