Фильтр-оболочка DMO

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

Фильтр-оболочка DMO позволяет приложению DirectShow использовать объект мультимедиа DirectX (DMO) в графе фильтра. Фильтр заключает DMO в оболочку и обрабатывает все сведения об использовании DMO, например передачу данных в объект DMO и из него. Кроме того, фильтр агрегирует DMO, поэтому приложение может запрашивать в фильтре любые COM-интерфейсы, предоставляемые DMO.

Метка Значение
Интерфейсы фильтрации IBaseFilter, IDMOWrapperFilter, IPersistStream
Типы носителей входных контактов См. примечания
Интерфейсы ввода-закрепления IMemInputPin, IPin, IQualityControl
Типы носителей выводных контактов См. примечания
Интерфейсы вывода контактов IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
Фильтр CLSID CLSID_DMOWrapperFilter
CLSID страницы свойств Нет страницы свойств
Исполняемый файл Qasf.dll
Заслуга См. примечания
Категория фильтра См. примечания

 

Комментарии

Ограничения

Оболочка DMO имеет следующие ограничения:

  • Он не поддерживает МДО с нулевыми входными данными, несколькими входными данными или нулевыми выходными данными. (Он поддерживает МДО с одним входом и несколькими выходами.)
  • Он не поддерживает пользовательские транспорты. Весь транспорт данных выполняется через интерфейс IMemInputPin .
  • Он не использует интерфейс IMediaObjectInPlace ; вся обработка выполняется с помощью методов IMediaObject .

Маркеры

Для каждого входного потока на объекте DMO фильтр создает соответствующий входной контакт. Для каждого выходного потока создается соответствующий выходной контакт. Типы мультимедиа, поддерживаемые каждым закреплением, зависят от DMO.

Интерфейсы кодировщика

Если DMO является видеокодировщиком или аудиокодировщиком, выходной контакт предоставляет интерфейс IAMStreamConfig . Если DMO является видеокодировщиком, выходной контакт также предоставляет интерфейс IAMVideoCompression . В обоих случаях, если DMO поддерживает интерфейс , закрепление делегирует объекту DMO. В противном случае закрепление предоставляет собственную реализацию.

Потоковые операторы

Фильтр использует интерфейс IMemInputPin для обработки всей потоковой передачи. Он не поддерживает подключения IAsyncReader . Фильтр вызывает IMediaObject::P rocessOutput в DMO только при получении данных из вышестоящий (включая уведомления об окончании потока). Таким образом, он не поддерживает МДО с нулевыми входными потоками.

Ищут

Все запросы поиска передаются в фильтр вышестоящий через первый входной контакт в оболочке DMO. Для МД с несколькими выходными данными это означает, что фильтр вышестоящий может получать несколько запросов поиска, когда приложение ищет граф.

Заслуга

DirectShow присваивает всем dmos значение по умолчанию, равное MERIT_NORMAL + 0x800. Это значение находится в диапазоне от MERIT_NORMALдо MERIT_PREFERRED. Фильтры декодера обычно имеют значение MERIT_NORMAL. Поэтому диспетчер графов фильтров обычно выбирает декодер DMO вместо фильтра декодера. Чтобы переопределить значение по умолчанию, добавьте запись реестра в раздел реестра DMO в HKEY_CLASSES_ROOT\CLSID. Включите значение DWORD с именем "Merit", значение которого указывает заслугу.

Категория

Фильтр-оболочка DMO сам по себе не отображается ни в одной категории. Когда он заключает DMO, он отображается в категории DirectShow, соответствующей категории DMO, под именем DMO.

Буферы

Фильтр-оболочка DMO передает буферы мультимедиа в объект DMO, который предоставляет интерфейс IMediaBuffer .

В Windows Vista или более поздних версиях буферы мультимедиа также предоставляют интерфейс IServiceProvider. DMO может использовать этот интерфейс для получения указателя на образец мультимедиа, связанный с буфером. Используйте идентификатор службы IID_IMediaSample. Видео DMO может использовать интерфейс IMediaSample2 примера мультимедиа для установки флагов чередование в образце. В следующем коде показано, как получить указатель на пример носителя:

IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;

hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
    hr = pSp->QueryService(
        IID_IMediaSample,  // Service identifier.
        IID_IMediaSample2, // Interface identifier.
        (void**)&pSample2
        );
    if (SUCCEEDED(hr))
    {
        // Set flags (not shown).
        pSample2->Release();
    }
    pSp->Release();
}

Дополнительные сведения о флагах чередование для каждого примера см. в разделе AM_SAMPLE2_PROPERTIES Structure.

Контроль качества

Если DMO предоставляет интерфейс IDMOQualityControl , фильтр преобразует вызовы IQualityControl::Notify в выходном пин-коде в вызовы IDMOQualityControl::SetNow в DMO. Параметр rtNowsetNow вычисляется как сумма элементов TimeStamp и Late структуры Quality .

Использование Fiter в GraphEdit

В GraphEdit фильтр-оболочка DMO не отображается под собственным именем. Вместо этого каждое зарегистрированное DMO отображается в соответствующей категории фильтра. При добавлении объекта DMO с помощью диалогового окна Вставка фильтров GraphEdit создает фильтр-оболочку DMO и настраивает его для использования этого объекта DMO.

Фильтры DirectShow

Объекты мультимедиа DirectX