Filtre wrapper DMO

[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.]

Le filtre wrapper DMO permet à une application DirectShow d’utiliser un objet multimédia DirectX (DMO) dans un graphique de filtre. Le filtre encapsule le DMO et gère tous les détails de l’utilisation du DMO, tels que le passage de données vers et depuis le DMO. En outre, le filtre agrège le DMO, afin que l’application puisse interroger le filtre pour toutes les interfaces COM exposées par le DMO.

Étiquette Valeur
Interfaces de filtre IBaseFilter, IDMOWrapperFilter, IPersistStream
Types de supports de broche d’entrée Voir les remarques
Interfaces de broche d’entrée IMemInputPin, IPin, IQualityControl
Types de supports de broche de sortie Voir les remarques
Interfaces de broche de sortie IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
Filtrer le CLSID CLSID_DMOWrapperFilter
CLSID page de propriétés Page Aucune propriété
Exécutable Qasf.dll
Mérite Voir les remarques
Catégorie de filtre Voir les remarques

 

Notes

Limites

Le wrapper DMO présente les limitations suivantes :

  • Il ne prend pas en charge les DMO avec zéro entrée, plusieurs entrées ou zéro sortie. (Il prend en charge les DMO avec une entrée et plusieurs sorties.)
  • Il ne prend pas en charge les transports personnalisés. Tous les transports de données sont effectués via l’interface IMemInputPin .
  • Il n’utilise pas l’interface IMediaObjectInPlace ; tout le traitement est effectué à l’aide des méthodes IMediaObject .

Épingles

Pour chaque flux d’entrée sur le DMO, le filtre crée une broche d’entrée correspondante. Pour chaque flux de sortie, il crée une broche de sortie correspondante. Les types de supports pris en charge par chaque broche dépendent du DMO

Interfaces d’encodeur

Si le DMO est un encodeur vidéo ou audio, la broche de sortie expose l’interface IAMStreamConfig . Si le DMO est un encodeur vidéo, la broche de sortie expose également l’interface IAMVideoCompression . Dans les deux cas, si le DMO prend en charge l’interface, l’épingle délègue au DMO. Sinon, l’épingle fournit sa propre implémentation.

Diffusion en continu

Le filtre utilise l’interface IMemInputPin pour gérer tout le streaming. Il ne prend pas en charge les connexions IAsyncReader . Le filtre appelle IMediaObject::P rocessOutput sur le DMO uniquement lorsqu’il reçoit des données de amont (y compris les notifications de fin de flux). Par conséquent, il ne prend pas en charge les DMO sans flux d’entrée.

Recherche

Toutes les demandes de recherche sont passées au filtre amont, via la première broche d’entrée sur le wrapper DMO. Pour les DMO à sortie multiple, cela signifie que le filtre amont peut recevoir plusieurs demandes de recherche lorsque l’application recherche le graphe.

Mérite

DirectShow affecte à tous les DMO une valeur de mérite par défaut MERIT_NORMAL + 0x800. Cette valeur se situe entre MERIT_NORMAL et MERIT_PREFERRED. Les filtres de décodeur ont généralement une valeur de mérite de MERIT_NORMAL. Par conséquent, le gestionnaire de graphe de filtre sélectionne généralement un décodeur DMO sur un filtre de décodeur. Pour remplacer la valeur de mérite par défaut, ajoutez une entrée de Registre à la clé de Registre de DMO dans HKEY_CLASSES_ROOT\CLSID. Incluez une valeur DWORD nommée « Merit » dont la valeur spécifie le mérite.

Category

Le filtre Wrapper DMO n’apparaît pas seul dans aucune catégorie. Lorsqu’il encapsule un DMO, il apparaît dans la catégorie DirectShow qui correspond à la catégorie de DMO, sous le nom du DMO.

Mémoires tampons

Le filtre wrapper DMO transmet des mémoires tampons de média au DMO qui exposent l’interface IMediaBuffer .

Dans Windows Vista ou version ultérieure, les mémoires tampons multimédias exposent également l’interface IServiceProvider. Le DMO peut utiliser cette interface pour obtenir un pointeur vers l’exemple de média associé à la mémoire tampon. Utilisez l’identificateur de service IID_IMediaSample. Un DMO vidéo peut utiliser l’interface IMediaSample2 de l’exemple multimédia pour définir des indicateurs d’entrelacement sur l’exemple. Le code suivant montre comment obtenir le pointeur vers l’exemple de média :

IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;

hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
    hr = pSp->QueryService(
        IID_IMediaSample,  // Service identifier.
        IID_IMediaSample2, // Interface identifier.
        (void**)&pSample2
        );
    if (SUCCEEDED(hr))
    {
        // Set flags (not shown).
        pSample2->Release();
    }
    pSp->Release();
}

Pour plus d’informations sur les indicateurs d’entrelacement par exemple, consultez structure AM_SAMPLE2_PROPERTIES.

Contrôle qualité

Si le DMO expose l’interface IDMOQualityControl , le filtre traduit les appels IQualityControl::Notify sur sa broche de sortie en appels IDMOQualityControl::SetNow sur le DMO. Le paramètre rtNow de SetNow est calculé comme la somme des membres TimeStamp et Late de la structure Quality .

Utilisation du fiter dans GraphEdit

Dans GraphEdit, le filtre Wrapper DMO n’apparaît pas sous son propre nom. Au lieu de cela, chaque DMO inscrit est répertorié sous la catégorie de filtre appropriée. Lorsque vous ajoutez un DMO via la boîte de dialogue Insérer des filtres , GraphEdit crée le filtre wrapper DMO et le configure pour l’utiliser.

Filtres DirectShow

Objets multimédias DirectX