3

プログラムでフィルタ プロパティを変更する方法は?

フィルターを使用しています。フィルターを右クリックして値を入力すると、手動AAC encoderで変更できます。bitrategrapheditbitrate

コードを介して同じことを行うことは可能ですか?

貴重な提案と、可能であればコードを教えてください。

4

3 に答える 3

1

ローマンの答えと同様に、フィルターの「特別なプロパティ」が通常設定および/または保存される2つの方法があるようです。

1 つは、そのプロパティ ページの「ダイアログ」(ISpecifyPropertyPages) を表示し、ユーザーが変更して閉じることを許可し、その後 IPersistStream インターフェイスを取得して「現在の状態」を保存し、後で基本的な設定に使用できるようにすることです。そのプロパティは、保存されたものに戻ります(これがgrapheditの方法です。参照:http: //microsoft.public.multimedia.directx.dshow.programming.narkive.com/ldOko8Js/ispecifypropertypages-Saving-and-restoring-settings ) さらに、グラフ オブジェクト自体で IPersistStream を呼び出すことにより、「グラフ全体」をファイルにシリアル化できます。https://stackoverflow.com/a/11781370/32453を参照してください

もう 1 つの方法は、「それがどのタイプの特別なフィルターであるか」を把握し、それをサード パーティの知っている特別なインターフェイスにキャストすることです。 Windows SDK directshow の例は、ISynthインターフェイスを公開します

どうやらさらにいくつかの方法をリストしているこちらも参照してください...ここも関連しているようです。IPersist 自体にも、それを継承する複数のインターフェイスがあります。ここのコメントを参照してください。dshow デバイスの私の経験では、通常は IPersist と IPersistStream (および IAMSpecificPropertyPages) のみを実装しますが、他の一般的なインターフェイス (IAMVideoProcAmp など) の値を自分で保存してから、手動でプロパティを再設定することもできます...

更新: 残念ながら、多くのフィルターが IPersistStream を実装していますが、実際にそれを何か有用な目的で使用しているものはほとんどないようです...

于 2015-01-13T20:40:31.020 に答える
1

AAC エンコーダーには、いくつかの IID を介して公開されるインターフェイスがあります。その IID のインターフェイスを取得してから、ビットレート、サンプリング レートなどの追加機能にアクセスしてください。

于 2012-12-27T06:45:42.880 に答える