#directshow #directshow.net
#directshow #directshow.net
Вопрос:
У меня просто простой график:
SourceFilter ---> CustomTransformFilter --> VideoRendererFilter
В моем CustomTranformFilter я изменяю свойства видео динамически: т. е. я масштабирую видео в новые размеры.
Input Video[1024,720]-->|CustomTransformFilter|--->Output Video[640,480]
Но мой рендерер все еще видит видео в исходном размере ([1024 720] без изменения масштаба [640 480])
И я получаю поврежденные изображения в программе визуализации видео: поскольку программа визуализации пытается нарисовать новое изображение на основе старых размеров…
Как я могу это исправить?
Наилучшие пожелания
Обновить:
Как я понимаю из ответа Дэвиса :
Given: The graph is active, but the filters in question do not support dynamic
pin reconnections
И
Possible mechanisms for changing the format: (MSDN DirectShow Doc)
a. QueryAccept (Downstream)
b. QueryAccept (Upstream)
c. ReceiveConnection
Дэвис предлагает ReceiveConnection.
ReceiveConnection: используется, когда вывод вывода предлагает изменение формата своему нижестоящему узлу, и новый формат требует большего буфера. ( Документ MSDN DirectShow).
Пример gmfbridge «слишком сложный» для меня, чтобы понять, как использовать «ReceiveConnection».Я новичок в DirectShow.
У кого-нибудь есть простой пример кода, который использует механизм ReceiveConnection для реагирования на динамическое изменение формата?
Ответ №1:
Обычный способ динамического изменения типа в DirectShow — это прикрепить тип носителя к образцу, который вы доставляете. Это не будет работать с программой визуализации видео, поскольку она выделяет сэмплы. Вам необходимо запросить изменение типа, прежде чем вы получите образец из распределителя.
Вы делаете это с помощью ReceiveConnection. Вы должны убедиться, что в этом распределителе нет неисполненных буферов, а затем вы можете вызвать IPin::ReceiveConnection (без предварительного отключения). Пример этого есть в коде gmfbridge по адресу www.gdcl.co.uk/gmfbridge в BridgeSourceOutput::switchTo().
G
Комментарии:
1. Спасибо Дэвису. Но пример gmfbridge для меня «слишком сложный»… Я новичок в DirectShow. Я добавляю обновление к своему вопросу… Чтобы найти свой путь…