Реализация кодека MFT
В этом разделе приведены некоторые рекомендации по реализации декодера или кодировщика в качестве преобразования Media Foundation (MFT).
Кодировщики
Согласование формата кодировщика
Для инициализации кодировщика используется следующая процедура:
- Запросите MFT для интерфейса ICodecAPI .
- Вызовите ICodecAPI::SetValue , чтобы задать свойства кодирования.
- Вызовите IMFTransform::SetOutputType , чтобы задать формат кодирования.
- Вызовите IMFTransform::GetInputAvailableType , чтобы получить список совместимых типов входных данных. (Этот шаг может быть пропущен.)
- Вызовите 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.
Связанные темы