Partager via


IMFSourceReaderEx ::AddTransformForStream, méthode (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 Meaning
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 :

  • 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 Descriptif
S_OK
Opération réussie.
MF_E_INVALIDMEDIATYPE
La transformation ne prend pas en charge le format de flux actuel et aucune conversion n’a été possible. Voir la section Remarques pour plus d'informations.
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 à partir de la transformation. Cette méthode retourne un type de média avec une description complète du format.
  4. Si vous souhaitez modifier le type de sortie, appelez à nouveau IMFSourceReader ::SetCurrentMediaType pour définir un type multimé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 de la liste précédente). Toutefois, la méthode insère un processeur vidéo pour effectuer une conversion 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 requête 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 vide pas le pipeline avant d’insérer la transformation. Par conséquent, si les données se trouvent déjà dans le pipeline, l’exemple suivant n’est pas garanti que la transformation soit appliquée.

Spécifications

Requirement Valeur
Client minimum requis Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
plateforme cible Fenêtres
Header mfreadwrite.h

Voir aussi

IMFSourceReaderEx

Lecteur source