コーデック実装
Windows Media Audio および Video コーデックは、COM オブジェクトとして実装されます。 通常、コーデックは COM オブジェクトのペアとして実装されます。1 つはエンコーダー用、1 つはデコーダー用です。 エンコーダーにはクラス識別子 (CLSID) があり、デコーダーには別の CLSID があります。 たとえば、Windows Media Audio 9 コーデックのエンコーダー部分は定数 CLSID_CWMAEncMediaObjectで表される CLSID を持ち、同じコーデックのデコーダー部分には定数 CLSID_CWMADecMediaObjectで表される CLSID があります。
場合によっては、1 つの COM オブジェクトに複数のエンコーダーが含まれます。 たとえば、Windows Media Video 9 エンコーダーと Windows Media Video 9.1 エンコーダーはどちらも同じ COM オブジェクトの一部です。 したがって、どちらも同じ CLSID を持ち、定数 CLSID_CWMV9EncMediaObjectで表されます。 同様に、一部の COM オブジェクトには複数のデコーダーが含まれています。
各エンコーダーまたはデコーダー オブジェクトは IMediaObject インターフェイスを公開し、オブジェクトを DirectX Media Object (DMO) および IMFTransform インターフェイスとして使用して、オブジェクトを Media Foundation Transform (MFT) として使用できるようにします。
ほとんどのエンコーダーでは、エンコーダーを DMO として使用するか MFT として使用するかに関係なく、同じ CLSID を使用してエンコーダーのインスタンスを作成します。 たとえば、Windows Media Video 9 エンコーダーのインスタンスを作成するには、エンコーダーを DMO または MFT のいずれとして使用するかに関係なく、 CLSID_CWMV9EncMediaObjectを使用します。 同様に、ほとんどのデコーダーでは、デコーダーを DMO または MFT のいずれとして使用するかに関係なく、各デコーダーは 1 つの CLSID を持っています。
Note
DMO と MFT の両方に対して単一の CLSID を使用することに関して、前のステートメントにはいくつかの例外があります。 たとえば、MPEG-4 Part 2 デコーダーは、DMO として機能する場合は CLSID を 1 つ、MFT として機能する場合は別の CLSID を持っています。
コア インターフェイスに加えて、各エンコーダーまたはデコーダー オブジェクトは、コーデック プロパティ (IPropertyBag と IPropertyStore ) を操作するための 2 つの同様のインターフェイス を実装します。 以前のバージョンのエンコーダー オブジェクトとデコーダー オブジェクトでは、プロパティ名を含む文字列値で各プロパティを識別する IPropertyBag を使用しました。 IPropertyStore は、一意のプロパティ キー値を使用してプロパティを識別する新しいインターフェイスです。 MFT のサポートを提供するために 、IPropertyStore のサポートが追加されました。 ほとんどの IPropertyBag プロパティ名文字列には、対応する IPropertyStore プロパティ キー GUID があり、ほとんどの GUID には対応する IPropertyBag 名文字列が含まれますが、いくつかの例外があります。
このドキュメントでは、プロパティ キー定数ごとにプロパティを一覧表示しますが、各エントリには、必要に応じて IPropertyBag で使用するプロパティ名の文字列定数が含まれています。