2017-01-16 2 views
6

Есть ли надежный способ определить, поворачивается ли камера на поверхности Microsoft?Обнаружение вращения камеры на поверхности Microsoft?

В принципе, я хочу знать, если в устройство встроена определенная камера (так как она будет вращаться вместе с устройством), есть ли способ запросить это?

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

Я читаю камеры, используя API Media Foundation.

+0

Я не совсем уверен, поможет ли это, но вы можете проверить атрибут MF_MT_DEFAULT_STRIDE типа мультимедиа камеры: https://msdn.microsoft.com/en-us/library/windows/desktop/ms698965(v = vs.85) .aspx. «Стрид позитивен для изображений сверху вниз и отрицательный для изображений снизу вверх». – VuVirt

+0

Я не думаю, что это, например, устройство может вращаться на 90 градусов. :( – monoceres

+1

Это скорее ['MF_MT_VIDEO_ROTATION'] (https://msdn.microsoft.com/en-us/library/windows/desktop/hh162880), но я не уверен, действительно ли камера Surface использует его. –

ответ

2

В принципе, я хочу знать, если в устройство встроена определенная камера [...], есть ли способ запросить это?

С UWP, вы можете проверить DeviceInformation камеры «s enclosureLocation. panel свойство, которое является либо:

  • front/back/и т.д. для интегрированной камеры или
  • unknown для внешней камеры

Полный пример доступен в CameraStarterKit образце.


Однако, если вы не можете использовать UWP, он должен еще можно найти основную информацию. С MF вы должны иметь доступ к MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK.

Это будет что-то вроде

\\?\usb#vid_046d&pid_0843&mi_00#6&2314864d&0&0000#{e5323777-f976-4f5b-9b55-b94699c46e44}\global 

Встроенная камера supposed to register его физическое расположение в

HKLM\SYSTEM\CurrentControlSet\Control\InternalDeviceModification\{GUID} 

Если значение ключа PLD_Panel должно быть типа DWORD со значениями очень похожими на Panel перечисление, упомянутое выше.

Здесь 6 означает unknown. Таким образом, вы должны иметь возможность проверить наличие этого раздела реестра и, если это проверить, проверить его значение. Я подозреваю, что это похоже на то, что делает UWP под капотом.

В противном случае вы также можете взломать поддержку с помощью жесткого кодирования некоторых значений для поставщика камеры и идентификаторов продукта или MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME.

+0

Это выглядит именно то, что мне нужно. Отлично!Однако при просмотре regedit на моем устройстве Surface Pro 3 (запуск окон 10) отсутствует ключ InternalDeviceModification. Есть идеи? – monoceres

Смежные вопросы