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 |
|
Argument non valide. |
|
Identificateur de flux non valide. |
|
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. |
|
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. |
|
La transformation ne peut pas traiter plus d’entrée pour l’instant. |
|
Le type de média n’est pas défini sur un ou plusieurs flux. |
|
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. |
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 :
- Générez une nouvelle sortie en appelant IMFTransform ::P rocessOutput.
- Videz les données d’entrée en appelant IMFTransform ::P rocessMessage avec le message MFT_MESSAGE_COMMAND_FLUSH.
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 |