Как заставить камеру Apple FaceTime ISP сообщать о текущей экспозиции - PullRequest
1 голос
/ 04 августа 2020

CoreMediaIO framework имеет два внутренних подключаемых модуля: VD C (для USB-камер) и AppleCamera - для ноу-хау Apple ISP с датчиками камеры p cie. Камера VD C сообщает текущее значение экспозиции, как и ожидалось, тогда как AppleCamera всегда возвращает 0,0 для текущей экспозиции. датчик. Фактически, независимо от того, какое минимальное / максимальное / текущее значение экспозиции запрашивается, все они всегда выходят как один вектор с плавающей точкой. Различные смещения обозначают определенные c значения:

->  0x10049b2c0 <+2293>: movss  0x60(%rdi), %xmm0         ; xmm0 = mem[0],zero,zero,zero 

(lldb) p *(float*)&$xmm0
(float) $30 = -3

->  0x10049b2cc <+2305>: movss  0x64(%rdi), %xmm0         ; xmm0 = mem[0],zero,zero,zero 

(lldb) p *(float*)&$xmm0
(float) $33 = 3

(lldb) image lookup -a $pc
      Address: AppleCamera[0x000000000000310c] (AppleCamera.__TEXT.__text + 7036)
      Summary: AppleCamera`GetSuspendedByUser + 1857
->  0x10049b110 <+1861>: movss  0x58(%rdi), %xmm0         ; xmm0 = mem[0],zero,zero,zero 

(lldb) p *(float*)&$xmm0
(float) $37 = 0

Здесь -3 и 3 - минимальные / максимальные допустимые значения для воздействия, но текущее значение всегда равно нулю . Вот как они в целом выглядят как векторные:

  (float) [20] = 0
  (float) [21] = 0
  (float) [22] = 0
  (float) [23] = 0
  (float) [24] = -3
  (float) [25] = 3
  (float) [26] = 0
  (float) [27] = 0.0500000007
  (float) [28] = 0
  (float) [29] = 0
  (float) [30] = 0
  (float) [31] = 0

Здесь 0.05 - это что-то еще, которое не меняется - возможно, фокусное расстояние.

Очевидно, что каждый датчик камеры может сообщить текущая экспозиция, которая важна для многих методов обработки изображений. Плагин VD C делает это. Так в чем проблема AppleCamera? Ошибка драйвера?

...