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? Ошибка драйвера?