Méthode IMFTransform ::P rocessInput (mftransform.h)

Fournit des données à un flux d’entrée sur cette transformation Media Foundation (MFT).

Syntaxe

HRESULT ProcessInput(
  [in] DWORD     dwInputStreamID,
  [in] IMFSample *pSample,
  [in] DWORD     dwFlags
);

Paramètres

[in] dwInputStreamID

Identificateur de flux d’entrée. Pour obtenir la liste des identificateurs de flux, appelez IMFTransform ::GetStreamIDs.

[in] pSample

Pointeur vers l’interface IMFSample de l’exemple d’entrée. L’exemple doit contenir au moins une mémoire tampon de média contenant des données d’entrée valides.

[in] dwFlags

Réservé. Doit être zéro.

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_INVALIDARG
Argument non valide.
MF_E_INVALIDSTREAMNUMBER
Identificateur de flux non valide.
MF_E_NO_SAMPLE_DURATION
L’exemple d’entrée nécessite une durée d’exemple valide. Pour définir la durée, appelez IMFSample ::SetSampleDuration.

Certains MFT nécessitent que les échantillons d’entrée aient des durées valides. Certains MFT ne nécessitent pas de durées d’échantillonnage.

MF_E_NO_SAMPLE_TIMESTAMP
L’exemple d’entrée nécessite un horodatage. Pour définir l’horodatage, appelez IMFSample ::SetSampleTime.

Certains MFT exigent que les échantillons d’entrée aient des horodatages valides. Certains MFT ne nécessitent pas d’horodatage.

MF_E_NOTACCEPTING
La transformation ne peut pas traiter plus d’entrée pour l’instant.
MF_E_TRANSFORM_TYPE_NOT_SET
Le type de média n’est pas défini sur un ou plusieurs flux.
MF_E_UNSUPPORTED_D3D_TYPE
Le type de média n’est pas pris en charge pour l’accélération vidéo DirectX (DXVA). Un décodeur compatible DXVA peut retourner ce code d’erreur.
 
Note Si vous convertissez un objet multimédia DirectX (DMO) en MFT, n’oubliez pas que S_FALSE n’est pas un code de retour valide pour IMFTransform ::P rocessInput, contrairement à la méthode IMediaObject ::P rocessInput .
 

Remarques

Dans la plupart des cas, si la méthode réussit, le MFT stocke l’exemple et contient un nombre de références sur le pointeur IMFSample . Ne réutilise pas l’exemple tant que MFT n’a pas libéré l’exemple. Toutefois, au lieu de stocker l’exemple, un MFT peut copier l’exemple de données dans une nouvelle mémoire tampon. Dans ce cas, le MFT doit définir l’indicateur MFT_INPUT_STREAM_DOES_NOT_ADDREF dans la méthode IMFTransform ::GetInputStreamInfo .

Si le MFT a déjà suffisamment de données d’entrée pour produire un exemple de sortie, il n’accepte pas les nouvelles données d’entrée et ProcessInput retourne MF_E_NOTACCEPTING. À ce stade, le client doit effacer les données d’entrée en attente en effectuant l’une des opérations suivantes :

L’indicateur MFT_OUTPUT_STREAM_LAZY_READ est une exception à cette règle. Lorsque cet indicateur est présent, la transformation ignore les exemples stockés si vous lui donnez davantage d’entrée. Pour plus d’informations, consultez IMFTransform ::GetOutputStreamInfo. Une transformation ne doit jamais mettre en file d’attente plus de données d’entrée que nécessaire pour produire la sortie correcte.

Un MFT peut traiter les données d’entrée dans la méthode ProcessInput . Toutefois, la plupart des MFT attendent que le client appelle ProcessOutput.

Une fois que le client a défini des types de médias valides sur tous les flux, le MFT doit toujours être dans l’un des deux états suivants : Capable d’accepter plus d’entrée ou capable de produire plus de sortie. Il ne doit jamais être dans les deux états ou aucun état. Un MFT doit uniquement accepter autant d’entrées que nécessaire pour générer au moins un exemple de sortie, auquel cas ProcessInput retourne MF_E_NOTACCEPTING. Lorsque ProcessInput retourne MF_E_NOTACCEPTING, le client peut supposer que le MFT est prêt à produire une sortie.

Si un MFT rencontre une erreur irrécupérable dans les données d’entrée, il peut simplement supprimer les données et tenter de récupérer lorsqu’il obtient le plus de données d’entrée. Pour demander des données d’entrée supplémentaires, le MFT retourne MF_E_TRANSFORM_NEED_MORE_INPUT à partir de la méthode IMFTransform ::P rocessOutput . Si le MFT supprime des données, il doit définir l’attribut d’attribut MFSampleExtension_Discontinuity sur l’exemple de sortie suivant, pour informer l’appelant qu’il existe un écart dans le flux de données.

Si MFT_UNIQUE_METHOD_NAMES est défini avant d’inclure mftransform.h, cette méthode est renommée MFTProcessInput. Consultez Création d’objets DMO/MFT hybrides.

Traitement asynchrone

Les remarques précédentes décrivent le modèle de traitement synchrone . Pour prendre en charge le traitement asynchrone, consultez MfT asynchrones.

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 Media Foundation