Основы DMO (Microsoft Media Foundation)
В этом разделе представлен краткий обзор ММО в отношении кодеков Windows Media. Дополнительные сведения о МД см. в разделе Объекты мультимедиа DirectX.
DMO — это COM-объект, преобразующий данные. Вы передаете в него данные, и он возвращает преобразованные данные. В случае DMO кодировщика кодека вы вводите несжатые данные мультимедиа, а DMO предоставляет сжатые данные мультимедиа. Основное преимущество использования dmos заключается в том, что все они реализуют один и тот же базовый интерфейс IMediaObject, что упрощает работу с ними, так как вы можете использовать один и тот же объект, независимо от типа выполняемого преобразования.
Поскольку в преобразовании данных участвуют переменные, преобразование звука и видео должно учитывать широкий спектр возможных конфигураций мультимедиа. Аудио- и видеокодеки Windows Media также поддерживают ряд специальных функций, которые необходимо настроить с помощью DMO.
Как правило, сведения о переменных, необходимые для сжатия и распаковки цифровых носителей, необходимые для главного административного управления кодека, передаются одним из трех способов:
- Задайте тип входных данных на объекте DMO, чтобы передать характеристики несжатого носителя, передаваемого в DMO кодировщика, и характеристики сжатого носителя, передаваемого декодеру DMO.
- Задайте тип выходных данных на объекте DMO, чтобы передать характеристики сжатого носителя, доставляемого кодировщиком DMO, и характеристики несжатого носителя, доставляемого декодером DMO.
- С помощью методов интерфейса IPropertyBag настройте другие параметры, которые поддерживают различные функции МДО кодека в качестве свойств. IPropertyBag — это стандартный COM-интерфейс, поддерживаемый всеми МДО кодека.
Кроме того, некоторые функции кодека управляются с помощью других интерфейсов, относящихся к МДО кодека. Эти интерфейсы перечислены для каждого кодека в разделе Объекты кодека.
Типы входных и выходных данных относятся к входным и выходным потокам. Каждый поток представляет собой дискретное представление содержимого. Например, DMO кодировщика Windows Media Video имеет один входной поток и два выходных потока. Входной поток принимает несжатые примеры видео. Первый из двух выходных потоков доставляет сжатые образцы; другой содержит несжатые примеры. Отдельные примеры в одном выходном потоке представляют то же содержимое, что и соответствующие примеры в другом потоке, но каждый поток доставляет эти примеры в другом формате.
Каждый поток (входной или выходной) поддерживает один или несколько типов носителей. Тип или формат мультимедиа описывается структурой DMO_MEDIA_TYPE . Вы можете запросить У DMO типы, поддерживаемые потоком вывода, вызвав метод IMediaObject::GetOutputType. Этот метод возвращает допустимый (хотя в некоторых случаях частично неполный) тип выходных данных для этого потока. Вы можете перечислить поддерживаемые типы мультимедиа для выходного потока, выполняя повторяющиеся вызовы GetOutputType, приумножение параметра типа с каждым вызовом. Если индекс типа, который вы передаете, выходит за пределы границ, метод возвращает DMO_E_NO_MORE_ITEMS. Входные форматы можно перечислить таким же образом с помощью метода IMediaObject::GetInputType .
Типы, перечисляемые DMO, являются только "предпочтительными" типами, однако могут поддерживаться и другие типы. Тип выходных данных можно проверить, вызвав IMediaObject::SetOutputType. Используйте IMediaObject::SetInputType для проверки типа входных данных. Оба метода возвращают DMO_E_TYPE_NOT_ACCEPTED , если переданная структура DMO_MEDIA_TYPE недопустима. Для некоторых МД требуется задать тип выходных данных перед перечислением любых типов входных данных. Все МТО кодека Windows Media Audio и Video имеют входные и выходные данные, которые имеют взаимозависимое подтверждение. То есть заданный тип выходных данных задаст критерии проверки для типа входных данных. Существуют также некоторые свойства, которые при установке изменяют допустимые типы входных и выходных данных. По этой причине перед перечислением типов следует задать все требуемые свойства в DMO.
Задав типы выходных данных и входных данных для объекта DMO, можно начать обработку примеров. Каждый входной пример передается кодеку с помощью вызова метода IMediaObject::P rocessInput, а каждый выходной пример доставляется кодеком при вызове IMediaObject::P rocessOutput.
Связанные темы