Partilhar via


Implementando um Codec MFT

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

Codificadores

Negociação do formato do codificador

O procedimento a seguir é usado para inicializar um codificador:

  1. Consulte o MFT para o ICodecAPI interface.
  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 que são 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 é definido na etapa 3, o GetInputAvailableType método deve retornar uma lista de tipos de entrada que são compatíveis com o tipo de saída atual. Em outras palavras, todos os tipos retornados por GetInputAvailableType neste momento devem ser válidos para SetInputType.

Para decodificadores, a ordem em que 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 IMFTransform::GetOutputAvailableType método deve retornar uma lista de tipos que podem ser passados para o IMFTransform::SetOutputType método.

Os codificadores e descodificadores devem suportar NV12 como um formato comum não comprimido. Isso garante que os componentes do pipeline possam interoperar com conversões mínimas de espaço de cores. Claro, outros formatos também podem ser suportados.

Descodificadores

Descodificadores Transcode-Only

Alguns descodificadores são otimizados para transcodificação (descodificação e, em seguida, recodificação de um fluxo) e não são adequados para utilização durante a reprodução.

Se um descodificador MFT se destinar apenas a transcodificação, defina o sinalizador MFT_ENUM_FLAG_TRANSCODE_ONLY quando registar o MFT. (Ver 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, este sinalizador enumerou decodificadores de transcodificação e outros decodificadores.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY O MFT está 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 do telecine às amostras de média que ela fornece.

Atributo Descrição
MFSampleExtension_RepeatFirstField Equivalente ao sinalizador "repetir primeiro campo" (RFF).
MFSampleExtension_BottomFieldFirst Inverso do sinalizador "top field first" (TFF).

 

Esses sinalizadores fornecem uma dica para o renderizador de vídeo aprimorado (EVR) quando ele executa o desentrelaçamento. Um descodificador deve propagar estas bandeiras a jusante, copiando-as para as amostras de saída, de modo a que atinjam o EVR.

Escrevendo um MFT personalizado