Partager via


Filtre wrapper DMO

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans 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 capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est 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, comme 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
Page de propriétés CLSID Aucune page de propriétés
Exécutable Qasf.dll
mérite Voir les remarques
catégorie de filtre Voir les remarques

 

Remarques

Limitations

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 sorties. (Il prend en charge les objets de gestion de domaine avec une entrée et plusieurs sorties.)
  • Il ne prend pas en charge les transports personnalisés. Tout le transport de données est effectué via l’interface IMemInputPin.
  • Il n’utilise pas l’interface IMediaObjectInPlace ; tout le traitement est effectué à l’aide de méthodes IMediaObject.

Broches

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 un encodeur 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, les délégués d’épingle au DMO. Sinon, la broche fournit sa propre implémentation.

Streaming

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 en amont (y compris les notifications de fin de flux). Par conséquent, il ne prend pas en charge les DMO avec zéro flux d’entrée.

Recherche

Toutes les requêtes de recherche sont transmises au filtre en amont, via la première broche d’entrée sur le wrapper DMO. Pour les objets de gestion de base de données à sortie multiple, cela signifie que le filtre en amont peut recevoir plusieurs demandes de recherche lorsque l’application recherche le graphique.

Mérite

DirectShow affecte toutes les DMO une valeur de mérite par défaut de MERIT_NORMAL + 0x800. Cette valeur se situe entre MERIT_NORMAL et MERIT_PREFERRED. Les filtres décodeurs ont généralement une valeur de mérite de MERIT_NORMAL. Par conséquent, le gestionnaire de graphiques 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 « Mérite » dont la valeur spécifie le mérite.

Catégorie

Le filtre wrapper DMO n’apparaît pas par lui-même dans une 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.

Tampons

Le filtre Wrapper DMO transmet des mémoires tampons multimédias à l’interface DMO qui exposent l’interfaceIMediaBuffer.

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 pour définir des indicateurs entrelaceurs 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’interlace par exemple, consultez AM_SAMPLE2_PROPERTIES Structure.

Contrôle qualité

Si le DMO expose l’interface IDMOQualityControl, le filtre traduit IQualityControl ::Notify appelle sur sa broche de sortie en IDMOQualityControl ::SetNow appels sur le DMO. Le paramètre rtNow de SetNow est calculé comme la somme des timeStamp et membres 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