Поделиться через


Реализация кодека MFT

В этом разделе приведены некоторые рекомендации по реализации декодера или кодировщика в качестве преобразования Media Foundation (MFT).

Кодировщики

Согласование формата кодировщика

Для инициализации кодировщика используется следующая процедура:

  1. Запросите MFT для интерфейса ICodecAPI .
  2. Вызовите ICodecAPI::SetValue , чтобы задать свойства кодирования.
  3. Вызовите IMFTransform::SetOutputType , чтобы задать формат кодирования.
  4. Вызовите IMFTransform::GetInputAvailableType , чтобы получить список совместимых типов входных данных. (Этот шаг может быть пропущен.)
  5. Вызовите IMFTransform::SetInputType , чтобы задать несжатый входной формат.

После задания типа выходных данных на шаге 3 метод GetInputAvailableType должен вернуть список типов входных данных, совместимых с текущим типом вывода. Другими словами, все типы, возвращаемые GetInputAvailableType на этом этапе, должны быть допустимыми для SetInputType.

Для декодеров порядок, в котором задаются типы, является обратным: сначала устанавливается тип входных данных, за которым следует тип вывода. После установки входного типа метод IMFTransform::GetOutputAvailableType должен вернуть список типов, которые можно передать методу IMFTransform::SetOutputType .

Кодировщики и декодеры должны поддерживать NV12 в качестве общего несжатого формата. Это гарантирует, что компоненты конвейера могут взаимодействовать с минимальными преобразованиями цветового пространства. Конечно, можно поддерживать и другие форматы.

Декодеры

Декодеры Transcode-Only

Некоторые декодеры оптимизированы для перекодирования (декодирования и последующего повторного кодирования потока) и не подходят для использования во время воспроизведения.

Если декодер MFT предназначен только для перекодирования, установите флаг MFT_ENUM_FLAG_TRANSCODE_ONLY при регистрации MFT. (См. MFTRegister.)

По умолчанию декодеры перекодировки не возвращаются функцией MFTEnumEx . Чтобы перечислить декодеры перекодировки, вызовите MFTEnumEx и задайте флаг MFT_ENUM_FLAG_TRANSCODE_ONLY в параметре Flags . При использовании в функции MFTEnumEx этот флаг перечисляет декодеры перекодировки и другие декодеры.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY Перечисляется ли MFT?
1 1 Да
1 0 Нет
0 1 Да
0 0 Да

 

Атрибуты Telecine

Источник мультимедиа может прикрепить следующие атрибуты телесины к предоставляемым им примерам мультимедиа.

attribute Описание
MFSampleExtension_RepeatFirstField Эквивалентно флагу "повторить первое поле" (RFF).
MFSampleExtension_BottomFieldFirst Обратная отметка "top field first" (TFF).

 

Эти флаги предоставляют подсказку для расширенного отрисовщика видео (EVR) при выполнении деинтерлейсинга. Декодер должен распространять эти флаги вниз, скопировав их в выходные образцы, чтобы они достигли EVR.

Написание пользовательского MFT