キャプチャを使用してopencvのフォルダーからビデオをキャプチャし、cvqueryフレームを使用してフレームを取得するc++-cliコードがあります。次にフレームを処理し、すべてのフレームが処理されたらキャプチャを解放します。正常に動作しますが、マルチスレッドを実行しようとすると警告が表示され、「avcodec_open / close()周辺のスレッドロックが不十分です」という警告とともにフォルダー内の一部のビデオをキャプチャできません。
//for each video in folder do
{
capture=cvCreateFileCapture(filename);
while(1)
{
img=cvqueryframe(capture)
if !img break;
///process img
}
cvreleasecapture(&capture);
}
マルチスレッドの問題を修正する方法はありますか?使うことを考えていました
while(!capture)
capture=cvCreateFileCapture(filename);
しかし、もっと効率的な方法があるはずです。おそらく、Monitor :: Enter(obj)またはlock(obj)をロックすることを使用しますか?