次の方法で共有


フィルター情報の宣言

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

最初の手順では、必要に応じてフィルター情報を宣言します。 DirectShow では、フィルター、ピン、メディアの種類を記述するための次の構造が定義されています。

構造体 説明
AMOVIESETUP_FILTER フィルターについて説明します。
AMOVIESETUP_PIN ピンについて説明します。
AMOVIESETUP_MEDIATYPE メディアの種類について説明します。

 

これらの構造体は入れ子になっています。 AMOVEIESETUP_FILTER構造体には、AMOVIESETUP_PIN 構造体の配列へのポインターがあり、これらの各構造体には、AMOVEIESETUP_MEDIATYPE構造体の配列へのポインターがあります。 これらの構造体をまとめると、 IFilterMapper2 インターフェイスがフィルターを見つけるのに十分な情報が提供されます。 フィルターの完全な説明ではありません。 たとえば、フィルターによって同じピンの複数のインスタンスが作成される場合は、そのピンに対して 1 つの AMOVIESETUP_PIN 構造のみを宣言する必要があります。 また、フィルターは、登録するメディアの種類のすべての組み合わせをサポートするために必要なわけではありません。また、サポートされているすべてのメディアの種類を登録する必要もありません。

セットアップ構造体を DLL 内のグローバル変数として宣言します。 次の例は、1 つの出力ピンを持つフィルターを示しています。

static const WCHAR g_wszName[] = L"Some Filter";

AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
    { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
    { &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};

AMOVIESETUP_PIN sudOutputPin = {
    L"",            // Obsolete, not used.
    FALSE,          // Is this pin rendered?
    TRUE,           // Is it an output pin?
    FALSE,          // Can the filter create zero instances?
    FALSE,          // Does the filter create multiple instances?
    &GUID_NULL,     // Obsolete.
    NULL,           // Obsolete.
    2,              // Number of media types.
    sudMediaTypes   // Pointer to media types.
};

AMOVIESETUP_FILTER sudFilterReg = {
    &CLSID_SomeFilter,      // Filter CLSID.
    g_wszName,              // Filter name.
    MERIT_NORMAL,           // Merit.
    1,                      // Number of pin types.
    &sudOutputPin           // Pointer to pin information.
};

フィルター名は、別の場所で再び使用されるため、静的グローバル変数として宣言されます。

DirectShow フィルターを登録する方法