Фильтр захвата видео DirectShow - IPersistPropertyBag :: Load () возвращает E_ENVALIDARG - PullRequest
0 голосов
/ 24 марта 2011

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

Образец 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), и он никогда не вызывается во время загрузки (), поэтому нетдоступно больше деталей.
  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

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

Спасибо.

1 Ответ

0 голосов
/ 25 марта 2011

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

...