Фильтр захвата видео DirectShow - IPersistPropertyBag :: Load () возвращает E_ENVALIDARG

Это сводит меня с ума.

Образец CameraCapture для Windows Mobile 6 отлично работает на всех протестированных устройствах WM 6. Я добавил такое же построение графа в большую сложную программу. На некоторых устройствах фильтр CLSID_VideoCapture не может принять имя камеры через вызов интерфейса IPersistPropertyBag :: Load () и возвращает E_INVALIDARG (0x80070057).

Моя программа отлично работает на одном устройстве WM 6.5, поэтому я думаю, что имя камеры правильно передается фильтру. Похоже, существует какой-то внешний конфликт, который не позволяет связать камеру с фильтром на некоторых устройствах. Сбои возникают как на устройствах WM 6.1, так и на WM 6.5.

Я проверял и проходил через это много раз, но не могу найти никакой виновной разницы между тривиальным образцом CameraCapture (который всегда работает) и моей сложной программой (которая работает только на одном устройстве). Вот еще некоторые подробности:

  1. Вся работа выполняется в основном потоке (CameraCapture использует вспомогательный поток, но ведет себя так же, если построение графа выполняется в основном потоке).
  2. E_INVALIDARG не указан как возможное возвращаемое значение из IPersistPropertyBag :: Load (). Думаю, ошибка связана с каким-то внутренним аспектом инициализации камеры.
  3. Если я передаю неправильное имя камеры, например «CAM», я получаю 0x80070002, «устройство / файл не найден». Без имени в сумке я получаю 0x8007000d «Данные недействительны».
  4. Я реализовал CErrorLog для загрузки (& PropBag, & ErrorLog), и он никогда не вызывается во время Load (), поэтому более подробная информация недоступна.
  5. Параметры компиляции и связывания примерно одинаковы для этих двух программ.
  6. Обе программы используют CoInitializeEx (NULL, COINIT_MULTITHREADED), и сложная программа отлично работает на одном устройстве.
  7. Выбор камеры как в CameraCapture, так и в моей программе почти идентичен описанию здесь: http://msdn.microsoft.com/en-us/library/aa918757.aspx
  8. Я нашел еще одно упоминание об этой проблеме: http://www.eggheadcafe.com/software/aspnet/30318752/problem-with-propertybag.aspx

Приветствуются любые мысли о том, что на самом деле означает ошибка или какие конфликты могут ее вызвать.

Спасибо.


person Ben    schedule 24.03.2011    source источник


Ответы (1)


Как и подозревал, обнаружил внешний конфликт. На всех моих устройствах есть сканеры штрих-кода. На некоторых возникает конфликт между сканерами и камерой. Конечно, образец CameraCapture не содержит никаких элементов управления сканером, поэтому он всегда работает. Устройства, вероятно, совместно используют какое-то интерфейсное оборудование, чтобы сэкономить доллар и тем самым нанести ущерб удобству использования. Теперь мне просто нужно разработать эксклюзивный обмен.

person Ben    schedule 25.03.2011