Всем здравствуйте,
Столкнулся с задачей. В приложении (нативное, C++) нужно делать кадры встроенной камерой с предпросмотром. Сразу же нашлось SHCameraCapture, которое возвращало E_ACCESSDENIED:
SHCAMERACAPTURE shcc ;
ZeroSizeOf(shcc) ;
shcc.cbSize = sizeof(shcc);
shcc.hwndOwner = m_hWnd ;
shcc.pszInitialDir = L"\\My Documents";
shcc.pszDefaultFileName = L"test1.jpg";
shcc.pszTitle = L"Demo";
shcc.StillQuality = CAMERACAPTURE_STILLQUALITY_DEFAULT ;
shcc.nResolutionWidth = 240;
shcc.nResolutionHeight = 320;
shcc.Mode = CAMERACAPTURE_MODE_STILL ;
HRESULT hResult = ::SHCameraCapture(&shcc) ;
Потом нашлось CameraCapture, работающее через DirectShow, которое на этапе инициализации видеофильтра:
CHK( pPropertyBag->Load( &PropBag, &errLog ));
возвращало VFW_E_INVALID_FILE_VERSION и ничего в errLog не писало.
После этого нашелся флажок в реестре [Mobile Device\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Pictures\Camera\OEM] DisableCamera, который был установлен в 1. После сброса его в 0 SHCameraCapture стало возвращать VFW_E_INVALID_FILE_VERSION вместо E_ACCESSDENIED.
Приложение проверяется на КПК Acer F900 c WM 6.1, на нем же планируется и эксплуатация. Ради интереса проверил на других девайсах:
ASUS P550 — SHCameraCapture работает как надо
Glofiish X800 — SHCameraCapture работает после установки флажка в 0 и показывает неподвижный мусор типа помех в телевизоре, CameraCapture тоже фотографирует мусор (а родное камерное приложение работает нормально!).
Посему вопрос: есть ли у кого опыт работы с камерой и способы решения таких проблем? Я пока придумал только установить более новую прошивку на устройство, завтра буду пробовать. Раз уж там непонятно у какого файла инвалидная версия.
Заранее спасибо всем.