Partager via


Méthode IMFSourceReaderEx ::AddTransformForStream (mfreadwrite.h)

Ajoute une transformation, telle qu’un effet audio ou vidéo, à un flux.

Syntaxe

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

Paramètres

[in] dwStreamIndex

Flux à configurer. La valeur peut être l’une des valeurs suivantes.

Valeur Signification
0 à 0xFFFFFFFB
Index de base zéro d’un flux.
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
Premier flux vidéo.
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
Premier flux audio.

[in] pTransformOrActivate

Pointeur vers l’un des éléments suivants :

  • Une transformation Media Foundation (MFT) qui expose l’interface IMFTransform .
  • Objet d’activation MFT qui expose l’interface IMFActivate .

Valeur retournée

Cette méthode peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
Réussite.
MF_E_INVALIDMEDIATYPE
La transformation ne prend pas en charge le format de flux actuel et aucune conversion n’a été possible. Pour plus d'informations, consultez la section Notes.
MF_E_INVALIDREQUEST
Demande non valide.
MF_E_INVALIDSTREAMNUMBER
Le paramètre dwStreamIndex n’est pas valide.

Remarques

Cette méthode tente d’ajouter la transformation à la fin de la chaîne de traitement actuelle.

Pour utiliser cette méthode, effectuez la séquence d’appels suivante :

  1. Appelez IMFSourceReader ::SetCurrentMediaType pour définir le type de sortie souhaité pour le flux. Dans cette étape, vous pouvez spécifier un type de média qui contient uniquement les GUID de type principal et de sous-type. Par exemple, pour obtenir une sortie RVB 32 bits, définissez un type principal de MFMediaType_Video et un sous-type de MFVideoFormat_RGB32. (Pour plus d’informations, consultez GUID de type de média.)
  2. Appelez AddTransformForStream. Si le Lecteur source connecte correctement la transformation, il définit le type de sortie sur la transformation.
  3. Appelez IMFSourceReader ::GetCurrentMediaType pour obtenir le type de sortie de la transformation. Cette méthode retourne un type de média avec une description de format complète.
  4. Si vous souhaitez modifier le type de sortie, appelez de nouveau IMFSourceReader ::SetCurrentMediaType pour définir un type de média complet sur la transformation.
La méthode AddTransformForStream n’insère pas de décodeur dans la chaîne de traitement. Si le format de flux natif est encodé et que la transformation nécessite un format non compressé, appelez SetCurrentMediaType pour définir le format non compressé (étape 1 dans la liste précédente). Toutefois, la méthode insère un processeur vidéo à convertir entre les formats RVB et YUV, si nécessaire.

La méthode échoue si le lecteur source a été configuré avec les attributs MF_READWRITE_DISABLE_CONVERTERS ou MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING .

En mode asynchrone, la méthode échoue également si un exemple de demande est en attente. Dans ce cas, attendez que le rappel OnReadSample soit appelé avant d’appeler la méthode . Pour plus d’informations sur l’utilisation du Lecteur source en mode asynchrone, consultez IMFSourceReader ::ReadSample.

Vous pouvez ajouter une transformation à tout moment pendant la diffusion en continu. Toutefois, la méthode ne vide pas ou ne draine pas le pipeline avant d’insérer la transformation. Par conséquent, si des données se trouvent déjà dans le pipeline, il n’est pas garanti que la transformation soit appliquée à l’exemple suivant.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête mfreadwrite.h

Voir aussi

IMFSourceReaderEx

Lecteur source