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


Рекомендации по регистрации фильтров

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

Сведения о реестре фильтров определяют, как работает диспетчер фильтров Graph во время Intelligent Connect. Таким образом, это влияет на все приложения, написанные для DirectShow, а не только на те, которые будут использовать ваш фильтр. Вы должны убедиться, что фильтр работает правильно, следуя этим рекомендациям.

  1. Требуются ли данные фильтра в реестре? Для многих пользовательских фильтров нет причин делать фильтр видимым для сопоставителя фильтров или перечислителя системных устройств. Пока вы регистрируете библиотеку DLL, приложение может создать фильтр с помощью CoCreateInstance. В этом случае просто опустите структуру AMOVIESETUP_FILTER в шаблоне фабрики. (Одним из недостатков является то, что фильтр не будет виден в GraphEdit. Чтобы обойти это, можно создать закрытую категорию "Тестирование" с помощью метода IFilterMapper2::CreateCategory . Это следует делать только для отладочных сборок.)

  2. Выберите правильную категорию фильтра. Категория "Фильтры DirectShow" по умолчанию предназначена для фильтров общего назначения. При необходимости зарегистрируйте фильтр в более конкретной категории. Когда IFilterMapper2 ищет фильтр, он игнорирует любую категорию, ценность которой MERIT_DO_NOT_USE или меньше. Категории, не предназначенные для обычного воспроизведения, имеют низкую ценность.

  3. Не указывайте MEDIATYPE_None, MEDIASUBTYPE_None или GUID_NULL в сведениях о AMOVIESETUP_MEDIATYPE для закрепления. IFilterMapper2 обрабатывает их как подстановочные знаки, что может замедлить процесс построения графа.

  4. Выберите наименьшее возможное значение заслуг. Ниже приведены некоторые рекомендации.

    Тип фильтра Рекомендуемые заслуги
    Отрисовщик по умолчанию MERIT_PREFERRED. Однако для стандартных типов мультимедиа пользовательский отрисовщик никогда не должен быть по умолчанию.
    Отрисовщик, отличный отрисовщик по умолчанию MERIT_DO_NOT_USE или MERIT_UNLIKELY
    Mux MERIT_DO_NOT_USE
    Декодер MERIT_NORMAL
    Spitter, parser MERIT_NORMAL или ниже
    Фильтр специального назначения; любой фильтр, созданный непосредственно приложением MERIT_DO_NOT_USE
    Сбор MERIT_DO_NOT_USE
    "Резервный" фильтр; Например, фильтр преобразователя цветового пространства MERIT_UNLIKELY

     

    Если вы даете фильтру преимущество MERIT_DO_NOT_USE, подумайте, нужно ли регистрировать эти сведения в первую очередь. (См. пункт 1.)

  5. Не регистрируйте фильтр в категории "Фильтры DirectShow", который принимает 24-разрядную версию RGB. Фильтр будет мешать фильтру Color Space Converter.

Регистрация фильтров DirectShow