Compartir a través de


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
S_OK
El método se ha llevado a cabo de forma correcta.
E_INVALIDARG
Argumento no válido.
MF_E_INVALIDSTREAMNUMBER
Identificador de flujo no válido.
MF_E_NO_SAMPLE_DURATION
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.

MF_E_NO_SAMPLE_TIMESTAMP
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.

MF_E_NOTACCEPTING
La transformación no puede procesar más entradas en este momento.
MF_E_TRANSFORM_TYPE_NOT_SET
El tipo de medio no se establece en una o varias secuencias.
MF_E_UNSUPPORTED_D3D_TYPE
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.
 
Nota Si va a convertir un objeto multimedia de DirectX (DMO) en un MFT, tenga en cuenta que S_FALSE no es un código de retorno válido para IMFTransform::P rocessInput, a diferencia del método IMediaObject::P rocessInput .
 

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:

Una excepción a esta regla es la marca MFT_OUTPUT_STREAM_LAZY_READ . Cuando esta marca esté presente, la transformación descartará los ejemplos almacenados si proporciona más entrada. Para obtener más información, vea IMFTransform::GetOutputStreamInfo. Una transformación nunca debe poner en cola más datos de entrada de los necesarios para generar la salida correcta.

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

Consulte también

IMFTransform

Transformaciones de Media Foundation