2013-03-12 21 views
7

いくつかのFFmpeg関数は、同時に複数のスレッドから呼び出すのは安全ではないということを、私は読んだり(どこかで覚えておらず、今はもう見つからないかもしれません。ffmpeg:どの機能がマルチスレッドで安全ですか?

のFFmpeg自体は、あなたが同時に異なるスレッドから同じコンテキストにav_read_frameまたはavcodec_decode_audio4を呼ぶべきではないという意味で安全なマルチスレッドされていない - それは、ほとんど明らかです。

しかし、たとえば、別のコンテキストでもavformat_find_stream_infoが異なるスレッドから同時に呼び出すのは安全でないようです。したがって、安全にするためには、グローバルミューテックスが必要です。

安全でない機能のリストはありますか?

答えて

9

いくつかの議論は、私が見つかりました:hereまたは

hereを私がこれまでに発見したものを、スレッドセーフではありませんだけavcodec_openavcodec_closeのように思えるから。

しかし、適切な解決策は、FFmpegでmutexハンドラを登録するためにav_lockmgr_registerを使用し、必要な場所でFFmpegによって自動的に呼び出されるように思われます。 hereまたはhereを参照してください。 Chromeでも同様です(hereを参照)。

+1

avformat_find_stream_infoもスレッドセーフではないことを言いたいだけです。 –

+3

FFmpegを '--enable-pthreads'でビルドすると、FFmpegは自動的に独自のデフォルトのロックマネージャ実装を使用しますので、' av_lockmgr_register() 'を呼び出す必要はありません。 – smokris

関連する問題