エンコーダーの実装とサポート
Windows XP Service Pack 1 では、Microsoft は、ビデオ専用エンコーダー デバイスをサポートするために、ksmedia.h で 3 つのカーネル ストリーミング プロパティ セットと 1 つの列挙を定義しました。 各プロパティ セットには、1 つのプロパティが含まれています。 つまり、各プロパティは独自のプロパティ セットを受け取ります。 ドライバーが get-property または Set-property の呼び出しを行う場合、KSPROPERTY 構造体の Set メンバーで (ksmedia.hで定義される) プロパティ セットの GUID を指定し、呼び出しを設定するときに Id メンバーに 0 を設定します。
Property Set | 説明 |
---|---|
ENCAPIPARAM_BITRATE | このプロパティ セットを実装して、エンコーダー デバイスでサポートされるエンコード ビット レートを指定します。 詳細については、 「エンコーダー コードの例」を参照してください 。 |
ENCAPIPARAM_BITRATE_MODE | このプロパティ セットを実装して、デバイスがサポートするエンコード モードを指定します。 このプロパティ セットでは、 VIDEOENCODER_BITRATE_MODE 列挙を使用して、サポートされているモードを指定します。 詳細については、 「エンコーダー コードの例」を参照してください 。 |
ENCAPIPARAM_PEAK_BITRATE | このプロパティ セットを実装して、デバイスの最大エンコード ビット レートを指定します。 |
クライアントは、IEncoderAPI COM インターフェイスから IVideoEncoder COM インターフェイスを派生することで、これらのプロパティにアクセスします (Windows ソフトウェア開発キット (SDK) のドキュメントで説明されています)。
ミニドライバーは、各 ENCAPIPARAM_Xxx プロパティのデフォルト値を指定する必要があります。 「エンコーダ コードの例」というトピックでは、デフォルトのプロパティ値を指定する方法を示します。 エンコーダー フィルターの開発とデバッグ中に、現在のプロパティ ページは、ENCAPIPARAM_BITRATE プロパティ セットをサポートするミニドライバーからトリガーできます。
DirectX 9.0 では、オーディオ専用エンコーダーを含むさまざまなエンコーダーをより適切にサポートできるように、ksmedia.h で 6 つの追加プロパティ セットと 1 つのイベント セットが定義されました。 ENCAPIPARAM_Xxx プロパティと同様に、各プロパティは独自のプロパティ セットを受け取ります。
Property Set | 説明 |
---|---|
CODECAPI_VIDEO_ENCODER | デバイスが(テレビ オーディオなどの補助オーディオを含む)ビデオ ストリームのエンコードをサポートしている場合は、このプロパティ セットのサポートを実装します。 |
CODECAPI_AUDIO_ENCODER | デバイスがオーディオ専用エンコーダーの場合は、CODECAPI_VIDEO_ENCODERではなく、このプロパティ セットのサポートを実装します。 |
CODECAPI_SETALLDEFAULTS | このプロパティ セットを実装して、エンコード ビット レートやエンコード モードなどのエンコーダ デバイスのすべての内部設定をデフォルト値にリセットします。 |
CODECAPI_ALLSETTINGS | このプロパティ セットを実装して、エンコーダー デバイスの現在の設定を伝えます。 このプロパティ セットは、クライアントとの間の通信に使用されます。 |
CODECAPI_SUPPORTSEVENTS | デバイスがユーザー モードからの (エンコード モード、ビット レート、その他の設定を変更するなどの)イベントをサポートしている場合は、このプロパティ セットを実装します。 このプロパティ セットを実装する場合は、CODECAPI_CHANGELIST イベントのサポートも実装する必要があります。 |
CODECAPI_CURRENTCHANGELIST | このプロパティ セットを実装して、1 つ以上のエンコーダー プロパティを設定するために以前の呼び出しで変更されたエンコーダー パラメーターを決定します。 |
イベント セット | 説明 |
---|---|
デバイスが CODECAPI_SUPPORTSEVENTS プロパティ セットを介してユーザー モード イベントを応答することをサポートしている場合は、このイベント セットを実装して、クライアントの以前の Set-property 呼び出しの結果として、変更されたエンコーダー設定の一覧を CODECAPI_SETALLDEFAULTS または CODECAPI_ALLSETTINGS に返します。 |
クライアントは、ICodecAPI COM インターフェイスを介してこれらのプロパティにアクセスします (Windows SDK ドキュメントで説明されています) 。 KsProxy が公開するインターフェイスを指定する方法など、COM インターフェイスの詳細については、「エンコーダーのインストールと登録」を参照してください。
ミニドライバーは、基本的な get-property クエリのサポートを実装する必要があります。 「エンコーダ コードの例」というトピックでは、get-property クエリをサポートする方法を示します。
エンコーダー フィルターを開発するときは、エンコード機能をビデオ キャプチャ フィルターとは別のフィルターに移動します。 グラフ ビルダーがエンコーダーとキャプチャ フィルターを適切に接続できるように、独自のプライベート ミディアムを定義します。 ハードウェアで非エンコード コンテンツをバス マスターできる場合は、パブリック ミディアムを公開することもできます。 パブリックミディアムとプライベートミディアムの両方を実装する場合は、グラフの構築時間が短縮されるため、プライベートミディアムを最初にリストし、フィルター グラフを作成するときに正しいフィルターを見つけます。
(個別のフィルター グラフで) フィルターのミディアムと複数のインスタンスを使用する方法の詳細については、「ミディアムとカテゴリ」を参照してください。