Método IMFTransform::P rocessInput (mftransform.h)
Fornece dados para um fluxo de entrada nesta transformação do Media Foundation (MFT).
Sintaxe
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
Parâmetros
[in] dwInputStreamID
Identificador de fluxo de entrada. Para obter a lista de identificadores de fluxo, chame IMFTransform::GetStreamIDs.
[in] pSample
Ponteiro para a interface IMFSample do exemplo de entrada. O exemplo deve conter pelo menos um buffer de mídia que contenha dados de entrada válidos.
[in] dwFlags
Reservado. Deve ser zero.
Retornar valor
O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi bem-sucedido. |
|
Argumento inválido. |
|
Identificador de fluxo inválido. |
|
O exemplo de entrada requer uma duração de exemplo válida. Para definir a duração, chame IMFSample::SetSampleDuration.
Alguns MFTs exigem que os exemplos de entrada tenham durações válidas. Alguns MFTs não exigem durações de exemplo. |
|
O exemplo de entrada requer um carimbo de data/hora. Para definir o carimbo de data/hora, chame IMFSample::SetSampleTime.
Alguns MFTs exigem que os exemplos de entrada tenham carimbos de data/hora válidos. Alguns MFTs não exigem carimbos de data/hora. |
|
A transformação não pode processar mais entrada no momento. |
|
O tipo de mídia não está definido em um ou mais fluxos. |
|
Não há suporte para o tipo de mídia para DXVA (Aceleração de Vídeo DirectX). Um decodificador habilitado para DXVA pode retornar esse código de erro. |
Comentários
Na maioria dos casos, se o método for bem-sucedido, o MFT armazenará o exemplo e conterá uma contagem de referência no ponteiro IMFSample . Não use novamente o exemplo até que o MFT libere o exemplo. No entanto, em vez de armazenar o exemplo, um MFT pode copiar os dados de exemplo em um novo buffer. Nesse caso, o MFT deve definir o sinalizador MFT_INPUT_STREAM_DOES_NOT_ADDREF no método IMFTransform::GetInputStreamInfo .
Se o MFT já tiver dados de entrada suficientes para produzir um exemplo de saída, ele não aceitará novos dados de entrada e ProcessInput retornará MF_E_NOTACCEPTING. Nesse ponto, o cliente deve limpar os dados de entrada pendentes fazendo um dos seguintes procedimentos:
- Gere uma nova saída chamando IMFTransform::P rocessOutput.
- Libere os dados de entrada chamando IMFTransform::P rocessMessage com a mensagem MESSAGE_COMMAND_FLUSH MFT_.
Um MFT pode processar os dados de entrada no método ProcessInput . No entanto, a maioria dos MFTs aguarda até que o cliente chame ProcessOutput.
Depois que o cliente definir tipos de mídia válidos em todos os fluxos, o MFT sempre deverá estar em um dos dois estados: capaz de aceitar mais entradas ou capaz de produzir mais saída. Nunca deve estar em ambos os estados ou em nenhum dos estados. Um MFT só deve aceitar a quantidade de entrada necessária para gerar pelo menos uma amostra de saída, momento em que ProcessInput retorna MF_E_NOTACCEPTING. Quando ProcessInput retorna MF_E_NOTACCEPTING, o cliente pode assumir que o MFT está pronto para produzir saída.
Se um MFT encontrar um erro não fatal nos dados de entrada, ele poderá simplesmente remover os dados e tentar recuperar quando obter mais dados de entrada. Para solicitar mais dados de entrada, o MFT retorna MF_E_TRANSFORM_NEED_MORE_INPUT do método IMFTransform::P rocessOutput . Se o MFT descartar qualquer dado, ele deverá definir o atributo MFSampleExtension_Discontinuity atributo no próximo exemplo de saída, para notificar o chamador de que há uma lacuna no fluxo de dados.
Se MFT_UNIQUE_METHOD_NAMES for definido antes de incluir mftransform.h, esse método será renomeado como MFTProcessInput. Consulte Criando objetos DMO/MFT híbridos.
Processamento assíncrono
As observações anteriores descrevem o modelo de processamento síncrono . Para dar suporte ao processamento assíncrono, consulte MFTs assíncronos.Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | mftransform.h |
Biblioteca | Mfuuid.lib |