2

多くの .flv ビデオ ファイルをデコードするためのコードを作成します。各ビデオ ファイルは、個別のスレッドによってデコードされます。1つのスレッドで試してみると、すべて問題ありません。しかし、2 つ以上のスレッドを試してみると、「avcodec_open/close() 周辺のスレッド ロックが不十分です」というエラーが常に発生します。

私は検索しましたが、関数 avcodec_open() および avcodec_close() がスレッドセーフではないことを知っています。その後、その 2 つの関数が呼び出される場所にミューテックス ロックを配置しました。

lockObj.Lock();
avcodec_open/close();
lockObj.UnLock();

しかし、「avcodec_open/close() 周辺のスレッド ロックが不十分です」というエラーが引き続き発生します。

誰かが私に解決策を教えてもらえますか?

どうもありがとう、

T&Tグループ

4

1 に答える 1

0

lockObjすべてのスレッドで同じオブジェクトですか?

ミューテックスのポイントは、複数のスレッドavcodec_open()が同時に呼び出されないようにすることです。lockObj.Lock()他のスレッドは、最初のスレッドが呼び出すまで、ステートメントに到達したら停止して待機する必要がありますlockObj.UnLock()。各スレッドに独自のlockObj.

私はこの方法を (Qt の) QMutex で使用したので、それが可能であることはわかっています。

于 2013-09-12T18:37:31.590 に答える