_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 |