estrutura MFT_OUTPUT_DATA_BUFFER (mftransform.h)

Contém informações sobre um buffer de saída para uma transformação do Media Foundation. Essa estrutura é usada no método IMFTransform::P rocessOutput .

Sintaxe

typedef struct _MFT_OUTPUT_DATA_BUFFER {
  DWORD         dwStreamID;
  IMFSample     *pSample;
  DWORD         dwStatus;
  IMFCollection *pEvents;
} MFT_OUTPUT_DATA_BUFFER, *PMFT_OUTPUT_DATA_BUFFER;

Membros

dwStreamID

Identificador de fluxo de saída. Antes de chamar ProcessOutput, defina esse membro como um identificador de fluxo válido.

Exceção: se o método IMFTransform::GetStreamIDs retornar E_NOTIMPL, o MFT ignorará esse membro e usará os índices da matriz pOutputSamples no método ProcessOutput como os identificadores de fluxo. Em outras palavras, ele usa o primeiro elemento na matriz para o fluxo 0, o segundo para o fluxo 1 e assim por diante. É recomendável (mas não obrigatório) que o chamador defina dwStreamID igual ao índice de matriz nesse caso.

pSample

Ponteiro para a interface IMFSample . Antes de chamar ProcessOutput, defina esse membro como um ponteiro IMFSample válido ou NULL. Confira Comentários para obter mais informações.

dwStatus

Antes de chamar ProcessOutput, defina esse membro como zero. Quando o método retorna, o MFT pode definir o membro como igual a um valor da enumeração _MFT_OUTPUT_DATA_BUFFER_FLAGS . Caso contrário, o MFT deixará esse membro igual a zero.

pEvents

Antes de chamar ProcessOutput, defina esse membro como NULL. Na saída, o MFT pode definir esse membro como um ponteiro de interface IMFCollection válido. O ponteiro representa um collecton que contém zero ou mais eventos. Para obter cada evento, chame IMFCollection::GetElement e consulte o ponteiro IUnknown retornado para a interface IMFMediaEvent . Quando o método ProcessOutput retorna, o chamador é responsável por liberar o ponteiro IMFCollection se o ponteiro não for NULL.

Comentários

Você deve fornecer uma estrutura MFT_OUTPUT_DATA_BUFFER para cada fluxo de saída selecionado.

Os MFTs podem dar suporte a dois modelos de alocação diferentes para exemplos de saída:

  • O MFT aloca o exemplo de saída.
  • O cliente aloca o exemplo de saída.
Para descobrir qual modelo o MFT dá suporte para um determinado fluxo de saída, chame IMFTransform::GetOutputStreamInfo e marcar o valor de dwFlags.
Sinalizador Modelo de alocação
MFT_OUTPUT_STREAM_PROVIDES_SAMPLES O MFT aloca os exemplos de saída para o fluxo. Defina pSample como NULL para esse fluxo.
MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES O MFT dá suporte a ambos os modelos de alocação.
Nenhum dos dois (padrão) O cliente deve alocar os exemplos de saída para o fluxo.
 

O comportamento de ProcessOutput depende do valor inicial de pSample e do valor do parâmetro dwFlags no método ProcessOutput .

  • Se pSample for NULL e dwFlags contiver o sinalizador MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, o MFT descartará os dados de saída.

    Restrição: esse fluxo de saída deve ter o sinalizador MFT_OUTPUT_STREAM_DISCARDABLE ou MFT_OUTPUT_STREAM_LAZY_READ. (Para obter os sinalizadores para o fluxo de saída, chame o método IMFTransform::GetOutputStreamInfo .)

  • Se pSample for NULL e dwFlags não contiver o MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, o MFT fornecerá um exemplo para os dados de saída. O MFT define pSample para apontar para o exemplo que ele fornece. O MFT pode alocar um novo exemplo ou reutilizar um exemplo de entrada.

    Restrição: esse fluxo de saída deve ter o sinalizador MFT_OUTPUT_STREAM_PROVIDES_SAMPLES ou MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES.

  • Se pSample não for NULL, o MFT usará o exemplo fornecido pelo chamador.

    Restrição: esse fluxo de saída não deve ter o sinalizador MFT_OUTPUT_STREAM_PROVIDES_SAMPLES.

Qualquer outra combinação é inválida e faz com que ProcessOutput retorne E_INVALIDARG.

Cada chamada para ProcessOutput pode produzir zero ou mais eventos e até um exemplo por fluxo de saída.

Requisitos

   
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]
Cabeçalho mftransform.h

Confira também

IMFTransform::P rocessOutput

Estruturas do Media Foundation

Transformações do Media Foundation