エンコーダ API

エンコーダ API は、ソフトウェア エンコーダおよびハードウェア エンコーダに使う、均一のインターフェイスを提供する。アプリケーションは、エンコーダ API を使ってエンコーダの構成を行ったり、構成の設定内容を保存したりできる。エンコーダ ベンダは、エンコーダ API を使ってエンコーダの能力を公開できる。エンコーダ API は主にエンコーダ向けに設計されているが、一般にデコーダもエンコーダ API をサポートすることができる。

エンコーダ API は ICodecAPI インターフェイスを介してアプリケーションに公開される。このインターフェイスはエンコーダ フィルタが公開する。エンコーダ フィルタの種類として、ネイティブの DirectShow フィルタ、ハードウェア エンコーダ、および DirectX Media Object (DMO) がある。

  • ソフトウェア フィルタ: ネイティブの DirectShow フィルタとして実装されるエンコーダで、ICodecAPI を直接公開する。
  • ハードウェア エンコーダ: エンコード デバイスは、1 つ以上の AVStream ミニドライバを通じて公開される。このミニドライバは KSProxy がユーザー モードの状態で表す。KSProxy は ICodecAPI メソッド呼び出しを KS プロパティ セットに変換する。詳細については、DDK の「Encoder Minidrivers」を参照すること。
  • DMO: DMO は ICodecAPI インターフェイスを公開する。DirectShow アプリケーションは、DMO ラッパー フィルタを照会できる。このフィルタは、DMO を集成することにより、ICodecAPI インターフェイスを公開する。DirectShow に基づいていないアプリケーションは、DMO に直接照会できる。

エンコーダの能力

エンコーダは、システム レジストリに格納することによって、上位レベルの能力のリストを登録できる。それぞれの能力は GUID によって識別される。特定のエンコーダの能力を列挙するには、次の手順を実行する。

  1. エンコーダ フィルタを表すモニカを作成する。(「Using the System Device Enumerator」参照。)
  2. IGetCapabilitiesKey インターフェイスのフィルタ モニカを照会する。
  3. IGetCapabilitiesKey::GetCapabilitiesKey を呼び出す。このメソッドは、フィルタの能力リストを格納するレジストリ キーに対するハンドルを返す。
  4. RegEnumValue を呼び出して、返されたキーの値を列挙する。

エンコーダを開発する場合は、フィルタが登録されているときは能力のレジストリ エントリを作成する。ソフトウェア フィルタの場合、FilterData キーと FriendlyName キーの近くに Capabilities という名前のキーを作成する。通常、この情報は AMovieDllRegisterServer2 を呼び出してフィルタの標準的なデータを登録した後に追加する。詳細については、「DirectShow フィルタの登録方法」を参照すること。または、Capabilities キーの場所を示す文字列を格納する CapabilitiesLocation キーをレジストリ内に作成することもできる。この文字列の先頭は、"HKLM\"、"HKCR\"、または "HKCU\" のいずれかにしてレジストリ サブツリーを示す必要がある。プラグ アンド プレイ デバイスの場合、ドライバのセットアップ ファイルはフィルタの FriendlyName キーの近くに Capabilities キーを作成する必要がある。また、ソフトウェア フィルタの場合は前述のように Capabilities キーは CapabilitiesLocation キーを使うことができる。

Capabilities キーを作成したら、各能力の GUID に対応する値を作成する。値の名前は、GUID と同じように、{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} という形式とする。各値の種類は、次のいずれかである必要がある。

  • 単一の数値。DWORD 値を使う。
  • GUID。GUID の文字列形式を使う。
  • 数値のペア。"a,b" という形式の文字列を使って数値のペアを表す。幅や高さ、分数の分子と分母などに使う。
  • 値の配列。複数の文字列 (REG_SZ_MULTI) を使って、2 つ以上の値を表す。

次の例は、ソフトウェア フィルタの場合のレジストリ レイアウトである。

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    Values: 
    guid1: 1234 (REG_DWORD)   
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    guid3: "2","4","6" (REG_SZ_MULTI)
    guid4: "720,480" (REG_SZ) 

エンコーダ プロファイル

エンコーダ プロファイルは、ランタイム時にエンコーダに適用できる、構成設定の固定リストである。プロファイルは、エンコーダからは独立している。アプリケーションはまずエンコーダを選択し、次にプロファイルを選択して、そのプロファイルをエンコーダに適用できる。プロファイルは、GUID によって識別され、レジストリ内の次の場所に格納する。

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

Profile GUID は、プロファイルを識別する GUID の文字列形式の値である。各設定について値を作成する。さらに、プロファイル ("LowBandwidthVideo" など) を識別する、FriendlyName という名前の文字列値を作成する。