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:
- Consulte o MFT para a interface ICodecAPI .
- Chame ICodecAPI::SetValue para definir propriedades de codificação.
- Chame IMFTransform::SetOutputType para definir o formato de codificação.
- Chame IMFTransform::GetInputAvailableType para obter uma lista de tipos de entrada compatíveis. (Esta etapa pode ser ignorada.)
- 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.
Tópicos relacionados