Compartilhar via


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
S_OK
O método foi bem-sucedido.
E_INVALIDARG
Argumento inválido.
MF_E_INVALIDSTREAMNUMBER
Identificador de fluxo inválido.
MF_E_NO_SAMPLE_DURATION
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.

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

MF_E_NOTACCEPTING
A transformação não pode processar mais entrada no momento.
MF_E_TRANSFORM_TYPE_NOT_SET
O tipo de mídia não está definido em um ou mais fluxos.
MF_E_UNSUPPORTED_D3D_TYPE
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.
 
Nota Se você estiver convertendo um Objeto de Mídia DirectX (DMO) em um MFT, lembre-se de que S_FALSE não é um código de retorno válido para IMFTransform::P rocessInput, ao contrário do método IMediaObject::P rocessInput .
 

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:

Uma exceção a essa regra é o sinalizador MFT_OUTPUT_STREAM_LAZY_READ . Quando esse sinalizador estiver presente, a transformação descartará exemplos armazenados se você fornecer mais entrada a ele. Para obter mais informações, consulte IMFTransform::GetOutputStreamInfo. Uma transformação nunca deve enfileirar mais dados de entrada do que é necessário para produzir a saída correta.

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

Confira também

IMFTransform

Transformações do Media Foundation