私はサードパーティのビデオデコーダライブラリを直接ショートランスフォームフィルタでラップする作業をしています。非同期変換を使用してDirectShowトランスフォームフィルタを記述できますか?
私は、フルフレーム、すなわち
// on main thread
lib->RegisterCallback(callback function)
lib->write(raw data bytes)
void callback(frame)
{
// here is your frame (on a worker thread)
}
私は純粋仮想CTransformFilter.Transform機能を見てみると、それは期待する準備ができたときにサードパーティのライブラリは、非同期コールバックを使用すると、これは問題になるだろうと信じて同期して変換する。これを設定して、コールバックで設定されたイベントでブロックするようにしましたが、Transform関数に入ってくるデータが完全な新しいフレームを生成するのに十分でない場合はどうなりますか?私は関数をデッドロックします。
ライブラリデベロッパーに戻って同期デコーダを尋ねる唯一の方法はありますか?
私はちょうどCTransformFilter受信機能を見てきました。これは、(オーバーライドされた)Transform関数を呼び出すものです。次に、m_pOutput-> m_pInputPin-> Receive(pOutSample)を呼び出してサンプルを渡します。コールバックのワーカースレッドからこのReceive関数を呼び出すことができますか、同じスレッド上にすべてを保持する必要がありますか?
ありがとうございました
感謝をブロックしないようにするために、あなたの待ち時間を中止する必要があります、それは良いニュースです。 2番目の選択肢(と私の元の質問)がうまくいかない理由は、入力サンプルに新しいフレームを生成するのに十分なデータが含まれているかどうか、あるいはおそらく複数のフレームのデータが十分にあるかどうかわかりません。 変換フィルタの入力には、各サンプルが次のフレームに対応していなければならないという規定はありますか? –