Относительно области применения Sample Grabber в DirectShow - PullRequest
0 голосов
/ 22 июня 2011

У меня есть 2 связанных вопроса для моего приложения для захвата веб-камеры.

  1. Веб-камеры захватывают данные в различных форматах, таких как YUY2, RGB24, I420, MJPG и т. Д. Мне нужно преобразовать захваченные данные в I420 независимо от формата ввода.Следовательно, мне нужно знать текущую область действия / возможности встроенного фильтра преобразования Direct Show, такого как Sample Grabber.Будет ли Sample Grabber поддерживать хотя бы эти многочисленные преобразования?Или мне придется написать свои собственные фильтры?

  2. Многие веб-камеры, кажется, имеют несколько форматов вывода.Когда я подключаю Sample Grabber, тип носителя которого установлен на I420, фильтр Sample Grabber будет связываться с драйвером веб-камеры, чтобы убедиться, что данные, выводимые с веб-камеры, будут I420 (если веб-камера поддерживает).

Я уже разместил вопросы, связанные с вышеизложенным, но не смог получить на них полный ответ.Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Sample Grabber не меняет тип мультимедиа данных, но если вы установите предпочтительный тип мультимедиа перед подключением, то для него потребуется, чтобы входной поток имел этот медиатип. Просто используйте RenderStream (интеллектуальное соединение, а не прямое), и DirectShow вставит необходимые декодеры или преобразователи, если они присутствуют.

0 голосов
/ 22 июня 2011

Взгляните на пример RGBFilters в DirectX SDK.Например, один из включенных фильтров - TransNull24.Этот фильтр пропустит все выборки без изменений, но сможет подключиться только тогда, когда на входе будет MEDIASUBTYPE_RGB24.Что вы делаете, это подключаете фильтр веб-камеры к TransNull24, а TransNull24 с помощью samplegrabber.Если веб-камера может выводить RGB24, это будет использоваться.В противном случае между веб-камерой и TransNull24 будет автоматически добавлен фильтр преобразования.Теперь вы будете получать только RGB24 в своем сэмплграбере, даже если веб-камера не поддерживает это напрямую.

Конечно, вам не нужен RGB24, но вы можете просто изменить пример фильтра и создать свой собственный фильтр TransNullI420.Я не уверен, что стандартный фильтр преобразования цветового пространства может выводить I420, поэтому вам может потребоваться установить ffdshow, настроив его для преобразования несжатого видео.

...