2

ソケットを介して外部プログラムからオーディオを受信するDelphi6プログラムがあります。次に、そのオーディオをDirectShowフィルターグラフにフィードしたいと思います。このグラフを作成して、そのオーディオをPC上のさまざまな出力フィルターにルーティングします。DirectShowフィルターグラフの作業にDSPACKを使用しています。開始点としてプッシュソースフィルターを作成する方法を示すDSPACKの例の1つを使用します。

DirectShowフィルターをメインEXEに直接埋め込むことは可能ですか、それとも外部DLLまたはAXファイルを作成してその上でzippy32を実行する必要がありますか?外部モジュールの作成は避けたいです。そうしないと、パラメーターとデータ受け渡しブリッジをメインプログラムとの間に作成する必要があり、その作業を排除したいと思います。プッシュソースフィルターコードをメインプログラムに単純に含めて、可能であれば、WindowsをDirectShowフィルターとして使用できるようにする方法があるかどうか疑問に思っています。

4

2 に答える 2

5

フィルタをライブラリ(DLL)に配置する必要はなく、登録済みのCOMオブジェクトである必要もありません。前述のように、これを行う唯一の理由は、CoCreateInstanceおよび/またはDirectShowカテゴリの列挙を介してアプリケーションでフィルターを使用できるようにすることです。

アプリケーションに直接配置されるため、実装するIBaseFilter必要がIFilterGraph::AddFilterあり、グラフに配置されます。フィルタをプライベートに使用する利点は、COMインターフェイスを介してアプリケーションとフィルタ間の通信を実装する必要がなく、ネイティブ/ダイレクトポインタを使用できることです。

Geraintの投稿「登録なしのフィルターの使用」も参照してください。

于 2011-10-10T06:45:26.800 に答える
3

フィルタをDLLに入れる唯一の理由は、それらを複数のプログラムで使用できるようにするためだと思います。一方、フィルタをDLLに配置する場合は、必要なときにQI用のインターフェイスを実装するように常に設定できます。

私の仕事では、独自のアーカイブファイルに保存されている映画を再生する必要がありました。メディアフォーマットを適切に記述した出力ピンを備えたソースを作成しましたが、必要に応じて、残りは自動的に機能しました。また、ビデオには独自のレンダラーを使用する必要がありました。これらはすべて、C++で記述された.exeに組み込まれています。

于 2011-10-10T06:11:33.053 に答える