Как изменить свойства фильтра Directshow Переполнение стека

Как изменить свойства фильтра программно?

Я использую фильтр AAC encoderи я могу вручную изменить его bitrate в graphedit щелкнув правой кнопкой мыши на фильтре и введя bitrate значение.

Можно ли сделать то же самое через код?

Пожалуйста, дайте мне ценные предложения и, если возможно, с кодом.

2

Решение

Вы делаете это через частный специфичный для фильтра интерфейс. Вы должны обратиться к документации фильтра или SDK, чтобы получить подробности об этом (Техническая поддержка VSS). Иногда вы можете получить необходимую информацию из библиотеки типов.

Увидеть:

2

Другие решения

Ваш AAC Encoder будет иметь доступ к некоторому интерфейсу через некоторые IID. Убедитесь, что вы получили интерфейс IID, а затем получите доступ к его дополнительным функциям, таким как битрейт, частота дискретизации и т. Д.

1

Как и в ответе Романа, кажется, что «особые свойства» фильтра обычно устанавливаются и / или сохраняются двумя способами.

Один из них заключается в том, чтобы отобразить страницу свойств «диалоговое окно» (ISpecifyPropertyPages), затем разрешить пользователю что-то менять и закрыть, а затем получить интерфейс IPersistStream и сохранить его «текущее состояние», которое затем можно использовать позже для основных настроек. его свойства возвращаются к тому, к чему они были сохранены (вот как это делает graphedit, ref: http://microsoft.public.multimedia.directx.dshow.programming.narkive.com/ldOko8Js/ispecifypropertypages-saving-and-restoring-settings) Кроме того, вы можете сериализовать «весь граф» в файл, вызвав IPersistStream для самого объекта графа. Увидеть https://stackoverflow.com/a/11781370/32453

Другой способ — узнать, «что это за специальный тип фильтра», и привести его к какому-либо известному вам специальному интерфейсу от третьей стороны, который может выставлять методы получения и установки и т. Д., Например, фильтр «avisynth» из Windows SDK DirectShow примеры выставляет ISynth интерфейс

Смотрите также Вот который перечисляет еще несколько способов, по-видимому …Вот также кажется связанным. Сам IPersist также имеет несколько интерфейсов, которые наследуются от него, см. Комментарии Вот. Судя по моему опыту для устройств dshow, они обычно реализуют только IPersist и IPersistStream (и IAMSpecificPropertyPages), хотя вы можете сохранить значения самостоятельно и для других общих интерфейсов (например, IAMVideoProcAmp), а затем вручную сбросить свойства …

Обновление: к сожалению, хотя многие фильтры реализуют IPersistStream, кажется, что немногие из них действительно используют его для чего-то полезного …

0
По вопросам рекламы [email protected]