Compartilhar via


_MFT_INPUT_STREAM_INFO_FLAGS enumeração (mftransform.h)

Descreve um fluxo de entrada em uma transformação do Media Foundation (MFT).

Syntax

typedef enum _MFT_INPUT_STREAM_INFO_FLAGS {
  MFT_INPUT_STREAM_WHOLE_SAMPLES = 0x1,
  MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 0x2,
  MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE = 0x4,
  MFT_INPUT_STREAM_HOLDS_BUFFERS = 0x8,
  MFT_INPUT_STREAM_DOES_NOT_ADDREF = 0x100,
  MFT_INPUT_STREAM_REMOVABLE = 0x200,
  MFT_INPUT_STREAM_OPTIONAL = 0x400,
  MFT_INPUT_STREAM_PROCESSES_IN_PLACE = 0x800
} ;

Constantes

 
MFT_INPUT_STREAM_WHOLE_SAMPLES
Valor: 0x1
Cada exemplo de mídia (interface IMFSample ) dos dados de entrada deve conter unidades de dados completas e ininterrupta. A definição de uma unidade de dados depende do tipo de mídia: para vídeo descompactado, um quadro de vídeo; para dados compactados, um pacote compactado; para áudio descompactado, um único quadro de áudio.

Para formatos de áudio não compactados, esse sinalizador sempre está implícito. (É válido definir o sinalizador, mas não é necessário.) Um quadro de áudio não compactado nunca deve abranger mais de um exemplo de mídia.
MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER
Valor: 0x2
Cada exemplo de mídia que o cliente fornece como entrada deve conter exatamente uma unidade de dados, conforme definido para o sinalizador MFT_INPUT_STREAM_WHOLE_SAMPLES.

Se esse sinalizador estiver presente, o sinalizador MFT_INPUT_STREAM_WHOLE_SAMPLES também deverá estar presente.

Um MFT que processa áudio não compactado não deve definir esse sinalizador. O MFT deve aceitar buffers que contenham mais de um único quadro de áudio, para eficiência.
MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE
Valor: 0x4
Todos os exemplos de entrada devem ter o mesmo tamanho.
O tamanho é fornecido no membro cbSize da estrutura MFT_INPUT_STREAM_INFO . O MFT deve fornecer esse valor. Durante o processamento, o MFT deve verificar o tamanho dos exemplos de entrada e pode descartar amostras com tamanho incorreto.
MFT_INPUT_STREAM_HOLDS_BUFFERS
Valor: 0x8
O MFT pode conter um ou mais exemplos de entrada depois que IMFTransform::P rocessOutput for chamado. Se esse sinalizador estiver presente, o membro hnsMaxLatency da estrutura MFT_INPUT_STREAM_INFO fornecerá a latência máxima e o membro cbMaxLookahead fornecerá o número máximo de bytes de lookahead.
MFT_INPUT_STREAM_DOES_NOT_ADDREF
Valor: 0x100
O MFT não contém amostras de entrada após o retorno do método IMFTransform::P rocessInput . Ele libera o exemplo antes que o método ProcessInput retorne.

Se esse sinalizador estiver ausente, o MFT poderá conter uma contagem de referência nos exemplos que são passados para o método ProcessInput . O cliente não deve reutilize ou exclua a memória do buffer até que o MFT libere o ponteiro IMFSample da amostra .

Se esse sinalizador estiver ausente, não garantirá que o MFT mantenha uma contagem de referência nos exemplos de entrada. É válido para um MFT liberar amostras de entrada no ProcessInput mesmo que o MFT não defina esse sinalizador. No entanto, definir esse sinalizador pode permitir que o cliente otimize como ele reutiliza buffers.

Um MFT não deverá definir esse sinalizador se ele se mantiver em um exemplo de entrada depois de retornar de ProcessInput.
MFT_INPUT_STREAM_REMOVABLE
Valor: 0x200
Esse fluxo de entrada pode ser removido chamando IMFTransform::D eleteInputStream.
MFT_INPUT_STREAM_OPTIONAL
Valor: 0x400
Esse fluxo de entrada é opcional. A transformação pode produzir saída sem receber entrada desse fluxo. O chamador pode desmarcar o fluxo não definindo um tipo de mídia ou definindo um tipo de mídia NULL . É possível que cada fluxo de entrada em uma transformação seja opcional, mas pelo menos uma entrada deve ser selecionada para produzir a saída.
MFT_INPUT_STREAM_PROCESSES_IN_PLACE
Valor: 0x800
O MFT pode executar o processamento in-loco. Nesse modo, o MFT modifica diretamente o buffer de entrada. Quando o cliente chama ProcessOutput, o mesmo exemplo que foi entregue a esse fluxo é retornado no fluxo de saída que tem um identificador de fluxo correspondente. Esse sinalizador implica que o MFT se mantém no buffer de entrada, portanto, esse sinalizador não pode ser combinado com o sinalizador MFT_INPUT_STREAM_DOES_NOT_ADDREF.

Se esse sinalizador estiver presente, o MFT deverá definir o sinalizador MFT_OUTPUT_STREAM_PROVIDES_SAMPLES ou MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES para o fluxo de saída que corresponde a esse fluxo de entrada. (Consulte IMFTransform::GetOutputStreamInfo).

Comentários

Antes que o cliente defina os tipos de mídia na transformação, os únicos sinalizadores garantidos para serem precisos são os sinalizadores MFT_INPUT_STREAM_REMOVABLE e MFT_INPUT_STREAM_OPTIONAL. Para todos os outros sinalizadores, o cliente deve primeiro definir o tipo de mídia em cada fluxo não opcional.

No modelo de processamento padrão, um MFT contém uma contagem de referência no exemplo que recebe em ProcessInput. Ele não processa o exemplo imediatamente dentro de ProcessInput. Quando ProcessOutput é chamado, o MFT produz dados de saída e descarta o exemplo de entrada. As seguintes variações neste modelo são definidas:

  • Se um MFT nunca se apegar a exemplos de entrada entre ProcessInput e ProcessOutput, ele poderá definir o MFT_INPUT_STREAM_DOES_NOT_ADDREF.
  • Se um MFT tiver alguns exemplos de entrada além da próxima chamada para ProcessOutput, ele poderá definir o MFT_INPUT_STREAM_HOLDS_BUFFERS.

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

MFT_INPUT_STREAM_INFO

Enumerações do Media Foundation

Transformações do Media Foundation