0

私のアプリケーションの1つでは、特定のビデオファイルのフレーム位置(フレーム番号)と実際のフレームサンプル時間の間のマップを知る必要があります。コールバックモードでDirectshowSampleGrabberフィルターを使用しています。ISampleGraberCBクラスのBufferCBメソッドをオーバーライドしています。コールバックが呼び出されるたびに、到着したサンプル時間をマップ内のフレーム位置にマッピングしています。フレーム位置は、ゼロから開始して新しいサンプルが到着するたびにインクリメントされます。必要なマップを生成することはできますが、大きなビデオファイルを処理する場合、上記のアプローチは非常に低速です。誰かがこのマップまたは他のより良いアプローチをすばやく生成する方法について何か提案を提供できますか?

前もって感謝します。

プラディープ

4

1 に答える 1

1

DirectShowには基本的に「フレーム番号」のようなものはなく、タイムスタンプだけです。必要なことを行う唯一のことは、すでに行っているように、ファイル全体を調べてタイムスタンプを記録することです。

ただし、生の/デコードされていない名声を受け取るようにサンプルグラバーを設定すると、プロセスがはるかに速くなる可能性があります。このように、デコーダーは必要なく、フレーム全体の反復は非常に迅速に行われます。(デフォルトのリアルタイムペースではなく)できるだけ早く処理を要求するために、グラフから時計を削除することを忘れないでください。

于 2013-02-15T21:25:26.413 に答える