Переподключите вывод фильтра Directshow

Как переподключить контакты фильтра?

Я создал фильтр изменения размера (С++) и добавил страницу свойств с параметрами Pal (720X576) и Ntsc (720X480) (по умолчанию Pal).

В Graph Edit я выбрал видеофайл и добавил к нему фильтр My resizer, когда я воспроизвел график, он работает нормально и показывает видео в Pal. когда я попытался изменить его на Ntsc, он не работает правильно. Чтобы он работал правильно, мне нужно сначала отключить контакты фильтра Resizer, а затем изменить настройки вывода, а затем снова подключить его (я делаю это вручную, и видео воспроизводится в режиме Ntsc).

можно ли повторно подключить фильтр в Transform() или любые другие лучшие предложения. Пожалуйста, предложите/укажите мне направление обряда.


person Shiva Kumar    schedule 28.01.2013    source источник


Ответы (1)


Пока график остановлен, вы можете переподключить выводы так же, как вы строите график: используя IGraphBuilder::Disconnect, IGraphBuilder::Connect. Вы не можете сделать это из метода Transform, потому что остановленный граф еще не вызывает его.

Когда граф работает, вы можете попытаться динамически повторно согласовать соединение типа носителя, что не гарантирует работу. См. Динамические изменения формата:

Когда фильтр переключает типы мультимедиа, это называется динамическим изменением формата. Если вы пишете фильтр DirectShow, вам следует знать о механизмах динамического изменения формата. Даже если ваш фильтр не поддерживает такие изменения, он должен корректно реагировать, если другой фильтр запрашивает новый формат.

person Roman R.    schedule 28.01.2013
comment
Вы имеете в виду, что мне нужно использовать IGraphBuilder Connect, отключить его в исходном коде моего фильтра? - person Shiva Kumar; 28.01.2013
comment
См. выше: вы не можете сделать это из метода Transform, потому что... - person Roman R.; 28.01.2013