Перечисление фильтра устройства видеовхода directshow.net нарушено (в более новых средах)?

Каждый пример в папке образцов directshow.net (с пометкой «2010-февраль») компилируется нормально, а те, которые воспроизводят видео из файлов, работают отлично. Однако каждый пример, который пытается перечислить FilterCategory.VideoInputDevices, всегда не может найти ни один из моих фильтров, в частности DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); всегда возвращает, что у меня нет устройств. Эта же проблема возникает у меня во всех других программах, использующих directshow.net, таких как touchless и различные примеры на codeplex.

У меня установлено четыре фильтра видеовхода (1 веб-камера и 3 фильтра захвата экрана), и их можно найти/использовать с помощью графического редактора, который поставляется с Windows SDK и диспетчером фильтров rl. Обе программы перечисляют четыре фильтра в разделе «Источники захвата видео», и каждый моникер начинается с правильного GUID, на который указывает FilterCategory.VideoInputDevices directshow.net («860BB310-5D01-11D0-BD3B-00A0C911CE86»).

Я пытался сам скомпилировать и использовать последнюю версию dll directshow.net, но ничего не изменилось.

Есть ли какая-то причина, по которой оболочка может нормально обрабатывать фильтры рендеринга видео, но не перечислять фильтры захвата видео? Я на win7 sp1, 64bit, использую Visual C# 2010 Express. Что-то в моем окружении вызывает это? Я бы с удовольствием справился с изменением сам, если бы знал, что его вызывает.

Спасибо за уделенное время.


person Toboe    schedule 11.07.2011    source источник


Ответы (1)


Я скопировал код GetDevicesOfCat в свой проект и начал его отлаживать. Если бы я передал ему любую FilterCategory, отличную от VideoInputDevice, он получил бы большинство фильтров, которые перечислены в GraphEdit, но в большинстве категорий он все еще отсутствовал. Я предположил, что есть какое-то свойство фильтров, которое делает их недоступными для моей скомпилированной версии GetDevicesOfCat.

Оказывается, простое переключение моей целевой платформы на x86 помогает, хотя в VS2010 Express это не так просто (для новой установки вам придется следовать второму ответу, прежде чем делать первый): Изменить параметры целевого ЦП в Visual Studio 2010 Express

Теперь программа успешно перечисляет все мои фильтры.

person Toboe    schedule 12.07.2011
comment
Есть ли способ заставить его работать, когда целевой платформой все еще является x64? - person Vinshi; 27.09.2013
comment
@Vinshi При сборке с целевой платформой x64 вы видите только фильтры, зарегистрированные для x64, и устройства, доступные с драйвером x64. Поэтому вам нужны разные сборки/exe, по одному для каждой платформы. Вы можете проверить доступные фильтры/устройства с помощью GraphStudioNext, существует сборка x64. из него доступно. - person CPlusSharp; 09.10.2013