Méthode IMFTransform ::GetOutputAvailableType (mftransform.h)

Obtient un type de média disponible pour un flux de sortie sur cette transformation Media Foundation (MFT).

Syntaxe

HRESULT GetOutputAvailableType(
  [in]  DWORD        dwOutputStreamID,
  [in]  DWORD        dwTypeIndex,
  [out] IMFMediaType **ppType
);

Paramètres

[in] dwOutputStreamID

Identificateur de flux de sortie. Pour obtenir la liste des identificateurs de flux, appelez IMFTransform ::GetStreamIDs.

[in] dwTypeIndex

Index du type de média à récupérer. Les types de médias sont indexés à partir de zéro et retournés dans l’ordre de préférence approximatif.

[out] ppType

Reçoit un pointeur vers l’interface IMFMediaType . L’appelant doit libérer l’interface.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
S_OK
E_NOTIMPL
Le MFT n’a pas de liste de types de sortie disponibles.
MF_E_INVALIDSTREAMNUMBER
Identificateur de flux non valide.
MF_E_NO_MORE_TYPES
Le paramètre dwTypeIndex est hors plage.
MF_E_TRANSFORM_TYPE_NOT_SET
Vous devez définir les types d’entrée avant de définir les types de sortie.

Remarques

Le MFT définit une liste des types de médias disponibles pour chaque flux de sortie et les trie par préférence. Cette méthode énumère les types de médias disponibles pour un flux de sortie. Pour énumérer les types disponibles, incrémentez dwTypeIndex jusqu’à ce que la méthode retourne MF_E_NO_MORE_TYPES.

La définition du type de média sur un flux peut modifier les types disponibles pour un autre flux (ou modifier l’ordre de préférence). Toutefois, une MFT n’est pas nécessaire pour mettre à jour dynamiquement la liste des types disponibles. La seule façon garantie de tester si vous pouvez définir un type d’entrée particulier consiste à appeler IMFTransform ::SetOutputType.

Dans certains cas, un MFT ne peut pas retourner une liste de types de sortie tant qu’un ou plusieurs types d’entrée n’ont pas été définis. Si c’est le cas, la méthode retourne MF_E_TRANSFORM_TYPE_NOT_SET.

Une MFT n’est pas nécessaire pour implémenter cette méthode. Toutefois, la plupart des MFT doivent implémenter cette méthode, sauf si les types pris en charge sont simples et peuvent être découverts via la fonction MFTGetInfo .

Cette méthode peut retourner un type de média partiel . Un type de média partiel contient une description incomplète d’un format et est utilisé pour fournir un indicateur à l’appelant. Par exemple, un type partiel peut inclure uniquement les GUID de type principal et de sous-type. Toutefois, une fois que le client a définit les types d’entrée sur le MFT, le MFT doit généralement retourner au moins un type de sortie complet, qui peut être utilisé sans autre modification. Pour plus d’informations, consultez Types de médias complets et partiels.

Certains MFT ne peuvent pas fournir une liste précise des types de sortie tant que le MFT n’a pas reçu le premier exemple d’entrée. Par exemple, le MFT peut avoir besoin de lire le premier en-tête de paquet pour déduire le format. Un MFT doit gérer cette situation comme suit :

  1. Avant de recevoir une entrée, le MFT propose une liste d’un ou plusieurs types de sortie qu’il pourrait éventuellement produire. Par exemple, un décodeur MPEG-2 peut retourner un type de média qui décrit le niveau de profil/main main MPEG-2.
  2. Le client sélectionne l’un de ces types (généralement le premier) et le définit sur le flux de sortie.
  3. Le client fournit le premier exemple d’entrée en appelant IMFTransform ::P rocessInput.
  4. Si le type de sortie n’est pas conforme aux données d’entrée, la transformation signale un changement de format dans la méthode ProcessOutput . Pour plus d’informations sur les modifications de format, consultez IMFTransform ::P rocessOutput.
  5. Appelle à nouveau GetOutputAvailableType . À ce stade, la méthode doit retourner une liste mise à jour des types qui reflète les données d’entrée.
  6. Le client sélectionne un nouveau type de sortie dans cette liste et appelle SetOutputType.
Si MFT_UNIQUE_METHOD_NAMES est défini avant d’inclure mftransform.h, cette méthode est renommée MFTGetOutputAvailableType. Consultez Création d’objets DMO/MFT hybrides.

Notes d’implémentation

Si le MFT stocke un type de média en interne, le MFT doit retourner un clone du type de média, et non un pointeur vers le type d’origine. Sinon, l’appelant peut modifier le type et modifier l’état interne du MFT.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête mftransform.h
Bibliothèque Mfuuid.lib

Voir aussi

IMFTransform

Transformations de Media Foundation