Método IMFTransform::P rocessInput (mftransform.h)
Entrega datos a un flujo de entrada en esta transformación de Media Foundation (MFT).
Sintaxis
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
Parámetros
[in] dwInputStreamID
Identificador de flujo de entrada. Para obtener la lista de identificadores de flujo, llame a IMFTransform::GetStreamIDs.
[in] pSample
Puntero a la interfaz IMFSample del ejemplo de entrada. El ejemplo debe contener al menos un búfer multimedia que contenga datos de entrada válidos.
[in] dwFlags
Reservado. Debe ser cero.
Valor devuelto
El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Código devuelto | Descripción |
---|---|
|
El método se ha llevado a cabo de forma correcta. |
|
Argumento no válido. |
|
Identificador de flujo no válido. |
|
El ejemplo de entrada requiere una duración de ejemplo válida. Para establecer la duración, llame a IMFSample::SetSampleDuration.
Algunas MFT requieren que las muestras de entrada tengan duraciones válidas. Algunas MFT no requieren duraciones de muestra. |
|
El ejemplo de entrada requiere una marca de tiempo. Para establecer la marca de tiempo, llame a IMFSample::SetSampleTime.
Algunas MFT requieren que las muestras de entrada tengan marcas de tiempo válidas. Algunas MFT no requieren marcas de tiempo. |
|
La transformación no puede procesar más entradas en este momento. |
|
El tipo de medio no se establece en una o varias secuencias. |
|
El tipo de medio no se admite para la aceleración de vídeo directX (DXVA). Un descodificador habilitado para DXVA podría devolver este código de error. |
Comentarios
En la mayoría de los casos, si el método se ejecuta correctamente, el MFT almacena la muestra y contiene un recuento de referencias en el puntero IMFSample . No vuelva a usar el ejemplo hasta que MFT libere el ejemplo. Sin embargo, en lugar de almacenar el ejemplo, un MFT podría copiar los datos de ejemplo en un nuevo búfer. En ese caso, el MFT debe establecer la marca MFT_INPUT_STREAM_DOES_NOT_ADDREF en el método IMFTransform::GetInputStreamInfo .
Si el MFT ya tiene suficientes datos de entrada para generar un ejemplo de salida, no acepta nuevos datos de entrada y ProcessInput devuelve MF_E_NOTACCEPTING. En ese momento, el cliente debe borrar los datos de entrada pendientes mediante una de las siguientes acciones:
- Genere nuevos resultados llamando a IMFTransform::P rocessOutput.
- Vacía los datos de entrada llamando a IMFTransform::P rocessMessage con el mensaje MFT_MESSAGE_COMMAND_FLUSH .
Un MFT puede procesar los datos de entrada en el método ProcessInput . Sin embargo, la mayoría de las MFT esperan hasta que el cliente llama a ProcessOutput.
Una vez que el cliente haya establecido tipos de medios válidos en todas las secuencias, MFT siempre debe estar en uno de estos dos estados: Capaz de aceptar más entradas o de generar más resultados. Nunca debe estar en ambos estados o en ninguno de los estados. Un MFT solo debe aceptar tanta entrada como necesite para generar al menos una muestra de salida, en cuyo punto ProcessInput devuelve MF_E_NOTACCEPTING. Cuando ProcessInput devuelve MF_E_NOTACCEPTING, el cliente puede suponer que el MFT está listo para generar la salida.
Si un MFT encuentra un error irrecuperable en los datos de entrada, simplemente puede quitar los datos e intentar recuperarse cuando obtiene más datos de entrada. Para solicitar más datos de entrada, el MFT devuelve MF_E_TRANSFORM_NEED_MORE_INPUT del método IMFTransform::P rocessOutput . Si MFT quita datos, debe establecer el atributo de atributo MFSampleExtension_Discontinuity en el ejemplo de salida siguiente para notificar al autor de la llamada que hay un hueco en el flujo de datos.
Si MFT_UNIQUE_METHOD_NAMES se define antes de incluir mftransform.h, se cambia el nombre de este método A MFTProcessInput. Consulte Creación de objetos DMO/MFT híbridos.
Procesamiento asincrónico
Los comentarios anteriores describen el modelo de procesamiento sincrónico . Para admitir el procesamiento asincrónico, consulte MFT asincrónicas.Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | mftransform.h |
Library | Mfuuid.lib |