Share via


Implementación de un códec MFT

En este tema se proporcionan algunas instrucciones para implementar un descodificador o codificador como una transformación de Media Foundation (MFT).

Codificadores

Negociación de formato de codificador

El procedimiento siguiente se usa para inicializar un codificador:

  1. Consulte el MFT para la interfaz ICodecAPI .
  2. Llame a ICodecAPI::SetValue para establecer propiedades de codificación.
  3. Llame a IMFTransform::SetOutputType para establecer el formato de codificación.
  4. Llame a IMFTransform::GetInputAvailableType para obtener una lista de tipos de entrada compatibles. (Este paso puede omitirse).
  5. Llame a IMFTransform::SetInputType para establecer el formato de entrada sin comprimir.

Una vez establecido el tipo de salida en el paso 3, el método GetInputAvailableType debe devolver una lista de tipos de entrada compatibles con el tipo de salida actual. En otras palabras, los tipos devueltos por GetInputAvailableType en este momento deben ser válidos para SetInputType.

En el caso de los descodificadores, el orden en el que se establecen los tipos se invierte: el tipo de entrada se establece primero, seguido del tipo de salida. Una vez establecido el tipo de entrada, el método IMFTransform::GetOutputAvailableType debe devolver una lista de tipos que se pueden pasar al método IMFTransform::SetOutputType .

Los codificadores y descodificadores deben admitir NV12 como un formato común sin comprimir. Esto garantiza que los componentes de canalización puedan interoperar con conversiones de espacio de colores mínimas. Por supuesto, también se pueden admitir otros formatos.

Decodificadores

descodificadores de Transcode-Only

Algunos descodificadores están optimizados para la transcodificación (descodificación y, a continuación, volver a codificar una secuencia) y no son adecuados para su uso durante la reproducción.

Si un descodificador MFT está pensado solo para la transcodificación, establezca la marca MFT_ENUM_FLAG_TRANSCODE_ONLY al registrar el MFT. (Consulte MFTRegister).

De forma predeterminada, la función MFTEnumEx no devuelve los descodificadores transcodificadores. Para enumerar descodificadores de transcodificación, llame a MFTEnumEx y establezca la marca MFT_ENUM_FLAG_TRANSCODE_ONLY en el parámetro Flags . Cuando se usa en la función MFTEnumEx , esta marca enumera los descodificadores transcodificadores y otros descodificadores.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY ¿Se enumera MFT?
1 1
1 0 No
0 1
0 0

 

Atributos telecine

El origen multimedia podría adjuntar los siguientes atributos telecines a las muestras multimedia que entrega.

Atributo Descripción
MFSampleExtension_RepeatFirstField Equivalente a la marca "repetir el primer campo" (RFF).
MFSampleExtension_BottomFieldFirst Inversa de la marca "top field first" (TFF).

 

Estas marcas proporcionan una sugerencia al representador de vídeo mejorado (EVR) cuando realiza la desinterlacación. Un descodificador debe propagar estas marcas de bajada copiandolas en las muestras de salida, para que lleguen al EVR.

Escritura de un MFT personalizado