2015-07-15 4 views
1

В настоящее время я разрабатываю приложение, использующее DirectShow. Приложение должно поддерживать множество различных веб-камер, которые, вероятно, имеют множество различных конфигураций вывода ColorSpace на выходе (RGB, YUV, I420 и т. Д.).DirectShow Connect() vs ConnectDirect()

При кодировании я всегда буду использовать один и тот же фильтр кодировки и мультия + файл, но я не знаю, как подключить вывод вывода на исходном фильтре к входному выводу на фильтре кодирования, потому что это будет зависеть на выходе исходного фильтра ColorSpace.

Примеры:

  1. Source1 (rgb24) -> Color Space Converter -> RGB2YUV -> энкодер -> Mux -> File Writer.
  2. Source2 (YUV) -> Encoder -> Mux -> File Writer.
  3. Источник3 (MJPG) -> Декомпрессор MJPEG -> Преобразователь цветового пространства -> RGB2YUV -> Encoder -> Mux -> File Writer.

И так далее .. означает, что до кодировщика может быть множество различных конфигураций фильтров. Мой вопрос сейчас, прекрасно ли использовать интеллектуальный Connect() вместо ConnectDirect() для подключения фильтра источника к фильтру энкодера? Или мне нужно будет каждый раз проверять тип носителя выходного вывода источника и вручную строить график в зависимости от цветового пространства (RGB, YUV ..) выходного вывода источника?

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

Спасибо за вашу помощь.

ответ

1

Использование Connect и интеллектуальное соединение в порядке. В основном это означает, что вы запрашиваете контакты для подключения «как-то» и «наилучшим образом».

Однако, поскольку во многих ситуациях может быть множество вариантов, разных сред, аппаратных средств и конфигураций, вы хотите связать предсказуемый способ (например, когда речь идет о кодировании, а не декодировании).

Хорошая стратегия заключается в ConnectConnectDirect) в отдельные фильтры, которые знают, и вы уверены, что вы хотите именно их, и оставляя Intelligent Connect для подключения вас в порядке с системой поставляются цепочками фильтров, особы. когда дело доходит до декодирования и где Windows должна выбрать доступный декодер для вас.

Также, когда речь идет об Интеллектуальном соединении, редко возникает разница: Connect или ConnectDirect. В любом случае фильтры соединяются с использованием типа носителя, и иногда они могут повторно согласовать тип медиа в дороге. Более важно то, подключаетесь ли вы к известному фильтру, или вы позволяете Intelligent Connect поставлять вам фильтр, необходимый для подключения. Неправильно выбран фильтр или вообще фильтр с плохой регистрацией, что приводит к сбоям в процессе вместо соединения конвейера, чаще всего является настоящей головной болью.

+0

Итак, если я правильно понял, 'Source -> Connect (Encoder); Encoder -> DirectConnect (Mux); Mux -> DirectConnect (FileWriter); ' Это было бы что-то, что вы сделали бы? – Nicholas

+0

Я бы добавил фильтры вручную повсюду на ваших графиках, возможно, ожидаю, где вы будете делать Преобразователи цветового пространства, и контакты «Подключиться». Преобразователи цветового пространства не очевидны, и я предпочел бы, чтобы они были исключены вообще (они стоят другого вопроса, потому что в ваших сценариях не ясно, для чего они предназначены). –

+0

Спасибо за ваш ответ Роман. Теперь я вижу, что конвертер цветового пространства не нужен (я полагал, что они должны были конвертировать из RGB в YUV). Я удалил их и использовал 'ConnectDirect()' всюду в моем графике кодировщика. Спасибо за помощь. – Nicholas

Смежные вопросы