Задача: захватывать кадры с камеры средствами DirectShow, передавать их в OpenCV.
Текущее решение: понаследовать свой класс от CBaseVideoRenderer, подключить его к pin-у устройства, поддерживающему необходимый видеорежим. Принять необходимый видеорежим в паре методов CheckMediaType/SetMediaType.
Проблема: в списке поддерживаемых pin-ом видеорежимов (список получаю при помощи pin->EnumMediaTypes) отсутствует необходимый (допустим, 640х480х24). Вообще, там присутствуют только варианты 320x240. При этом в различных вьюверах (типа AMCap) показаны и другие видеорежимы, и там с ними можно работать. В CheckMediaType тоже подаются только те видеорежимы, которые есть в списке поддерживаемых pin-ом форматов.
Вопрос: в чем может быть причина? Возможно, нужно пользоваться каким-то другим способом проверки/выбора режимов камеры? Как вообще это все по уму сделать?
Вопрос номер 2: а нет ли каких-нибудь удобных бесплатных SDK для захвата видеосигнала с камеры/из файла средствами DirectShow (для С++)?
Заранее спасибо за ответы.
Re: DirectShow: размеры кадра с устройства захвата
H>Проблема: в списке поддерживаемых pin-ом видеорежимов (список получаю при помощи pin->EnumMediaTypes) отсутствует необходимый (допустим, 640х480х24).
IAMStreamConfig::GetStreamCaps выдаёт такие же типы?
Здравствуйте, CTpaHHoe, Вы писали:
CTH>Здравствуйте, hr0nix, Вы писали:
H>>Проблема: в списке поддерживаемых pin-ом видеорежимов (список получаю при помощи pin->EnumMediaTypes) отсутствует необходимый (допустим, 640х480х24).
CTH>IAMStreamConfig::GetStreamCaps выдаёт такие же типы?
Да, только что проверил, в точности такие.
Re[3]: DirectShow: размеры кадра с устройства захвата
Здравствуйте, hr0nix, Вы писали:
H>Здравствуйте, CTpaHHoe, Вы писали:
CTH>>Здравствуйте, hr0nix, Вы писали:
H>>>Проблема: в списке поддерживаемых pin-ом видеорежимов (список получаю при помощи pin->EnumMediaTypes) отсутствует необходимый (допустим, 640х480х24).
CTH>>IAMStreamConfig::GetStreamCaps выдаёт такие же типы?
H>Да, только что проверил, в точности такие.
Еще посмотрел библиотеку avcap (работает через DirectShow). Она выдает точно такие же режимы, как и моя программа. Такое ощущение, что в окне настроек пина (которое как-то там создается автоматически) режим выбрать можно, а если запрашивать его вручную, то нет.
Re[3]: DirectShow: размеры кадра с устройства захвата
Здравствуйте, hr0nix, Вы писали: H>Да, только что проверил, в точности такие.
Это,может быть, driver устройства так написан.
Если в graphedt.exe удается выставить другие разрешения, советую выбросить этот driver.
И посмотреть, как работает AMCap, не пробывал ?
Re[4]: DirectShow: размеры кадра с устройства захвата
Здравствуйте, muma, Вы писали:
M>Здравствуйте, hr0nix, Вы писали: H>>Да, только что проверил, в точности такие. M>Это,может быть, driver устройства так написан. M>Если в graphedt.exe удается выставить другие разрешения, советую выбросить этот driver. M>И посмотреть, как работает AMCap, не пробывал ?
AMCap как раз это автоматическое окно свойств вызывает, которое, видимо, драйвером рисуется (в AMCap весь интерфейс на английском, а в окошке все на русском). Таким образом, видимо это может быть косяк драйвера, позволяющего устанавливать режим через окошко настроек, но не программно средствами DirectShow (неудача с avcap это подтверждает).
У меня аналоговая камера подключена к грабберу (AVer Capture), который довольно паршивый и с драйверами которого уже было множество проблем. Буду пробовать с другим граббером другой компании.
Re: DirectShow: размеры кадра с устройства захвата
Здравствуйте, hr0nix, Вы писали:
H>Вопрос номер 2: а нет ли каких-нибудь удобных бесплатных SDK для захвата видеосигнала с камеры/из файла средствами DirectShow (для С++)?
а твой софт будет бесплатный или нет? Если бесплатный могу дать ключик к одному очень функциональному платному SDK.