Partager via


Déclaration des informations de filtre

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La première étape consiste à déclarer les informations de filtre, si nécessaire. DirectShow définit les structures suivantes pour décrire les filtres, les broches et les types de médias :

Structure Description
AMOVIESETUP_FILTER Décrit un filtre.
AMOVIESETUP_PIN Décrit une épingle.
AMOVIESETUP_MEDIATYPE Décrit un type de média.

 

Ces structures sont imbriquées. La structure AMOVEIESETUP_FILTER a un pointeur vers un tableau de structures AMOVIESETUP_PIN , et chacune d’elles a un pointeur vers un tableau de structures AMOVEIESETUP_MEDIATYPE . Ensemble, ces structures fournissent suffisamment d’informations pour que l’interface IFilterMapper2 localise un filtre. Il ne s’agit pas d’une description complète d’un filtre. Par exemple, si le filtre crée plusieurs instances de la même broche, vous ne devez déclarer qu’une seule structure AMOVIESETUP_PIN pour cette broche. En outre, un filtre n’est pas nécessaire pour prendre en charge toutes les combinaisons de types de supports qu’il inscrit ; il n’est pas nécessaire d’inscrire tous les types de média qu’il prend en charge.

Déclarez les structures de configuration en tant que variables globales au sein de votre DLL. L’exemple suivant montre un filtre avec une broche de sortie :

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.
};

Le nom du filtre est déclaré en tant que variable globale statique, car il sera à nouveau utilisé ailleurs.

Comment inscrire des filtres DirectShow