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


Архитектура DMO

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

В этом разделе описывается общая архитектура DMO.

Streams

DMO — это объект, который принимает входные данные m и создает n выходных данных. Входные и выходные данные вызываются потоков. Каждый DMO имеет по крайней мере один поток. Потоки не являются объектами; Они просто ссылаются на DMO по номеру индекса. Число потоков фиксируется во время разработки.

Типы носителей

Все данные вводимы с помощью типа мультимедиа, который определяет, как интерпретировать содержимое данных. Например, 320 x 240-разрядное RGB-видео является одним типом; 44.1-килогерц (kГц) 16-разрядный стереофонический звук PCM является другим типом. Типы мультимедиа описаны с помощью структуры DMO_MEDIA_TYPE. Прежде чем клиент сможет обработать любые данные, он должен задать тип носителя для каждого потока в DMO.

Как правило, поток может принимать диапазон типов мультимедиа. Некоторые DMOS поддерживают более широкий спектр типов, чем другие. Интерфейсы DMO определяют методы для клиента для обнаружения поддерживаемых типов. Например, один DMO может поддерживать RGB-видео на любой битовой глубине, а другой может поддерживать только 24-разрядный RGB. Кроме того, DMO может быть ограничен определенными сочетаниями входных и выходных данных. Например, если входной тип равен 16-разрядному видео, выходной поток может потребовать той же глубины бита. Клиент может перечислять предпочитаемые типы каждого потока, а затем тестировать определенные сочетания.

буферы

В модели DMO по умолчанию клиент выделяет отдельные входные буферы и выходные буферы. Он заполняет входные буферы данными и передает их в DMO, а DMO записывает новые данные в выходные буферы.

При необходимости DMO может поддерживать обработку на месте. При обработке на месте DMO записывает выходные данные непосредственно в входной буфер по исходным данным. Обработка на месте устраняет необходимость отдельных буферов. С другой стороны, он изменяет исходные данные, которые могут быть недоступны для некоторых приложений.

Модель буферизации по умолчанию (не на месте) поддерживается через интерфейс IMediaObject. Все DMOS должны реализовать этот интерфейс. Если DMO поддерживает обработку на месте, он также предоставляет интерфейс IMediaObjectInPlace. Клиент отвечает за выделение всех буферов, как входных, так и выходных данных.

О dmOS