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


Метод IMFSourceReaderEx::AddTransformForStream (mfreadwrite.h)

Добавляет преобразование, например звуковой или видеоэффект, в поток.

Синтаксис

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

Параметры

[in] dwStreamIndex

Поток для настройки. Это может быть любое из следующих значений.

Значение Значение
0–0xFFFFFFFB
Отсчитываемый от нуля индекс потока.
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
Первый видеопоток.
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
Первый аудиопоток.

[in] pTransformOrActivate

Указатель на один из следующих объектов:

  • Преобразование Media Foundation (MFT), предоставляющее интерфейс IMFTransform .
  • Объект активации MFT, предоставляющий интерфейс IMFActivate .

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

Этот метод может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
MF_E_INVALIDMEDIATYPE
Преобразование не поддерживает текущий формат потока, и преобразование невозможно. Дополнительные сведения см. в разделе "Примечания".
MF_E_INVALIDREQUEST
Недопустимый запрос.
MF_E_INVALIDSTREAMNUMBER
Недопустимый параметр dwStreamIndex .

Комментарии

Этот метод пытается добавить преобразование в конец текущей цепочки обработки.

Чтобы использовать этот метод, выполните следующую последовательность вызовов:

  1. Вызовите IMFSourceReader::SetCurrentMediaType , чтобы задать тип выходных данных для потока. На этом шаге можно указать тип носителя, содержащий только guid основного типа и подтипа. Например, чтобы получить 32-разрядные выходные данные RGB, задайте основной тип MFMediaType_Video и подтип MFVideoFormat_RGB32. (Дополнительные сведения см. в разделе Идентификаторы GUID типа носителя.)
  2. Вызовите AddTransformForStream. Если средство чтения исходного кода успешно подключает преобразование, оно задает тип выходных данных для преобразования.
  3. Вызовите IMFSourceReader::GetCurrentMediaType , чтобы получить тип выходных данных из преобразования. Этот метод возвращает тип мультимедиа с полным описанием формата.
  4. При необходимости, если вы хотите изменить тип выходных данных, снова вызовите IMFSourceReader::SetCurrentMediaType , чтобы задать полный тип носителя для преобразования.
Метод AddTransformForStream не вставляет декодер в цепочку обработки. Если собственный формат потока закодирован и для преобразования требуется несжатый формат, вызовите Метод SetCurrentMediaType , чтобы задать несжатый формат (шаг 1 в предыдущем списке). Однако при необходимости метод вставляет видеопроцессор для преобразования между форматами RGB и YUV.

Метод завершается ошибкой, если средство чтения исходного кода было настроено с помощью атрибутов MF_READWRITE_DISABLE_CONVERTERS или MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING .

В асинхронном режиме метод также завершается ошибкой, если ожидается пример запроса. В этом случае дождитесь вызова обратного вызова OnReadSample перед вызовом метода . Дополнительные сведения об использовании средства чтения источника в асинхронном режиме см. в разделе IMFSourceReader::ReadSample.

Преобразование можно добавить в любое время во время потоковой передачи. Однако метод не очищает или не очищает конвейер перед вставой преобразования. Таким образом, если данные уже находятся в конвейере, к следующему образцу не гарантируется применение преобразования.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mfreadwrite.h

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

IMFSourceReaderEx

Средство чтения исходного кода