Compartilhar via


Implementando um Codec MFT

Este tópico fornece algumas diretrizes para implementar um decodificador ou codificador como um MFT (Media Foundation Transform).

Codificadores

Negociação de formato de codificador

O procedimento a seguir é usado para inicializar um codificador:

  1. Consulte o MFT para a interface ICodecAPI .
  2. Chame ICodecAPI::SetValue para definir propriedades de codificação.
  3. Chame IMFTransform::SetOutputType para definir o formato de codificação.
  4. Chame IMFTransform::GetInputAvailableType para obter uma lista de tipos de entrada compatíveis. (Esta etapa pode ser ignorada.)
  5. Chame IMFTransform::SetInputType para definir o formato de entrada não compactado.

Depois que o tipo de saída for definido na etapa 3, o método GetInputAvailableType deverá retornar uma lista de tipos de entrada compatíveis com o tipo de saída atual. Em outras palavras, todos os tipos retornados por GetInputAvailableType neste ponto devem ser válidos para SetInputType.

Para decodificadores, a ordem na qual os tipos são definidos é invertida: o tipo de entrada é definido primeiro, seguido pelo tipo de saída. Depois que o tipo de entrada é definido, o método IMFTransform::GetOutputAvailableType deve retornar uma lista de tipos que podem ser passados para o método IMFTransform::SetOutputType .

Codificadores e decodificadores devem dar suporte a NV12 como um formato comum não compactado. Isso garante que os componentes de pipeline possam interoperar com conversões mínimas de colorspace. É claro que outros formatos também podem ter suporte.

Decodificadores

Decodificadores de Transcode-Only

Alguns decodificadores são otimizados para transcodificação (decodificação e recodificação de um fluxo) e não são adequados para uso durante a reprodução.

Se um MFT decodificador for destinado apenas à transcodificação, defina o sinalizador MFT_ENUM_FLAG_TRANSCODE_ONLY ao registrar o MFT. (Consulte MFTRegister.)

Por padrão, os decodificadores de transcodificação não são retornados pela função MFTEnumEx . Para enumerar decodificadores de transcodificação, chame MFTEnumEx e defina o sinalizador MFT_ENUM_FLAG_TRANSCODE_ONLY no parâmetro Flags . Quando usado na função MFTEnumEx , esse sinalizador enumerava decodificadores transcodificados e outros decodificadores.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY O MFT é enumerado?
1 1 Sim
1 0 Não
0 1 Sim
0 0 Sim

 

Atributos do Telecine

A fonte de mídia pode anexar os seguintes atributos telecine aos exemplos de mídia que ele fornece.

Atributo Descrição
MFSampleExtension_RepeatFirstField Equivalente a "repetir o primeiro campo" (RFF).
MFSampleExtension_BottomFieldFirst Inverso do sinalizador "primeiro campo superior" (TFF).

 

Esses sinalizadores fornecem uma dica para o EVR (renderizador de vídeo) aprimorado quando ele executa a desinterlacização. Um decodificador deve propagar esses sinalizadores downstream copiando-os para os exemplos de saída, para que eles cheguem ao EVR.

Escrevendo um MFT personalizado