Метод IMFTransform::GetOutputAvailableType (mftransform.h)

Возвращает доступный тип мультимедиа для выходного потока в этом преобразовании Media Foundation (MFT).

Синтаксис

HRESULT GetOutputAvailableType(
  [in]  DWORD        dwOutputStreamID,
  [in]  DWORD        dwTypeIndex,
  [out] IMFMediaType **ppType
);

Параметры

[in] dwOutputStreamID

Идентификатор выходного потока. Чтобы получить список идентификаторов потоков, вызовите IMFTransform::GetStreamIDs.

[in] dwTypeIndex

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

[out] ppType

Получает указатель на интерфейс IMFMediaType . Вызывающий объект должен освободить интерфейс .

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
E_NOTIMPL
MFT не имеет списка доступных типов выходных данных.
MF_E_INVALIDSTREAMNUMBER
Недопустимый идентификатор потока.
MF_E_NO_MORE_TYPES
Параметр dwTypeIndex выходит за пределы диапазона.
MF_E_TRANSFORM_TYPE_NOT_SET
Перед настройкой типов выходных данных необходимо задать типы входных данных.

Комментарии

MFT определяет список доступных типов носителей для каждого выходного потока и упорядочивает их по предпочтениям. Этот метод перечисляет доступные типы мультимедиа для выходного потока. Чтобы перечислить доступные типы, следует увеличивать dwTypeIndex , пока метод не вернет MF_E_NO_MORE_TYPES.

Установка типа мультимедиа в одном потоке может изменить доступные типы для другого потока (или изменить порядок предпочтений). Однако MFT не требуется для динамического обновления списка доступных типов. Единственным гарантированным способом проверить, можно ли задать определенный тип входных данных, является вызов IMFTransform::SetOutputType.

В некоторых случаях MFT не может вернуть список типов выходных данных, пока не будет задан один или несколько типов входных данных. Если это так, метод возвращает MF_E_TRANSFORM_TYPE_NOT_SET.

MFT не требуется для реализации этого метода. Однако большинство MFT должны реализовывать этот метод, если только поддерживаемые типы не являются простыми и их можно обнаружить с помощью функции MFTGetInfo .

Этот метод может возвращать частичный тип носителя. Частичный тип мультимедиа содержит неполное описание формата и используется для предоставления указания вызывающей объекту. Например, частичный тип может включать только идентификаторы GUID основного и подтипа. Однако после того, как клиент задает типы входных данных в MFT, MFT обычно должен возвращать по крайней мере один полный тип выходных данных, который можно использовать без дальнейших изменений. Дополнительные сведения см. в разделе Полные и частичные типы мультимедиа.

Некоторые MFT не могут предоставить точный список типов выходных данных, пока MFT не получит первый входной образец. Например, для получения формата MFT может потребоваться прочитать первый заголовок пакета. MFT должен обрабатывать эту ситуацию следующим образом:

  1. Прежде чем MFT получит какие-либо входные данные, он предлагает список одного или нескольких типов выходных данных, которые он может создать. Например, декодер MPEG-2 может возвращать тип носителя, описывающий уровень профиля или main MPEG-2 main.
  2. Клиент выбирает один из этих типов (как правило, первый) и задает его в выходном потоке.
  3. Клиент доставляет первую входную выборку, вызывая IMFTransform::P rocessInput.
  4. Если тип выходных данных не соответствует входным данным, преобразование сигнализирует об изменении формата в методе ProcessOutput . Дополнительные сведения об изменениях формата см. в разделе IMFTransform::P rocessOutput.
  5. Вызов GetOutputAvailableType снова. На этом этапе метод должен возвращать обновленный список типов, отражающий входные данные.
  6. Клиент выбирает новый тип выходных данных из этого списка и вызывает SetOutputType.
Если MFT_UNIQUE_METHOD_NAMES определен перед включением mftransform.h, этот метод переименован в MFTGetOutputAvailableType. См. раздел Создание гибридных объектов DMO/MFT.

Примечания о реализации

Если MFT хранит тип носителя внутри, MFT должен возвращать клон типа носителя, а не указатель на исходный тип. В противном случае вызывающий объект может изменить тип и внутреннее состояние MFT.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mftransform.h
Библиотека Mfuuid.lib

См. также раздел

IMFTransform

Преобразования Media Foundation