Драйвер V4L2 vinc ISP VPIN/VINC 1892ВМ14Я. Руководство программиста

Введение

Драйвер vinc предназначен для получения видео с видео-сенсоров и блока ISP VPIN/VINC 1892ВМ14Я. Драйвер предоставляет стандартный интерфейс V4L2 Video Capture (см Video for Linux 2). Драйвер vinc использует подсистему soc_camera в качестве интерфейса для работы с сенсором. На рисунке 14 представлена диаграмма использования драйвера vinc.

../_images/vinc-driver.png

14 Диаграмма использования драйвера vinc

Возможности:

  • Максимальное входное разрешение: 4096x4096
  • Максимальное выходное разрешение: 4096x4096 (ширина кратна 8 пикселям)
  • Поддерживаются сенсоры со следующими форматами выходного видео: Bayer (разрядность не более 14 бит), RGB888, YCbCr 4:4:4, YCbCr 4:2:2, Mono (реализованы Bayer, RGB888 и YCbCr 4:2:2).
  • Форматы выходного видео перечислены в описании ioctl VIDIOC_ENUM_FMT

Поведение драйвера

Инициализация vinc

При инициализации устройства драйвер выполняет:

  1. Печатает версию драйвера.

  2. Устанавливает поле CMOS_CTR.CMOS_RESET блока VINC в 0.

  3. Читает из DeviceTree значение свойства “elvees,pixel-clock-divider”, определяющего во сколько раз частота синхросигнала пикселей сенсора должна быть меньше частоты синхросигнала блока VINC.

  4. Читает из DeviceTree свойство “elvees,pixel-clock-over-fsync”. При наличии данного свойства в качестве синхросигнала для сенсора будет использоваться вывод FSYNCO_0, в отсутствие данного свойства — вывод PCLKO_0.

  5. Читает из DeviceTree граф, описывающий связи портов VINC с удаленными устройствами (сенсорами). Каждый порт графа связан с одним удаленным устройством, интерфейс подключения этого устройства определяется свойством “elvees,ifacenum”. Это свойство может принимать одно из четырех значений: PInterface0 (0), PInterface1 (1), SInterface0(2), SInterface1(3).

    Для удаленных устройств, подключенных к параллельному порту (PInterface0 или PInterface1), может быть определено свойство “elvees,pport-low-bits”. Наличие данного свойства указывает, что сенсор, подключенный к параллельному порту, имеет разрядность компонентов пикселя меньше 12 и они подключены к младшим разрядам шины данных блока VINC. Эта информация будет учитываться при обработке данных, в частности при выполнении преобразования YCbCr->RGB.

  6. Вычисляет и записывает значения полей регистров:

    • В отсутствие свойства “elvees,pixel-clock-over-fsync” свойство “elvees,pixel-clock-divider” может принимать значение, равное 1, или четное в диапазоне 2-30. Если значение равно 1, то частота синхросигнала пикселей сенсора равна частоте синхросигнала блока VINC. Нечетное значение драйвер округляет до ближайшего четного в меньшую сторону. Если значение более 30, драйвер установит его равным 30. Если свойство “elvees,pixel-clock-divider” присутствует и не равно 1, то драйвер записывает в поле CMOS0_CTR.CLK_DIV значение в 2 раза меньшее, чем “elvees,pixel-clock-divider”, и включает CMOS0_CTR.PCLKO_ENABLE=1.
    • Если свойство “elvees,pixel-clock-over-fsync” присутствует, свойство “elvees,pixel-clock-divider” может принимать значение, равное 2, или кратное 4 в диапазоне 4-60. При использовании FSYNCO_0 нельзя получить частоту, равную частоте синхросигнала блока VINC, поэтому если значение “elvees,pixel-clock-divider” равно 1, драйвер установит его равным 2. Если значение равно 2, то частота синхросигнала пикселей сенсора в 2 раза ниже частоты синхросигнала блока VINC. Если значение не равно 2, оно должно быть кратным четырем, иначе драйвер выполняет округление до ближайшего младшего числа, кратного четырем. Если значение более 60, драйвер установит его равным 60. Драйвер выполняет:
      1. Включение бита CMOS0_CTR.FSYNC_ENAB_EDGE.
      2. Запись значения 1 в регистры CMOS0_TIMER_HIGH и CMOS0_TIMER_LOW, что обеспечивает деление частоты PCLKO на 2 (минимально возможный коэффициент деления).
      3. Запись в поле CMOS0_CTR.CLK_DIV значения свойства “elvees,pixel-clock-divider”, деленного на четыре.
  7. Включает бит AXI_MASTER_CFG.GLOBAL_ENABLE.

Деинициализация vinc

Драйвер выключает биты CMOS_CTR.PCLKO_ENABLE, CMOS_CTR.FSYNC_ENAB_EDGE и AXI_MASTER_CFG.GLOBAL_ENABLE.

Функция open()

Драйвер не имеет специальных функций, которые вызываются при открытии файла устройства. При вызове функции open(), подсистема V4L2 вызывает функцию установки формата у драйвера (аналогично VIDIOC_S_FMT). Подсистема V4L2 устанавливает последнее использованное разрешение.

Управление блоком Color Correction (CC)

Расчет матрицы коэффициентов и вектора смещения

Блок Color Correction выполняет преобразование пикселей входного изображения по формуле:

(1)O = M_{CC} \times I+V_{CC},

где M_{CC} = \begin{pmatrix} M_0&M_1&M_2\\ M_3&M_4&M_5\\ M_6&M_7&M_8 \end{pmatrix} — матрица коэффициентов цветности,

V_{CC} = \begin{pmatrix} V_0\\V_1\\V_2\end{pmatrix} — вектор смещений,

I — трёхкомпонентный вектор входного пикселя, O — трёхкомпонентный вектор выходного пикселя.

Блок Color Correction может принимать на вход изображения в форматах RGB и YCbCr. При входном формате RGB, вычисление пикселей выполняется по формуле:

(2)O_{RGB} = M_{FX\_RGB} &\times (M_{RGB} \times (M_{FX\_YCbCr} \times (M_{CK} \times M_{sat}
  \times M_{con} \times M_{hue} \times \\
  &\times (M_{YCbCr} \times M_{WB} \times I_{RGB}+V_{YCbCr}-V_{half})+ \\
  &+V_{bri}+V_{half})+ V_{FX\_YCbCr})+V_{RGB}) + V_{FX\_RGB}\\

При входном формате YCbCr, вычисление пикселей выполняется по формуле:

(3)O_{YCbCr} = M_{YCbCr} &\times (M_{FX\_RGB} \times (M_{RGB} \times (M_{FX\_YCbCr} \times \\
  &\times (M_{CK} \times M_{sat} \times M_{con} \times M_{hue} \times (I_{YCbCr}-V_{half})+ \\
  &+V_{bri}+V_{half})+ V_{FX\_YCbCr})+V_{RGB})+ V_{FX\_RGB}) + V_{YCbCr}, \\

где используются следующие обозначения:

  • V_{bri} — вектор смещений, определяемый контролом V4L2_CID_BRIGHTNESS
  • M_{con} — матрица коэффициентов, определяемая контролом V4L2_CID_CONTRAST
  • M_{sat} — матрица коэффициентов, определяемая контролом V4L2_CID_SATURATION
  • M_{hue} — матрица коэффициентов, определяемая контролом V4L2_CID_HUE
  • M_{CK} — матрица коэффициентов, определяемая контролом V4L2_CID_COLOR_KILLER
  • M_{FX\_RGB}, M_{FX\_YCbCr} — матрицы коэффициентов, определяемые контролом V4L2_CID_COLORFX
  • M_{WB} — матрица коэффициентов, определяемая контролами V4L2_CID_DO_WHITE_BALANCE, V4L2_CID_RED_BALANCE, V4L2_CID_BLUE_BALANCE, V4L2_CID_WHITE_BALANCE_TEMPERATURE, V4L2_CID_AUTO_WHITE_BALANCE
  • M_{RGB} — матрица перевода формата YCbCr в RGB
  • M_{YCbCr} — матрица перевода формата RGB в YCbCr
  • V_{RGB} — вектор смещений для перевода формата YCbCr в RGB
  • V_{YCbCr} — вектор смещений для перевода формата RGB в YCbCr
  • V_{half} — вектор смещений (2048; 0; 0)
  • V_{FX\_RGB}, V_{FX\_YCbCr} — векторы смещений, определяемые контролом V4L2_CID_COLORFX

Матрицы и вектора перевода цветовых пространств приведены в описании блока Color Transformation. Для входного формата YCbCr баланс белого не выполняется.

Приводя формулу (2) к виду (1), для входного формата RGB получаем:

M_{CC} = M_{FX\_RGB} \times M_{RGB} \times M_{FX\_YCbCr} \times M_{CK} \times M_{sat}
\times M_{con}\times M_{hue}\times M_{YCbCr} \times M_{WB}

V_{CC} = M_{FX\_RGB} &\times (M_{RGB} \times (M_{FX\_YCbCr} \times (M_{CK} \times M_{sat} \times
M_{con} \times M_{hue} \times \\
&\times (V_{YCbCr}-V_{half}) + V_{bri}+V_{half}) + V_{FX\_YCbCr}) + \\
&+V_{RGB}) + V_{FX\_RGB} \\

Приводя формулу (3) к виду (1), для входного формата YCbCr получаем:

M_{CC} = M_{YCbCr} \times M_{FX\_RGB} \times M_{RGB} \times M_{FX\_YCbCr} \times M_{CK}
\times M_{sat} \times M_{con} \times M_{hue}

V_{CC} = M_{YCbCr} &\times M_{FX\_RGB} \times M_{RGB} \times M_{FX\_YCbCr} \times \\
&\times (V_{bri} + (E - M_{CK}\times M_{sat}\times M_{con} \times M_{hue}) \times V_{half}) + \\
&+ V_{FX\_YCbCr}) + V_{RGB}) + V_{FX\_RGB}) + V_{YCbCr},\\

где E — единичная матрица.

Во избежании ошибок при переполнении в блоке Color Correction вводятся ограничения на значения контролов. Если при расчете коэффициентов матрицы и вектора смещений не выполняется одно из условий:

\sum_{i=0}^2 M_i + \frac{V_0}{4096} < 16;\quad
\sum_{i=3}^5 M_i + \frac{V_1}{4096} < 16;\quad
\sum_{i=6}^8 M_i + \frac{V_2}{4096} < 16;

-4096 \leqslant V_0 \leqslant 4095;\quad
-4096 \leqslant V_1 \leqslant 4095;\quad
-4096 \leqslant V_2 \leqslant 4095,

то драйвер возвращает ошибку ERANGE и значения регистров m_i, v_i и Scaling не изменяются (обозначения регистров приведены согласно спецификации VINC). В остальных случаях значения регистров блока рассчитываются по формулам:

& if\ \lfloor max(|M_{CC}|) \rfloor = 0,\ then\ Scaling = 0, \\
& else\ Scaling = \lfloor log_2(\lfloor max(|M_{CC}|) \rfloor) \rfloor + 1,

где max(|M_{CC}|) — максимальный модуль коэффициентов матрицы M_{CC}.

m_i = \lfloor M_i \times (1 << (15-Scaling)) + 0.5) \rfloor,

где i — целое число и принимает значения от 0 до 8.

v_i = \lfloor V_i + 0.5 \rfloor,

где i — целое число и принимает значения от 0 до 2.

Состояния кластера cc

Управление блоком Color Correction осуществляется с помощью контролов кластера сс. Кластер cc включает следующие контролы: стандартные контролы V4L2_CID_BRIGHTNESS, V4L2_CID_CONTRAST, V4L2_CID_SATURATION, V4L2_CID_HUE, V4L2_CID_COLOR_KILLER, V4L2_CID_COLORFX, V4L2_CID_DO_WHITE_BALANCE, V4L2_CID_RED_BALANCE, V4L2_CID_BLUE_BALANCE, V4L2_CID_WHITE_BALANCE_TEMPERATURE, стандартные автоконтролы V4L2_CID_AUTO_WHITE_BALANCE и V4L2_CID_AUTOBRIGHTNESS (на диаграмме AUTO), и нестандартные контролы V4L2_CID_CC и V4L2_CID_CC_ENABLE.

Диаграмма состояний кластера cc представлена на рисунке 15. Состояние кластера определяется флагами контролов и значением контрола V4L2_CID_CC_ENABLE (на диаграмме CC_ENABLE, наличие флагов указано в квадратных скобках). STD auto обозначает группу стандартных контролов, управляемых автоконтролом, включенном в данном состоянии кластера, CC_STD non auto — остальные стандартные контролы кластера CC. Все стандартные контролы кроме WRITE_ONLY контролов должны иметь флаг EXECUTE_ON_WRITE, чтобы обеспечить возможность после установки нестандартного контрола V4L2_CID_CC установить стандартный контрол с прежним значением. При установке V4L2_CID_CC_ENABLE в единицу блок Color Correction включен, при установке V4L2_CID_CC_ENABLE в ноль блок Color Correction выключен. Запись новых данных в регистры блока Color Correction осуществляется при изменении значения любого из стандартных контролов или контрола V4L2_CID_CC независимо от состояния контрола V4L2_CID_CC_ENABLE. Для обозначения переходов между состояниями на диаграмме используются следующие обозначения:

  • “set CC_STD” — изменение значения стандартных контролов
  • “set СС” — установка контрола V4L2_CID_CC
  • “enable” — установка значения контрола V4L2_CID_СС_ENABLE в единицу
  • “disable” — установка значения контрола V4L2_CID_СС_ENABLE в ноль
  • “set auto” — изменение значения одного из автоконтролов (V4L2_CID_AUTO_WHITE_BALANCE или V4L2_CID_AUTOBRIGHTNESS)
../_images/ccfsm.png

15 Диаграмма состояний кластера сс

При загрузке драйвера кластер cc устанавливается в исходное состояние, отмеченное на диаграмме двойной линией. В этом состоянии блок Color Correction включен и в регистры блока записаны значения, обеспечивающие трансляцию изображения с входа на выход без преобразования:

M_{CC} = \begin{pmatrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{pmatrix},
V_{CC} = \begin{pmatrix} 0\\0\\0\end{pmatrix}

Переходы между состояниями происходят при изменении значения одного из контролов. Значения контролов V4L2_CID_СС и V4L2_CID_СС_ENABLE могут быть изменены одновременно.

Управление блоком Color Transformation (CT)

Блок Color Transformation изменяет формат входного потока по формуле:

O = M_{CT} \times I+V_{CT},

где M_{CT} = \begin{pmatrix} M_0&M_1&M_2\\ M_3&M_4&M_5\\ M_6&M_7&M_8 \end{pmatrix} — матрица коэффициентов цветности,

V_{CT} = \begin{pmatrix} V_0\\V_1\\V_2\end{pmatrix} — вектор смещений,

I — трёхкомпонентный вектор входного пикселя, O — трёхкомпонентный вектор выходного пикселя.

Блок Color Transformation принимает на вход изображения в форматах RGB и YCbCr. Драйвер учитывает значений полей ycbcr_enc и quantization структуры v4l2_pix_format, которая определяет входной и выходной форматы изображения. Драйвер не учитывает поле colorspace, то есть выходное цветовое пространство определяется входным.

Драйвер поддерживает следующие функции перевода (ycbcr_enc):

  • V4L2_YCBCR_ENC_601
  • V4L2_YCBCR_ENC_709
  • V4L2_YCBCR_ENC_SYCC
  • V4L2_YCBCR_ENC_BT2020

Драйвер поддерживает сжатый (V4L2_QUANTIZATION_LIM_RANGE) и полный (V4L2_QUANTIZATION_FULL_RANGE) диапазон входных данных (quantization). Выходные данные всегда представлены в полном диапазоне.

При переводе изображения из формата RGB в YCbCr, в зависимости от функций перевода, значения M_{CT} и V_{CT} изменяются следующим образом:

  • V4L2_YCBCR_ENC_SYCC:

M_{CT} = \begin{pmatrix} 0.587 & 0.114 & 0.299\\ -0.3313 & 0.5 & -0.1687\\
-0.4187 & -0.0813 & 0.5 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 0\\2048\\2048\end{pmatrix}

  • V4L2_YCBCR_ENC_601:

M_{CT} = \begin{pmatrix} 0.587 & 0.114 & 0.299\\ -0.3313 & 0.5 & -0.1687\\
-0.4187 & -0.0813 & 0.5 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 0\\2048\\2048\end{pmatrix}

  • V4L2_YCBCR_ENC_709:

M_{CT} = \begin{pmatrix} 0.7152 & 0.0722 & 0.2126\\ -0.3854 & 0.5 & -0.1146\\
-0.4542 & -0.0458 & 0.5 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 0\\2048\\2048\end{pmatrix}

  • V4L2_YCBCR_ENC_BT2020:

M_{CT} = \begin{pmatrix} 0.678 & 0.0593 & 0.2627\\ -0.3854 & 0.5 & -0.1396\\
-0.4598 & -0.0402 & 0.5 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 0\\2048\\2048\end{pmatrix}

При переводе изображения из формата YCbCr в RGB, в зависимости от функций перевода и типа диапазона входного изображения, значения M_{CT} и V_{CT} изменяются следующим образом:

  • V4L2_YCBCR_ENC_SYCC, сжатый диапазон:

    M_{CT} = \begin{pmatrix} 1.1644 & -0.3917 & -0.8129\\ 1.1644 & 2.0172 & -0.0001\\
1.1644 & 0 & 1.596 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2169.0754\\-4429.0088\\-3566.6302\end{pmatrix}

  • V4L2_YCBCR_ENC_SYCC, полный диапазон:

    M_{CT} = \begin{pmatrix} 1 & -0.3441 & -0.7141\\ 1 & 1.772 & -0.0001\\
1 & 0 & 1.402 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2167.3422\\-3629.056\\-2871.296\end{pmatrix}

  • V4L2_YCBCR_ENC_601, сжатый диапазон:

    M_{CT} = \begin{pmatrix} 1.1644 & -0.3918 & -0.813\\ 1.1644 & 2.0172 & 0\\
1.1644 & 0 & 1.596 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2169.2047\\-4429.3736\\-3566.7450\end{pmatrix}

  • V4L2_YCBCR_ENC_601, полный диапазон:

    M_{CT} = \begin{pmatrix} 1 & -0.3441 & -0.7141\\ 1 & 1.772 & 0\\
1 & 0 & 1.402 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2167.3422\\-3629.056\\-2871.296\end{pmatrix}

  • V4L2_YCBCR_ENC_709, сжатый диапазон:

    M_{CT} = \begin{pmatrix} 1.1644 & -0.2132 & -0.5329\\ 1.1644 & 2.1124 & 0\\
1.1644 & 0 & 1.7927 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1230.0493\\-4624.281\\-3969.6159\end{pmatrix}

  • V4L2_YCBCR_ENC_709, полный диапазон:

    M_{CT} = \begin{pmatrix} 1 & -0.1873 & -0.4681\\ 1 & 1.8556 & 0\\
1 & 0 & 1.5748 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1342.3586\\-3800.2688\\-3225.1904\end{pmatrix}

  • V4L2_YCBCR_ENC_BT2020, сжатый диапазон:

    M_{CT} = \begin{pmatrix} 1.1643 & -0.1873 & -0.6504\\ 1.1644 & 2.1417 & 0\\
1.1644 & 0 & 1.6787 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1417.6307\\-4684.4319\\-3736.0067\end{pmatrix}

  • V4L2_YCBCR_ENC_BT2020, полный диапазон:

    M_{CT} = \begin{pmatrix} 1 & -0.1646 & -0.5714\\ 1 & 1.8814 & 0\\
1 & 0 & 1.4746 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1507.136\\-3853.1072\\-3019.9808\end{pmatrix}

При выполнении преобразования из YCbCr в RGB будет учитываться наличие свойства “elvees,pport-low-bits”, прочитанного из DeviceTree. При наличии этого свойства все коэффициенты цветности M_{CT} будут умножены на 4, обеспечивая сдвиг цветовых компонентов влево на 2 разряда.

Если сдвига влево на 2 разряда недостаточно для получения полного диапазона (при разрядности входных данных меньше 10), требуется коррекция значений вектора смещения. Значения вектора смещений, приведенные выше, рассчитывались исходя из разрядности компонентов n=12. Если разрядность входных цветовых компонентов m, значения вектора смещения при наличии свойства “elvees,pport-low-bits” должны быть пересчитаны как V_{CT}[i] / (2^{(n-m-2)}) , где i принимает значения от 0 до 2.

Значения регистров блока Color Transformation рассчитываются по формулам (обозначения регистров приведены согласно спецификации VINC):

& if\ \lfloor max(|M_{CT}|) \rfloor = 0,\ then\ Scaling = 0, \\
& else\ Scaling = \lfloor log_2(\lfloor max(|M_{CT}|) \rfloor) \rfloor + 1,

где max(|M_{CT}|) — максимальный модуль коэффициентов матрицы M_{CT}.

m_i = \lfloor M_i \times (1 << (15-Scaling)) + 0.5) \rfloor,

где i — целое число и принимает значения от 0 до 8.

v_i = \lfloor 4 \times V_i + 0.5 \rfloor,

где i — целое число и принимает значения от 0 до 2.

Управление блоком Gamma Correction (GC)

Блок Gamma Correction выполняет табличное преобразование входного изображения. Каждому из трех цветовых компонентов пикселя (R, G, B) входного изображения соответствует таблица из 4096 элементов. Преобразование выполняется по формуле:

O_{C} = Mem_{C} [I_{C}],

где используются следующие обозначения:

  • C — принимает одно из значений R, G, B;
  • I_{C} — яркость цветового компонента соответствующего входного пикселя;
  • O_{C} — яркость цветового компонента соответствующего выходного пикселя;
  • Mem_{C} — таблица преобразования для яркости цветового компонента.

Управление блоком Gamma Correction осуществляется с помощью контролов кластера gamma. Кластер gamma включает четыре контрола: стандартные контролы V4L2_CID_GAMMA, V4L2_CID_BACKLIGHT_COMPENSATION ,нестандартные контролы V4L2_CID_GAMMA_CURVE и V4L2_CID_GAMMA_ENABLE.

Диаграмма состояний кластера gamma представлена на рисунке 16. Состояние кластера определяется флагами контролов V4L2_CID_GAMMA, V4L2_CID_BACKLIGHT_COMPENSATION, V4L2_CID_GAMMA_CURVE и V4L2_CID_GAMMA_ENABLE (на диаграмме GAMMA, BACKLIGHT, GAMMA_CURVE и GAMMA_CURVE_ENABLE соответственно, наличие флагов указано в квадратных скобках), значениями контролов V4L2_CID_GAMMA, V4L2_CID_BACKLIGHT_COMPENSATION и V4L2_CID_GAMMA_ENABLE и состоянием блока Gamma Correction (GC = 0 — блок выключен, GC = 1 — блок включен). Для обозначения переходов между состояниями на диаграмме используются следующие обозначения:

  • “set GAMMA” — изменение значения контрола V4L2_CID_GAMMA
  • “set GAMMA_CURVE” — установка контрола V4L2_CID_GAMMA_CURVE
  • “set BACKLIGHT” — изменение значения контрола V4L2_CID_BACKLIGHT_COMPENSATION
  • “enable” — установка значения контрола V4L2_CID_GAMMA_ENABLE в единицу
  • “disable” — установка значения контрола V4L2_CID_GAMMA_ENABLE в ноль
../_images/gammafsm-global.png

16 Диаграмма состояний кластера gamma

При загрузке драйвера кластер gamma устанавливается в исходное состояние, отмеченное на диаграмме двойной линией. Переходы между состояниями происходят при изменении значения одного из контролов. При одновременном изменении контролов V4L2_CID_GAMMA_CURVE и V4L2_CID_GAMMA_ENABLE приоритет имеет V4L2_CID_GAMMA_ENABLE, изменение V4L2_CID_GAMMA_CURVE игнорируется.

Управление автоэкспозицией

Управление автоэкспозицией осуществляется с помощью контролов кластера ae. Кластер ae содержит три контрола: стандартный контрол V4L2_CID_EXPOSURE_AUTO, нестандартные контролы V4L2_CID_SENSOR_EXPOSURE_AUTO и V4L2_CID_SENSOR_AUTOGAIN.

Диаграмма состояний кластера ae представлена на рисунке 17. На диаграмме отображено поведение контролов V4L2_CID_EXPOSURE_AUTO и V4L2_CID_SENSOR_EXPOSURE_AUTO. Контрол V4L2_CID_SENSOR_AUTOGAIN взаимодействует с V4L2_CID_EXPOSURE_AUTO аналогично контролу V4L2_CID_SENSOR_EXPOSURE_AUTO и не зависит от последнего.

Состояние кластера определяется флагами и значениями контролов V4L2_CID_EXPOSURE_AUTO и V4L2_CID_SENSOR_EXPOSURE_AUTO (на диаграмме EXPOSURE_AUTO и SENSOR_AE соответственно). На диаграмме также проиллюстрировано состояние контролов сенсора V4L2_CID_EXPOSURE_AUTO и V4L2_CID_EXPOSURE (SENSOR EXPOSURE_AUTO и SENSOR EXPOSURE соответственно), которое зависит от контрола V4L2_CID_SENSOR_EXPOSURE_AUTO. Для обозначения переходов между состояниями на диаграмме используются следующие обозначения:

  • “set EXPOSURE_AUTO” — изменение значения контрола V4L2_CID_EXPOSURE_AUTO;
  • “set SENSOR_AE” — изменение значения контрола V4L2_CID_SENSOR_EXPOSURE_AUTO.
../_images/aefsm.png

17 Диаграмма состояний кластера ae

Поддерживаемые ioctl

5 Список поддерживаемых ioctl
Название Описание
VIDIOC_ENUM_FMT Получить список поддерживаемых форматов пикселей
VIDIOC_EXPBUF Получить файловый дескриптор на буфер (не проверялось)
VIDIOC_G_CTRL Получить значение контрола
VIDIOC_S_CTRL Изменить значение контрола
VIDIOC_G_EXT_CTRLS Получить значение расширенного контрола
VIDIOC_S_EXT_CTRLS Изменить значение расширенного контрола
VIDIOC_TRY_EXT_CTRLS Проверить правильно ли установлено значение контрола
VIDIOC_G_FMT Получить текущий установленный формат пикселей и разрешение
VIDIOC_S_FMT Установить новый формат пикселей и разрешение
VIDIOC_TRY_FMT Проверить, поддерживается ли формат пикселей и разрешение
VIDIOC_G_PARM Получить параметры стриминга
VIDIOC_S_PARM Изменить параметры стриминга
VIDIOC_QBUF Передать буфер драйверу для заполнения
VIDIOC_DQBUF Запросить заполненный буфер у драйвера
VIDIOC_QUERYBUF Запросить статус буфера
VIDIOC_QUERYCAP Запросить информацию о возможностях устройства
VIDIOC_QUERYCTRL Получить список поддерживаемых контролов
VIDIOC_QUERY_EXT_CTRL Получить список поддерживаемых расширенных контролов (не проверялось)
VIDIOC_QUERYMENU Получить список поддерживаемых меню-контролов
VIDIOC_REQBUFS Запросить буферы
VIDIOC_STREAMON Включить приём видео
VIDIOC_STREAMOFF Выключить приём видео

VIDIOC_ENUM_FMT

Блок VINC поддерживает форматы:

  • V4L2_PIX_FMT_BGR32
  • V4L2_PIX_FMT_M420

VIDIOC_EXPBUF

Выполняется в подсистеме V4L2 без участия драйвера vinc.

VIDIOC_G_CTRL

Поддерживаемые контролы описаны в главе Контролы.

VIDIOC_S_CTRL

При каждой записи контрола подсистема V4L2 вначале вызывает функцию try_ctrl(). Это гарантирует, что обработчик s_ctrl() получает уже проверенное значение. Поддерживаемые контролы описаны в главе Контролы.

VIDIOC_G_EXT_CTRLS

Поддерживаемые расширенные контролы описаны в главе Контролы.

VIDIOC_S_EXT_CTRLS

При каждой записи расширенного контрола подсистема V4L2 вначале вызывает функцию try_ctrl(). Это гарантирует, что обработчик s_ctrl() получает уже проверенное значение. Поддерживаемые расширенные контролы описаны в главе Контролы.

VIDIOC_TRY_EXT_CTRLS

Для целочисленных значений драйвер проверяет, что это значение принадлежит диапазону, указанному для данного контрола. Для массивов и указателей драйвер проверяет допустимость значений в зависимости от конкретного контрола.

VIDIOC_G_FMT

Драйвер vinc запрашивает размер кадра и формат у драйвера сенсора и возвращает структуру v4l2_format.

VIDIOC_S_FMT

Когда приложение устанавливает формат пикселей и размер кадра, драйвер vinc проверяет, поддерживает ли он этот формат пикселей. Если формат не поддерживается, то драйвер вернёт приложению ошибку -EINVAL. Драйвер vinc запрашивает размер кадра и формат у драйвера сенсора при помощи функции try_mbus_fmt. Драйвер сенсора возвращает тот размер кадра и формат пикселей, который он поддерживает.

  • Если запрашиваемый размер кадра меньше размера кадра, полученного от драйвера сенсора, то драйвер vinc будет выполнять кроппинг, сохраняя положение центра кадра, получаемого от сенсора.
  • В остальных случаях драйвер vinc будет использовать размер, полученный от драйвера сенсора

Драйвер vinc вызывает функцию s_mbus_fmt, что бы настроить сенсор на формат пикселей и размер кадра, который драйвер сенсора вернул при вызове try_mbus_fmt.

Драйвер настраивает блок VINC в следующей последовательности:

  • Настройка входных портов.
  • Настройка входного кропинга.
  • Включение и настройка блоков преобразования.
  • Настройка выходного кропинга.
  • Настройка размера строк и кадров.
  • Настройка формата сохраняемых пикселей.

Тракт преобразования и DMA остаются в выключенном состоянии.

VIDIOC_TRY_FMT

Алгоритм проверки как при VIDIOC_S_FMT, но внутреннее состояние драйвера, блока VINC и сенсора не изменяется.

VIDIOC_G_PARM

Драйвер vinc запрашивает у драйвера сенсора частоту кадров и заполняет структуру v4l2_fract. В поле type структуры v4l2_streamparm записывается флаг V4L2_BUF_TYPE_VIDEO_CAPTURE. В поля структуры v4l2_capturepar драйвер записывают значения:

  • в capability флаг V4L2_CAP_TIMEPERFRAME
  • в capturemode — 0
  • в extendedmode — номер интерфейса удаленного устройства в соответствии со свойством “elvees,ifacenum” в DeviceTree (см Инициализация *vinc*).

VIDIOC_S_PARM

Когда приложение устанавливает частоту кадров, драйвер vinc запрашивает текущую частоту у драйвера сенсора и вычисляет коэффициент децимации по кадрам как отношение текущей частоты к запрашиваемой. Коэффициент децимации устанавливается в диапазоне от 1 до 64. Если вычисленный коэффициент децимации выходит за границы диапазона, устанавливается граничное значение. Коэффициент децимации записывается в поле FDECIM_COEFF регистра STREAM_INP_DECIM_CTR.

VIDIOC_QBUF

Драйвер ставит буфер в очередь на заполнение. Если приём видео включен (см VIDIOC_STREAMON), но в этот момент не ведётся приём другого кадра, то драйвер включает DMA и начинается приём кадра с начала следующего кадра.

VIDIOC_DQBUF

Выполняется в подсистеме V4L2 без участия драйвера.

VIDIOC_QUERYBUF

Выполняется в подсистеме V4L2 без участия драйвера.

VIDIOC_QUERYCAP

Драйвер записывает в поля:

  • в card строку “VINC”
  • в device_caps — флаги V4L2_CAP_VIDEO_CAPTURE и V4L2_CAP_STREAMING
  • в capabilities — флаги из поля device_caps и флаг V4L2_CAP_DEVICE_CAPS

VIDIOC_QUERYCTRL

Выполняется в подсистеме V4L2 без участия драйвера.

VIDIOC_QUERY_EXT_CTRL

Выполняется в подсистеме V4L2 без участия драйвера.

VIDIOC_QUERYMENU

Выполняется в подсистеме V4L2 без участия драйвера.

VIDIOC_REQBUFS

Подсистема V4L2 передаёт драйверу указатель на количество плейнов. Драйвер выставляет количество плейнов исходя из выбранного формата пикселей (см. VIDIOC_S_FMT)

VIDIOC_STREAMON

Драйвер включает приём видео: включает входной порт, канал обработки, прерывания и бит AXI_MASTER_CFG.GLOBAL_ENABLE. Номер канала обработки определяется свойством “elvees,ifacenum”, определенным для удаленного устройства, с которого будет приниматься видео. Если “elvees,ifacenum” имеет четное значение, выбирается канал обработки 0, если нечетное значение — канал обработки 1. Драйвер записывает значение этого свойства в поле STREAM*_INP_CFG.INPUT_INTERFACE. При попытке запуска видео на канале обработки, который уже занят приемом видео с другого источника, ioctl будет завершаться с кодом ошибки EBUSY. Включение DMA будет производиться при наличии буферов у драйвера (см VIDIOC_QBUF).

VIDIOC_STREAMOFF

Драйвер выключает приём видео: выключает DMA, канал обработки, прерывания и входной порт. Если в DeviceTree отсутствует свойство clock-over-fsync (см Инициализация *vinc*), то драйвер выключает бит AXI_MASTER_CFG.GLOBAL_ENABLE.

Контролы

Драйвер vinc использует контролы для настройки блока VINC или передаёт эти контролы драйверу сенсора. Если драйвер vinc и драйвер сенсора поддерживают одинаковые контролы, то при изменении такого контрола драйвер vinc будет передавать контрол драйверу сенсора.

6 Список поддерживаемых стандартных контролов
# Название контрола Расширенный контрол Тип данных Значение по умолчанию Минимальное значение Максимальное значение Описание
1 V4L2_CID_BRIGHTNESS Нет integer 0 -2048 2047 Значение яркости
2 V4L2_CID_CONTRAST Нет integer 128 0 255 Значение контраста (усиление люмы)
3 V4L2_CID_SATURATION Нет integer 128 0 255 Значение насыщенности (усиление хромы)
4 V4L2_CID_HUE Нет integer 0 -128 127 Значение баланса цветности
5 V4L2_CID_AUTO_WHITE_BALANCE Нет bool 1 0 1 Разрешение автобаланса белого
6 V4L2_CID_DO_WHITE_BALANCE Нет button     Однократная установка коэффициентов баланса белого
7 V4L2_CID_COLOR_KILLER Нет bool 0 0 1 Разрешение черно-белого при слабом видеосигнале
8 V4L2_CID_GAIN Нет integer 1     Усиление
9 V4L2_CID_GAMMA Нет integer 16 1 31 Гамма-коррекция
10 V4L2_CID_EXPOSURE_ABSOLUTE Да integer       Время экспозиции для сенсора
11 V4L2_CID_EXPOSURE_AUTO Да enum 1 0 1 Разрешение и выбор режима автоэкспозиции
12 V4L2_CID_RED_BALANCE Нет integer 0 -112 112 Коэффициент баланса для красного цвета
13 V4L2_CID_BLUE_BALANCE Нет integer 0 -112 112 Коэффициент баланса для синего цвета
14 V4L2_CID_WHITE_BALANCE _TEMPERATURE Нет integer 6500 2000 9000 Баланс белого в виде цветовой температуры
15 V4L2_CID_AUTOGAIN Нет integer 1 0 1 Разрешение автоусиления
16 V4L2_CID_AUTOBRIGHTNESS Нет bool 0 0 1 Разрешение автояркости
17 V4L2_CID_POWER_LINE FREQUENCY Нет enum       Включение фильтра частоты переменного тока, позволяющего избежать мерцания
18 V4L2_CID_COLORFX Нет enum       Выбор цветового эффекта
19 V4L2_CID_COLORFX_CBCR Нет integer       Коэффициенты для цветовых эффектов CbCr (биты [7:0] для Cr, биты [15:8] для Cb)
20 V4L2_CID_CHROMA_GAIN Нет integer       Регулировка усиления цвета
21 V4L2_CID_BACKLIGHT _COMPENSATION Нет integer 0 0 10 Компенсация заднего света
22 V4L2_CID_TEST_PATTERN Да menu 0 0 4 Включение/выключение и выбор тестового паттерна
7 Список поддерживаемых нестандартных [1] контролов
# Название Тип данных Номер [2] Описание
1 V4L2_CID_BAD _CORRECTION_ENABLE bool 0x1000 Вкл/выкл блока коррекции битых пикселей
2 V4L2_CID_BAD_PIXELS void* 0x1001 Карта битых пикселей
3 V4L2_CID_BAD_ROWS __u16* 0x1002 Битые строки
4 V4L2_CID_BAD_COLS __u16* 0x1003 Битые столбцы
5 V4L2_CID_GAMMA _CURVE_ENABLE bool 0x1004 Вкл/выкл блока гамма-коррекции
6 V4L2_CID_GAMMA_CURVE void* 0x1005 Гамма-коррекция
7 V4L2_CID_CC_ENABLE bool 0x1006 Вкл/выкл коррекции цвета
8 V4L2_CID_CC void* 0x1007 Коррекция цвета
9 V4L2_CID_CT_ENABLE bool 0x1008 Вкл/выкл преобразования цвета
10 V4L2_CID_CT void* 0x1009 Преобразование цвета
11 V4L2_CID_DR_ENABLE bool 0x100A Вкл/выкл адаптации динамического диапазона
12 V4L2_CID_DR __u16* 0x100B Адаптация динамического диапазона
13 V4L2_CID_STAT_ENABLE __s32 0x100C Вкл/выкл сбора статистики
14 V4L2_CID_STAT_AF_COLOR __s32 0x100D Компонента автофокуса
15 V4L2_CID_STAT_AF_TH __s32 0x100E Пороговое значение автофокуса
16 V4L2_CID_STAT_ZONE0 void* 0x100F Настройка зоны 0
17 V4L2_CID_STAT_ZONE1 void* 0x1010 Настройка зоны 1
18 V4L2_CID_STAT_ZONE2 void* 0x1011 Настройка зоны 2
19 V4L2_CID_STAT_ZONE3 void* 0x1012 Настройка зоны 3
20 V4L2_CID_STAT_HIST0 void* 0x1013 Гистограммы по зоне 0
21 V4L2_CID_STAT_HIST1 void* 0x1014 Гистограммы по зоне 1
22 V4L2_CID_STAT_HIST2 void* 0x1015 Гистограммы по зоне 2
23 V4L2_CID_STAT_HIST3 void* 0x1016 Гистограммы по зоне 3
24 V4L2_CID_STAT_AF0 void* 0x1017 Значения автофокуса по зоне 0
25 V4L2_CID_STAT_AF1 void* 0x1018 Значения автофокуса по зоне 1
26 V4L2_CID_STAT_AF2 void* 0x1019 Значения автофокуса по зоне 2
27 V4L2_CID_STAT_AF3 void* 0x101A Значения автофокуса по зоне 3
28 V4L2_CID_STAT_ADD0 void* 0x101B Дополнительная статистика по зоне 0
29 V4L2_CID_STAT_ADD1 void* 0x101C Дополнительная статистика по зоне 1
30 V4L2_CID_STAT_ADD2 void* 0x101D Дополнительная статистика по зоне 2
31 V4L2_CID_STAT_ADD3 void* 0x101E Дополнительная статистика по зоне 3
32 V4L2_CID_SENSOR_EXPOSURE _AUTO bool 0x101F Разрешение автоэкспозиции сенсора
33 V4L2_CID_SENSOR_AUTOGAIN bool 0x1020 Разрешение автоусиления сенсора
34 V4L2_CID_SENSOR_AUTO _WHITE_BALANCE bool 0x1021 Разрешение авто баланса белого сенсора
[1]Все нестандартные контролы являются расширенными.
[2]Номер указан относительно V4L2_CID_CAMERA_CLASS_BASE.

Стандартные контролы

Обозначения в описании стандартных контролов:

max_v – количество возможных значений компоненты пикселя.

V4L2_CID_BRIGHTNESS

Описание: Контрол позволяет регулировать яркость изображения.

Тип: __s32

Диапазон возможных значений: [-2048..2048]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Контрол изменяет значение яркости изображения на заданную величину. При установке контрола рассчитывается вектор V_{bri} и обновляются значения коэффициентов блока Color Correction:

V_{bri} = \begin{pmatrix}value\\0\\0\end{pmatrix},

где value — текущее значение контрола

V4L2_CID_CONTRAST

Описание: Контрол позволяет изменить контрастность изображения.

Тип: __s32

Диапазон возможных значений: [0..255]

Шаг между значениями: 1

Значение по умолчанию: 128

Алгоритм:

Контрол умножает значение яркости изображения на заданную величину. При установке контрола рассчитывается матрица M_{con} и обновляются значения коэффициентов блока Color Correction:

M_{con} = \begin{pmatrix} L&0&0\\
0&1&0\\
0&0&1\end{pmatrix},

где L = tan \begin{pmatrix} \frac{value \times \pi}{512} \end{pmatrix} и value — текущее значение контрола.

V4L2_CID_SATURATION

Описание: Контрол позволяет изменить насыщенность изображения.

Тип: __s32

Диапазон возможных значений: [0..255]

Шаг между значениями: 1

Значение по умолчанию: 128

Алгоритм:

Контрол умножает значения цветности изображения на заданную величину. При установке контрола рассчитывается матрица M_{sat} и обновляются значения коэффициентов блока Color Correction:

M_{sat} = \begin{pmatrix} 1&0&0\\
0&C&0\\
0&0&C\end{pmatrix},

где C = tan \begin{pmatrix} \frac{value \times \pi}{512} \end{pmatrix} и value — текущее значение контрола.

V4L2_CID_HUE

Описание: Контрол позволяет изменить тон изображения.

Тип: __s32

Диапазон возможных значений: [-128..127]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Контрол выполняет поворот вектора цветности на заданный угол. При установке контрола рассчитывается матрица M_{hue} и обновляются значения коэффициентов блока Color Correction:

M_{hue} = \begin{pmatrix} 1&0&0\\
0&cos(A)&-sin(A)\\
0&sin(A)&cos(A)\end{pmatrix},

где A = \frac{value \times \pi}{128} и value — текущее значение контрола.

V4L2_CID_GAMMA

Описание: Контрол позволяет выполнить гамма-коррекцию изображения с использованием степенной функции.

Тип: __s32

Диапазон возможных значений: [1..31]

Шаг между значениями: 1

Значение по умолчанию: 16

Алгоритм:

Контрол задает параметр для вычисления степени передаточной функции при гамма-коррекции. Значение степени \gamma вычисляется как:

\gamma =  \frac{value/32}{1-value/32},

где value — текущее значение контрола.

Значение по умолчанию соответствует \gamma = 1. Преобразование выполняется в блоке Gamma Correction (GC). Для настройки преобразования требуется задать три таблицы из 4096 значений, по одной для каждого цветового компонента пикселя. Таблицы одинаковы для всех цветовых компонентов. Формирование таблицы осуществляется следующим образом: для каждого значения цветового компонента входного пикселя V_{IN} в диапазоне 0-4095 вычисляется значение цветового компонента выходного пикселя V_{OUT} по формуле:

V_{OUT} =  4095 * \begin{pmatrix} \frac{V_{IN}}{4095} \end{pmatrix}^{\gamma}

Полученные таблицы записываются в ячейки каждой из трех памятей коэффициентов блока Gamma Correction.

V4L2_CID_COLOR_KILLER

Описание: Контрол позволяет перевести изображение в градации серого цвета.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрол обнуляет значение цветовых компонент изображения. При включении контрола рассчитывается матрица M_{CK} и обновляются значения коэффициентов блока Color Correction:

M_{CK} = \begin{pmatrix} 1&0&0\\
0&1-value\\
0&0&1-value\end{pmatrix},

где value — текущее значение контрола.

V4L2_CID_COLORFX

Описание: Контрол позволяет накладывать на изображение различные цветовые эффекты.

Тип: enum

Диапазон возможных значений: [0..15]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

В зависимости от значения контрола выбираются значения матриц M_{FX\_RGB}, M_{FX\_YCbCr} и векторов V_{FX\_RGB}, V_{FX\_YCbCr}. При этом обновляются значения коэффициентов блока Color Correction. Цветовой эффект зависит от значения, принимаемого контролом. Если контрол выставлен в неподдерживаемое значение, то он переводится в предыдущее поддерживаемое. Если в описании эффекта нет упоминания матрицы или вектора, то они принимают значения по умолчанию:

M_{FX\_RGB} = \begin{pmatrix} 1&0&0 \\
                              0&1&0 \\
                              0&0&1 \end{pmatrix},
\ M_{FX\_YCbCr} = \begin{pmatrix} 1&0&0 \\
                                  0&1&0 \\
                                  0&0&1 \end{pmatrix},

V_{FX\_YCbCr} = \begin{pmatrix} 0\\0\\0 \end{pmatrix},
\ V_{FX\_RGB} = \begin{pmatrix} 0\\0\\0 \end{pmatrix}

Список значений поддерживаемых эффектов и их описание:

  • V4L2_COLORFX_NONE

    Эффект отсутствует. Это исходное значение контрола. Матрицы и вектор смещения выставляются в значения по умолчанию;

  • V4L2_COLORFX_BW

    Изображение переводится в черно-белое. Матрица M_{FX\_YCbCr} и вектор V_{FX\_YCbCr} принимают значения:

    M_{FX\_YCbCr} = \begin{pmatrix} 1&0&0 \\
                                      0&0&0 \\
                                      0&0&0 \end{pmatrix},
\ V_{FX\_YCbCr} = \begin{pmatrix} 0\\2048\\2048 \end{pmatrix};

  • V4L2_COLORFX_SEPIA

    К изображению применяется эффект сепии. Матрица M_{FX\_RGB} принимает значение:

    M_{FX\_RGB} = \begin{pmatrix} 0.393 & 0.769 & 0.189 \\
0.349 & 0.686 & 0.168 \\
0.272 & 0.534 & 0.131 \end{pmatrix};

  • V4L2_COLORFX_NEGATIVE

    Изображение переводится в негатив. Матрица M_{FX\_RGB} и вектор V_{FX\_RGB} принимают значения:

    M_{FX\_RGB} = \begin{pmatrix} -1& 0& 0  \\
                               0&-1& 0  \\
                               0& 0&-1 \end{pmatrix},
\ V_{FX\_RGB} = \begin{pmatrix} 4095\\4095\\4095 \end{pmatrix};

  • V4L2_COLORFX_VIVID

    В изображении насыщаются цвета. Матрица M_{FX\_YCbCr} и вектор V_{FX\_YCbCr} принимают значения:

    M_{FX\_YCbCr} = \begin{pmatrix} 1&0     &0      \\
                                      0&1.3143&0      \\
                                      0&0     &1.3143 \end{pmatrix},
\ V_{FX\_RGB} = \begin{pmatrix} 0\\-643.6864\\-643.6864 \end{pmatrix};

  • V4L2_COLORFX_AQUA

    Изображение переводится в холодные тона. Матрица M_{FX\_RGB} принимает значение:

    M_{FX\_RGB} = \begin{pmatrix} 0.8 & 0.1  & 0.1 \\
0.1 & 0.85 & 0.1 \\
0.3 & 0.1  & 0.7 \end{pmatrix};

  • V4L2_COLORFX_ANTIQUE

    К изображению применяется эффект старого фото. Матрица M_{FX\_RGB} принимает значение:

    M_{FX\_RGB} = \begin{pmatrix} 0.85 & 0.1  & 0.3 \\
0.1  & 0.45 & 0.5 \\
0.1  & 0.3  & 0.5 \end{pmatrix};

  • V4L2_COLORFX_SET_CBCR

    В изображении компоненты Cb и Cr пикселей заменяются на значения Cb_{new} и Cr_{new}, заданные контролом V4L2_CID_COLORFX_CBCR. Матрица M_{FX\_YCbCr} и вектор V_{FX\_YCbCr} принимают значения:

    M_{FX\_YCbCr} = \begin{pmatrix} 0&0&0 \\
                                0&0&0 \\
                                0&0&0 \end{pmatrix},
\ V_{FX\_YCbCr} = \begin{pmatrix} 0\\Cb_{new}\\Cr_{new} \end{pmatrix}.

V4L2_CID_COLORFX_CBCR

Описание: Контрол позволяет изменять компоненты Cb и Cr пикселей изображения на фиксированные значения, при использовании эффекта V4L2_COLORFX_SET_CBCR контрола V4L2_CID_COLORFX.

Тип: __s32

Диапазон возможных значений: [0..65535]

Значение по умолчанию: 0

Алгоритм:

При установке контрола драйвер выполняет:

  • изменение переменных Cr_{new} = value[7:0] и Cb_{new} = value[15:8], где value — значение контрола.
  • пересчёт вектора V_{FX\_YCbCr} контрола V4L2_CID_COLORFX и обновление значения коэффициентов блока Color Correction.

V4L2_CID_DO_WHITE_BALANCE

Описание: Контрол выполняет единовременную автонастройку баланса белого цвета изображения.

Тип: button

Диапазон возможных значений: -

Шаг между значениями: -

Значение по умолчанию: -

Алгоритм:

Преобразование выполняется только над данными в формате RGB.

При установке контрола драйвер выполняет:

  • чтение значений суммы по красному, синему и зелёному цвету sumR, sumG, sumB из блока статистики (STT).

  • вычисление в соответствии с алгоритмом “Серый мир” коэффициентов баланса красного цвета Kr=sumG/sumR и синего цвета Kb=sumG/sumB.

  • установку коэффициента зеленого цвета Kg=1.

  • формирование матрицы M_{WB} по формуле:

    M_{WB} = \begin{pmatrix} K{r}&0&0\\
0&K{g}&0\\
0&0&K{b}\end{pmatrix},

    для данных в формате YCbCr Kr=1, Kg=1, Kb=1.

  • установку контролов V4L2_CID_RED_BALANCE и V4L2_CID_BLUE_BALANCE в соответствии с рассчитанными коэффициентами Kr и Kb.

  • установку флагов WRITE_ONLY и EXECUTE_ON_WRITE для контрола V4L2_CID_WHITE_BALANCE_TEMPERATURE.

  • обновление значения коэффициентов блока Color Correction.

V4L2_CID_RED_BALANCE

Описание: Контрол устанавливает баланс красного цвета в изображении.

Тип: __s32

Диапазон возможных значений: [-112..112]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При установке контрола драйвер выполняет:

  • вычисление коэффициента баланса красного цвета по формуле:

Kr = \frac{(value+128)/256}{1-(value+128)/256}*Kg,

где value — текущее значение контрола, Kg — коэффициент баланса зеленого цвета.

Установка value < 0 приводит к установке Kr < Kg, минимальное значение value = -112 соответствует Kr = 0.067*Kg. Установка value > 0 приводит к установке Kr > Kg, максимальное значение value = 112 соответствует Kr = 15*Kg. При value = 0 Kr = Kg.

V4L2_CID_BLUE_BALANCE

Описание: Контрол устанавливает баланс синего цвета в изображении.

Тип: __s32

Диапазон возможных значений: [-112..112]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При установке контрола драйвер выполняет:

  • вычисление коэффициента баланса синего цвета по формуле:

Kb =  \frac{(value+128)/256}{1-(value+128)/256}*Kg,

где value — текущее значение контрола, Kg — коэффициент баланса зеленого цвета.

Установка value < 0 приводит к установке Kb < Kg, минимальное значение value = -112 соответствует Kb = 0.067*Kg. Установка value > 0 приводит к установке Kb > Kg, максимальное значение value = 112 соответствует Kb = 15*Kg. При value = 0 Kb = Kg.

V4L2_CID_WHITE_BALANCE_TEMPERATURE

Описание: Контрол устанавливает баланс белого цвета изображения в соответствии с цветовой температурой.

Тип: __s32

Диапазон возможных значений: [2000 - 9000]

Шаг между значениями: 10

Значение по умолчанию: 6500

Алгоритм:

В алгоритме используется таблица преобразования цветовой температуры в RGB, вычисленная с помощью кода specrend.c. Таблица содержит значения tableR = R/255, tableB = G/255 и tableB = B/255, где R, G и B — значения яркости цветовых компонент в диапазоне от 0 до 255, соответствующие цветовой температуре. Значения цветовой температуры определяются в диапазоне от 2000K до 9000K с шагом 200K.

При установке контрола драйвер выполняет:

  • чтение значений суммы по красному, зелёному и синему цвету Sum_r, Sum_g, Sum_b из блока статистики (STT).

  • определение значения яркости цветовых компонент Ctrl_r, Ctrl_g и Ctrl_b, соответствующих цветовой температуре, заданной значением контрола value с использованием заранее вычисленной таблицы преобразования цветовой температуры в RGB методом линейной интерполяции.

  • вычисление сдвига зеленого цвета, вносимого подключенным сенсором, по формуле:

    Kg_0 = \frac{Ctrl_g / Ctrl_r}{Sum_g / Sum_r}.

  • вычисление коэффициентов баланса красного, зеленого и синего цвета по формулам: Kr = 1 / Ctrl_g , Kg = Kg_0 / Ctrl_g , Kb = 1 / Ctrl_b.

  • приведение коэффициента зеленого цвета к единице: Kr = Kr / Kg, Kg = 1, Kb = Kb / Kg.

  • установку новых значений Kr, Kg, Kb в матрицу M_{WB} (см. V4L2_CID_DO_WHITE_BALANCE).

  • установку контролов V4L2_CID_RED_BALANCE и V4L2_CID_BLUE_BALANCE в соответствии с рассчитанными коэффициентами Kr и Kb.

  • сброс флагов WRITE_ONLY и EXECUTE_ON_WRITE

  • обновление значения коэффициентов блока Color Correction.

V4L2_CID_AUTO_WHITE_BALANCE

Описание: Контрол включает/выключает автонастройку баланса белого цвета изображения.

Тип: bool

Диапазон возможных значений: [0..1]

Значение по умолчанию: 0

Алгоритм:

При включении контрол выполняет настройку баланса белого цвета после каждого чтения статистических данных по алгоритму, описанному в главе V4L2_CID_DO_WHITE_BALANCE. Для контролов V4L2_CID_CC, V4L2_CID_DO_WHITE_BALANCE, V4L2_CID_RED_BALANCE, V4L2_CID_BLUE_BALANCE, V4L2_CID_WHITE_BALANCE_TEMPERATURE устанавливается флаг INACTIVE, для всех вышеперечисленных контролов кроме V4L2_CID_DO_WHITE_BALANCE — флаг VOLATILE.

При выключении контрола флаги INACTIVE и VOLATILE для вышеперечисленных контролов сбрасываются.

V4L2_CID_AUTOBRIGHTNESS

Описание: Контрол включает/выключает автонастройку яркости и контраста изображения.

Тип: bool

Диапазон возможных значений: [0..1]

Значение по умолчанию: 0

Алгоритм:

При загрузке драйвера:

  • определяется зона 3 (с наименьшим приоритетом) для вычисления статистических данных (см. V4L2_CID_STAT_ZONE0-3).
  • разрешается вычисление гистограмм по зоне 3 блоком статистики (STT).

При включении контрол выполняет после каждого чтения гистограмм красного, зелёного и синего цвета histR, histG, histB (для данных в формате RGB) или гистограммы яркости histY (для данных в формате YCbCr) из блока статистики (STT) следующую последовательность действий:

  • вычисление для данных в формате RGB суммарной гистограммы по красному, синему и зеленому цвету hist[i] = histR[i] + histG[i] + histB[i], где i=0-255; для данных в формате YCbCr используется гистограмма по яркости hist[i] = histY[i].

  • построение кумулятивного распределения по суммарной гистограмме: acc[0] = hist[0], acc[i] = acc[i-1]+hist[i], где i=1-255.

  • определение минимального и максимального значения для обрезки гистограммы по краям таким образом, чтобы в обрезанные участки гистограммы попадало по 1% от общего количества пикселей в изображении (нормализация гистограммы). Минимальное i_{min} и максимальное i_{max} значения должны выбираться таким образом, чтобы только для i <= i_{min} и только для j >= i_{max} выполнялись следующие условия:

    acc[i] < N * 0.1,   acc[j] >= N * 0.99,

    где N — количество пикселей в выходном изображении.

  • определение входного диапазона после нормализации гистограммы как range_{in} = i_{max} - i_{min}

  • установку нового значения контраста с целью получения максимального выходного диапазона: L = 255/range_{in}, где L — коэффициент матрицы M_{con} (см. V4L2_CID_CONTRAST).

  • установку нового значения яркости c целью получения нулевой нижней границы выходного диапазона: value = -L * min, где value — коэффициент вектора V_{bri} (см. V4L2_CID_BRIGHTNESS).

  • обновление значения коэффициентов блока Color Correction.

При включении контрола для контролов V4L2_CID_CONTRAST и V4L2_CID_BRIGHTNESS устанавливаются флаги INACTIVE и VOLATILE. При выключении контрола флаги INACTIVE и VOLATILE для вышеперечисленных контролов сбрасываются.

V4L2_CID_EXPOSURE_AUTO

Описание: Контрол устанавливает режим автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

При загрузке драйвера:

  • определяется зона 3 (с наименьшим приоритетом) для вычисления статистических данных (см. V4L2_CID_STAT_ZONE0-3).
  • разрешается вычисление дополнительной статистики по зоне 3 блоком статистики (STT).

Управление значениями экспозиции и усиления осуществляется драйвером через контролы драйверов сенсора V4L2_CID_EXPOSURE_ABSOLUTE и V4L2_CID_GAIN.

При установке значения контрола в V4L2_EXPOSURE_AUTO(0) контрол выполняет после каждого чтения сумм по красному, синему и зелёному цвету sumR, sumG, sumB (для данных в формате RGB) или суммарной яркости sumY (для данных в формате YCbCr) из блока статистики (STT) следующую последовательность действий:

  • вычисление значения средней яркости изображения для формата RGB:

    Y_{avg} = (M_{0} * sumR + M_{1} * sumG + M_{2} * sumB) / N

    или формата YCbCr:

    Y_{avg} = sumY / N,

    где M_{0-2} — коэффициент матрицы M_{CT} (см. Color Transformation), N — количество пикселей в выходном изображении.

  • вычисление коэффициента подстройки экспозиции adj = TH / Y_{avg}, где TH является параметром алгоритма и выбирается в зависимости от требуемого значения средней яркости (в текущей реализации TH = 110). Значение adj должно находиться в диапазоне от 1/16 до 4, при выходе за пределы диапазона значение ограничивается нижней или верхней границей диапазона.

  • чтение текущих значений экспозиции и усиления и вычисление нового значения искомой яркости:

    brigthness = exp_{cur} * gain_{cur} * (SMOOTH + adj * (1 - SMOOTH)),

    где SMOOTH — коэффициент сглаживания, позволяющий избежать резкого изменения значений экспозиции и усиления, который является параметром алгоритма (в текущей реализации SMOOTH = 0.5).

  • определение новых значений экспозиции exp и усиления gain с учетом параметров алгоритма EXPmax, GAINmax, которые соответствуют максимальным значением контролов сенсора V4L2_CID_EXPOSURE_ABSOLUTE и V4L2_CID_GAIN:

    exp = \begin{cases}
EXPmax&  \text{if $brigthness$ > $EXPmax$},\\
brigthness&  \text{if $brigthness$ <= $EXPmax$}.
\end{cases}

    gain = \begin{cases}
brigthness / EXPmax&  \text{if $brigthness$ > $EXPmax$},\\
1&  \text{if $brigthness$ <= $EXPmax$}.
\end{cases}

    Если полученное значение gain > GAINmax, gain устанавливается равным GAINmax.

  • запись новых значений экспозиции exp и усиления gain в контролы сенсора.

Если контрол устанавливается в V4L2_EXPOSURE_AUTO, контролы V4L2_CID_SENSOR_EXPOSURE_AUTO и V4L2_CID_SENSOR_AUTOGAIN устанавливаются в значение 0 и для них устанавливается флаг INACTIVE. Если контрол устанавливается в V4L2_EXPOSURE_MANUAL, контролы V4L2_CID_SENSOR_EXPOSURE_AUTO и V4L2_CID_SENSOR_AUTOGAIN устанавливаются в значение 1 и флаг INACTIVE сбрасывается.

Когда контрол находится в состоянии ручного управления экспозицией, контролы V4L2_CID_SENSOR_EXPOSURE_AUTO и V4L2_CID_SENSOR_AUTOGAIN могут быть установлены в значение 0.

V4L2_CID_BACKLIGHT_COMPENSATION

Описание: Контрол устанавливает режим автонастройки компенсации заднего света.

Тип: __s32

Диапазон возможных значений: [0..10]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При загрузке драйвера:

  • определяется зона 3 (с наименьшим приоритетом) для вычисления статистических данных (см. V4L2_CID_STAT_ZONE0-3).
  • разрешается вычисление гистограмм по зоне 3 блоком статистики (STT).

При установке значения контрола в 0 автонастройка компенсации заднего света отключена.

При установке ненулевого значения контрола после каждого чтения гистограмм красного, зелёного и синего цвета histR, histG, histB (для данных в формате RGB) или гистограммы яркости histY (для данных в формате YCbCr) из блока статистики (STT) выполняется следующая последовательность действий:

  • вычисление для данных в формате RGB суммарной гистограммы по красному, синему и зеленому цвету hist[i] = histR[i] + histG[i] + histB[i], где i=0-255; для данных в формате YCbCr используется гистограмма по яркости hist[i] = histY[i].

  • построение кумулятивного распределения по суммарной гистограмме: acc[0] = hist[0], acc[i] = acc[i-1]+hist[i], где i=1-255.

  • вычисление таблицы преобразования изображения HE(i) методом эквализации гистограммы:

    HE(i) = 255 * \frac{acc[i]}{N},

    где N — количество пикселей в выходном изображении, i=0-255.

  • вычисление коэффициента линейной модификации таблицы преобразования n = value / 10, где value — текущее значение контрола.

  • модификация таблицы преобразования изображения с помощью коэффициента:

HE_{LIN}(i) = (1 - n) * i + n * HE(i), i=0-255.

  • вычисление таблицы преобразования V_{OUT}(i) по формуле:

V_{OUT}(i) = HE_{LIN}(i / 16), i=0-4095.

  • запись таблиц преобразования в блок Gamma Correction (GC). Таблицы одинаковы для всех цветовых компонентов.

Если контрол устанавливается в ненулевое значение, контрол V4L2_CID_GAMMA_CURVE переходит в неактивное состояние (устанавливается флаг INACTIVE). Преобразование, задаваемое контролом V4L2_CID_GAMMA, выполняется после преобразования, заданного контролом V4L2_CID_BACKLIGHT_COMPENSATION.

V4L2_CID_TEST_PATTERN

Описание: Контрол выбирает тестовый паттерн, генерируемый блоком VINC.

Тип: menu (__s32)

Класс расширенного контрола: V4L2_CTRL_CLASS_IMAGE_PROC

Диапазон возможных значений: [0..4]

Шаг между значениями: 1

Значение по умолчанию: 0

8 Возможные значения контрола
Значение Название Описание
0 Disabled Тестовый паттерн выключен. Видео поступает с видео-сенсора
1 Vertical bars Цветные вертикальные полосы
2 Diagonal stripes Цветные диагональные двигающиеся полосы
3 Horizontal bars Цветные горизонтальные полосы
4 Increment Поочерёдное увеличение значений цветовых компонент

Нестандартные контролы

V4L2_CID_BAD_CORRECTION_ENABLE

При значении 0 драйвер отключает блок коррекции битых пикселей. При значении 1 — включает.

Если при выключенном блоке коррекции битых пикселей драйверу будет передан список битых пикселей (V4L2_CID_BAD_PIXELS), битых строк (V4L2_CID_BAD_ROWS) или битых столбцов (V4L2_CID_BAD_COLS), то все эти списки будут автоматически записаны в блок при его включении.

V4L2_CID_BAD_PIXELS

Драйвер принимает массив структуры struct vinc_bad_pixel. Массив должен состоять из 4096 элементов:

struct vinc_bad_pixel {
    __u16 x;
    __u16 y;
}

Координаты дефектных пикселей должны быть записаны в память в порядке возрастания координат пикселя: слева-направо, сверху-вниз. Чтобы пиксель не исправлялся, его координаты следует установить в значение 0xFFFF.

V4L2_CID_BAD_ROWS

Драйвер принимает массив из 16 значений типа __u16. Значения массива состоят из номеров битых строк. Значение 0xFFFF означает, что строку не нужно исправлять.

V4L2_CID_BAD_COLS

Драйвер принимает массив из 16 значений типа __u16. Значения массива состоят из номеров битых столбцов. Значение 0xFFFF означает, что столбец не нужно исправлять.

V4L2_CID_GAMMA_ENABLE

При значении 0 драйвер отключает блок гамма-коррекции. При значении 1 — включает.

При выключении блока следующие контролы становятся неактивными:

  • V4L2_CID_GAMMA

V4L2_CID_GAMMA_CURVE

Драйвер принимает структуру struct vinc_gamma_curve:

struct vinc_gamma_curve {
    __u16 red[4096];
    __u16 green[4096];
    __u16 blue[4096];
};

Если установка контрола выполняется при выключенном блоке гамма-коррекции, то структура будет автоматически записа в блок при включении контрола V4L2_CID_GAMMA_ENABLE.

V4L2_CID_CC_ENABLE

При значении 0 драйвер отключает блок коррекции цвета Color Correction. При значении 1 — включает. При выключении блока становятся неактивными все контролы, управляющие блоком.

V4L2_CID_CC

Драйвер принимает структуру struct vinc_cc:

struct vinc_cc {
    __u16 coeff[9];
    __u16 offset[3];
    __u8 scaling;
};
9 Описание полей структуры vinc_cc
Поле Описание
coeff Коэффициенты преобразования цветности
offset Смещение цветовых компонент
scaling Коэффициент масштабирования

V4L2_CID_CT_ENABLE

При значении 0 драйвер отключает блок преобразования цветовой модели (Color Transformation). При значении 1 — включает.

При установке формата BGR32 драйвер изменит значение контрола на 0. При установке любого формата, отличного от BGR32, драйвер изменит значение контрола на 1. При выключении блока следующие контролы становятся неактивными: (TBD)

V4L2_CID_CT

Драйвер принимает структуру struct vinc_cc (см. V4L2_CID_CC).

При установке любого формата, отличного от BGR32, драйвер изменит содержимое контрола (запишет коэффициенты преобразования из RGB в YCbCr).

V4L2_CID_DR_ENABLE

При значении 0 драйвер отключает блок адаптации динамического диапазона (Dynamic Range). При значении 1 — включает.

При выключении блока следующие контролы становятся неактивными: (TBD)

V4L2_CID_DR

Драйвер принимает массив из 4096 значений типа __u16. Значения массива состоят из коэффициентов коррекции динамического диапазона.

Если установка контрола выполняется при выключенном блоке адаптации динамического диапазона, то структура будет автоматически записа в блок при включении контрола V4L2_CID_DR_ENABLE.

V4L2_CID_STAT_ENABLE

Драйвер принимает значение типа __s32. В значении кодируется битовая маска включенных блоков сбора статистики:

  • 0x1 — включен блок сбора гистограмм
  • 0x2 — включен блок автофокуса
  • 0x4 — включен блок дополнительных статистических данных

Если в значении недопустимая маска, то вызов контрола завершается с кодом ошибки -ERANGE.

V4L2_CID_STAT_AF_COLOR

Драйвер принимает значение типа __s32. В значении закодирован номер компоненты цвета, по которой рассчитывается фильтр Собеля:

  • 0 — R для RGB или Cr для YCbCr
  • 1 — G для RGB или Y для YCbCr
  • 2 — B для RGB или Cb для YCbCr

Если в значении недопустимый номер компоненты, то вызов контрола завершается с кодом ошибки -ERANGE.

V4L2_CID_STAT_AF_TH

Драйвер принимает значение 12-битное пороговое значение для фильтра Собеля типа __s32.

V4L2_CID_STAT_ZONE0-3

Драйвер принимает структуру struct vinc_stat_zone зоны сбора статистики:

struct vinc_stat_zone {
    __u16 enable;
    __u16 x_lt;
    __u16 y_lt;
    __u16 x_rb;
    __u16 y_rb;
};
10 Описание полей структуры vinc_stat_zone
Поле Описание
enable Включение/выключение зоны: 0 — зона выключена, любое другое значение — зона включена
x_lt Координата x левого верхнего угла зоны
y_lt Координата y левого верхнего угла зоны
x_rb Координата x правого нижнего угла зоны
y_rb Координата y правого нижнего угла зоны

Согласно спецификации VINC при определении координат зоны должны выполняться следующие условия:

  • x_lt > 0
  • y_lt > 0
  • x_rb < HSIZE-1
  • y_rb < VSIZE-1,

где HSIZE — размер изображения по горизонтали, VSIZE — размер изображения по вертикали.

Зона 3 (с наименьшим приоритетом) зарезервирована для использования драйвером. Размеры зоны устанавливаются на 1 пиксель меньше размера выходного изображения со всех сторон (см. также rf#2159). Для зоны включен сбор гистограмм и дополнительной статистики. Статистика используется контролами V4L2_CID_DO_WHITE_BALANCE, V4L2_CID_WHITE_BALANCE_TEMPERATURE, V4L2_CID_AUTO_WHITE_BALANCE.

Приложение может переопределить размеры зоны 3, но при этом вышеперечисленные контролы будут работать некорректно.

V4L2_CID_STAT_HIST0-3

Контрол только для чтения. Драйвер заполняет структуру struct vinc_stat_hist:

struct vinc_stat_hist {
    __u32 red[256];
    __u32 green[256];
    __u32 blue[256];
};
11 Описание полей структуры vinc_stat_hist
Поле Описание
red Гистограмма по красному цвету (Cr в случае YCbCr)
green Гистограмма по зелёному цвету (Y в случае YCbCr)
blue Гистограмма по синему цвету (Cb в случае YCbCr)

Значения определены только если включен блок сбора гистрограмм (см. V4L2_CID_STAT_ENABLE)

V4L2_CID_STAT_AF0-3

Контрол только для чтения. Драйвер заполняет структуру struct vinc_stat_af:

struct vinc_stat_af {
    __u32 hsobel;
    __u32 vsobel;
    __u32 lsobel;
    __u32 rsobel;
};
12 Описание полей структуры vinc_stat_af
Поле Описание
hsobel Значение фильтра Собеля по горизонтальному направлению
vsobel Значение фильтра Собеля по вертикальному направлению
lsobel Значение фильтра Собеля по диагонали слева сверху вправо вниз.
rsobel Значение фильтра Собеля по диагонали справа снизу влево вверх.

Значения определены только если включен блок автофокуса (см. V4L2_CID_STAT_ENABLE)

V4L2_CID_STAT_ADD0-3

Контрол только для чтения. Драйвер заполняет структуру struct vinc_stat_add:

struct vinc_stat_add {
    __u64 sum2_r;
    __u64 sum2_g;
    __u64 sum2_b;
    __u32 sum_r;
    __u32 sum_g;
    __u32 sum_b;
    __u8 min_r;
    __u8 min_g;
    __u8 min_b;
    __u8 max_r;
    __u8 max_g;
    __u8 max_b;
};
13 Описание полей структуры vinc_stat_add
Поле Описание
sum2_r Сумма квадратов по красному цвету (Cr в случае YCbCr)
sum2_g Сумма квадратов по зелёному цвету (Y в случае YCbCr)
sum2_b Сумма квадратов по синему цвету (Cb в случае YCbCr)
sum_r Сумма по красному цвету (Cr в случае YCbCr)
sum_g Сумма по зелёному цвету (Y в случае YCbCr)
sum_b Сумма по синему цвету (Cb в случае YCbCr)
min_r Минимальное значение по красному цвету (Cr в случае YCbCr)
min_g Минимальное значение по зелёному цвету (Y в случае YCbCr)
min_b Минимальное значение по синему цвету (Cb в случае YCbCr)
max_r Максимальное значение по красному цвету (Cr в случае YCbCr)
max_g Максимальное значение по зелёному цвету (Y в случае YCbCr)
max_b Максимальное значение по синему цвету (Cb в случае YCbCr)

Значения определены только если включен блок дополнительных статистических данных (см. V4L2_CID_STAT_ENABLE)

V4L2_CID_SENSOR_EXPOSURE_AUTO

Описание: Контрол разрешает работу алгоритма автоэкспозиции в сенсоре.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

При значении 1 включается автоэкспозиция в драйвере сенсора, контролы сенсора V4L2_CID_EXPOSURE, V4L2_CID_EXPOSURE_ABSOLUTE становятся неактивными.

При значении 0 автоэкспозиция в драйвере сенсора выключается, контролы сенсора V4L2_CID_EXPOSURE, V4L2_CID_EXPOSURE_ABSOLUTE доступны для изменения.

V4L2_CID_SENSOR_AUTOGAIN

Описание: Контрол разрешает работу алгоритма автоусиления в сенсоре.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

При значении 1 включается автоусиление в драйвере сенсора, контрол сенсора V4L2_CID_GAIN становится неактивным.

При значении 0 автоусиление в драйвере сенсора выключается, контрол сенсора V4L2_CID_GAIN доступен для изменения.

V4L2_CID_SENSOR_AUTO_WHITE_BALANCE

Описание: Контрол разрешает работу алгоритма автобаланса белого в сенсоре.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

При значении 1 включается автобаланс белого в драйвере сенсора.

При значении 0 автобаланс белого в драйвере сенсора выключается.

Примечание

Алгоритм баланса белого в драйвере vinc V4L2_CID_AUTO_WHITE_BALANCE всегда работает над изображением, которое пришло с сенсора, вне зависимости от V4L2_CID_SENSOR_AUTO_WHITE_BALANCE.

Приложение А. Контролы, реализованные в драйвере сенсора OV2715

V4L2_CID_AUTOGAIN

Описание: Контрол устанавливает режим автонастройки значения усиления.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

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

V4L2_CID_GAIN

Описание: Контрол позволяет изменять чувствительность матрицы сенсора.

Тип: __s32

Диапазон возможных значений: [0..95]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Значения усиления передаются в условных единицах. Диапазон значений контрола соответствует диапазону реального усиления [1..62]. Формула перевода условного усиления в реальное усиление:

gain = 2^{\lfloor value/16 \rfloor}*((value\bmod 16)/16+1),

где value — текущее значение контрола, gain — реальный коэффициент усиления.

Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.

14 Cоответствиe значений контрола V4L2_CID_GAIN реальному усилению
value gain value gain value gain value gain
0 1 1 1.0625 2 1.125 3 1.1875
4 1.25 5 1.3125 6 1.375 7 1.4375
8 1.5 9 1.5625 10 1.375 11 1.6875
12 1.75 13 1.8125 14 1.875 15 1.9375
16 2 17 1.125 18 2.25 19 2.375
20 2.5 21 2.625 22 2.75 23 2.875
24 3 25 3.125 26 3.25 27 3.375
28 3.5 29 3.625 30 3.75 31 3.875
32 4 33 4.25 34 4.5 35 4.75
36 5 37 5.25 38 5.5 39 5.75
40 6 41 6.25 42 6.5 43 6.75
44 7 45 7.25 46 7.5 47 7.75
48 8 49 8.5 50 9 51 9.5
52 10 53 10.5 54 11 55 11.5
56 12 57 12.5 58 13 59 13.5
60 14 61 14.5 62 15 63 15.5
64 16 65 17 66 18 67 19
68 20 69 21 70 22 71 23
72 24 73 25 74 26 75 27
76 28 77 29 78 30 79 31
80 32 81 34 82 36 83 38
84 40 85 42 86 44 87 46
88 48 89 50 90 52 91 54
92 56 93 58 94 60 95 62

V4L2_CID_EXPOSURE_AUTO

Описание: Контрол устанавливает режим автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Установка контрола в V4L2_EXPOSURE_AUTO(0) включает режим автоматической настройки экспозиции, установка в V4L2_EXPOSURE_MANUAL(1) — режим ручной настройки экспозиции. В режиме автоматической настройки значения контролов V4L2_CID_EXPOSURE и V4L2_CID_EXPOSURE_ABSOLUTE не могут быть изменены, а при их чтении выдаются текущие значения выдержки.

V4L2_CID_EXPOSURE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..17600]

Шаг между значениями: 1

Значение по умолчанию: 17280

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 1/16 строки. Минимальное значение контрола соответствует 1/16 строки. Значение по умолчанию соответствует количеству строк в кадре максимального размера, поддерживаемого сенсором (1080). Максимальное значение соответствует максимально возможному значению, превышающему размер кадра, при котором изображение стабильно. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_EXPOSURE_ABSOLUTE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..332]

Шаг между значениями: 1

Значение по умолчанию: 326

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 100 мкс. Максимальное значение и значение по умолчанию соответствует значениям контрола V4L2_CID_EXPOSURE для изображения в формате 1920х1080@30fps. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_HFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по горизонтали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно вертикальной оси (по горизонтали).

V4L2_CID_VFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по вертикали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно горизонтальной оси (по вертикали).

Приложение Б. Контролы, реализованные в драйвере сенсора OV7725

V4L2_CID_AUTOGAIN

Описание: Контрол устанавливает режим автонастройки значения усиления.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

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

V4L2_CID_GAIN

Описание: Контрол позволяет изменять чувствительность матрицы сенсора.

Тип: __s32

Диапазон возможных значений: [0..79]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Значения усиления передаются в условных единицах. Диапазон значений контрола соответствует диапазону реального усиления [1..31]. Формула перевода условного усиления в реальное усиление:

gain = 2^{\lfloor value/16 \rfloor}*((value\bmod 16)/16+1),

где value — текущее значение контрола, gain — реальный коэффициент усиления

Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.

15 Cоответствиe значений V4L2_CID_GAIN реальному усилению gain
value gain value gain value gain value gain
0 1 1 1.0625 2 1.125 3 1.1875
4 1.25 5 1.3125 6 1.375 7 1.4375
8 1.5 9 1.5625 10 1.375 11 1.6875
12 1.75 13 1.8125 14 1.875 15 1.9375
16 2 17 1.125 18 2.25 19 2.375
20 2.5 21 2.625 22 2.75 23 2.875
24 3 25 3.125 26 3.25 27 3.375
28 3.5 29 3.625 30 3.75 31 3.875
32 4 33 4.25 34 4.5 35 4.75
36 5 37 5.25 38 5.5 39 5.75
40 6 41 6.25 42 6.5 43 6.75
44 7 45 7.25 46 7.5 47 7.75
48 8 49 8.5 50 9 51 9.5
52 10 53 10.5 54 11 55 11.5
56 12 57 12.5 58 13 59 13.5
60 14 61 14.5 62 15 63 15.5
64 16 65 17 66 18 67 19
68 20 69 21 70 22 71 23
72 24 73 25 74 26 75 27
76 28 77 29 78 30 79 31

V4L2_CID_EXPOSURE_AUTO

Описание: Контрол устанавливает режим автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Установка контрола в V4L2_EXPOSURE_AUTO(0) включает режим автоматической настройки экспозиции, установка в V4L2_EXPOSURE_MANUAL(1) — режим ручной настройки экспозиции. В режиме автоматической настройки значения контролов V4L2_CID_EXPOSURE и V4L2_CID_EXPOSURE_ABSOLUTE не могут быть изменены, а их при чтении выдаются текущие значения выдержки.

V4L2_CID_EXPOSURE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..510]

Шаг между значениями: 1

Значение по умолчанию: 480

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 1 строке. Минимальное значение контрола соответствует 1 строке Значение по умолчанию соответствует количеству строк в кадре максимального размера, поддерживаемого сенсором (480). Максимальное значение соответствует максимально возможному значению, превышающему размер кадра, при котором изображение стабильно. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_EXPOSURE_ABSOLUTE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..166]

Шаг между значениями: 1

Значение по умолчанию: 156

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 100 мкс. Максимальное значение и значение по умолчанию соответствует значениям контрола V4L2_CID_EXPOSURE для изображения в формате 640х480@60fps. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_POWER_LINE_FREQUENCY

Описание: Контрол позволяет указать частоту мерцания освещения для подавления фликера в режиме автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..2]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

В зависимости от значения контрола устанавливается шаг, с которым может изменяться значение выдержки в режиме автонастройки выдержки, и максимальное количество шагов. Шаг определяется как количество строк кадра:

s = \frac{r h}{2f},

где s — шаг изменения выдержки, r — частота кадров, h — количество строк в кадре, f — частота мерцания освещения.

Максимальное количество шагов определяется в зависимости от частоты кадра:

s_{max} = \frac{2f}{r},

где s_{max} — максимальное количество шагов, f — частота мерцания освещения, r — частота кадров,

Поддерживаются следующие значения контрола:

  • V4L2_CID_POWER_LINE_FREQUENCY_DISABLED(0)

    Шаг изменения выдержки не зависит от частоты мерцания освещения;

  • V4L2_CID_POWER_LINE_FREQUENCY_50HZ(1)

    Шаг изменения выдержки определяется исходя из частоты мерцания освещения, равной 50 Гц (Европа);

  • V4L2_CID_POWER_LINE_FREQUENCY_60HZ(2)

    Шаг изменения выдержки определяется исходя из частоты мерцания освещения, равной 60 Гц (США).

V4L2_CID_HFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по горизонтали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно вертикальной оси (по горизонтали).

V4L2_CID_VFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по вертикали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно горизонтальной оси (по вертикали).

Примечание

При выполнении отображения по вертикали сенсором ov7725 меняется маска Байера.

Приложение В. Контролы, реализованные в драйвере сенсора OV5647

V4L2_CID_AUTOGAIN

Описание: Контрол устанавливает режим автонастройки значения усиления.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

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

V4L2_CID_GAIN

Описание: Контрол позволяет изменять чувствительность матрицы сенсора.

Тип: __s32

Диапазон возможных значений: [1..256]

Шаг между значениями: 1

Значение по умолчанию: 32

Алгоритм:

Значения усиления передаются в условных единицах. Диапазон значений контрола соответствует диапазону реального усиления [1..256]. Формула перевода условного усиления в реальное усиление:

gain = value,

где value — текущее значение контрола, gain — реальный коэффициент усиления.

Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.

V4L2_CID_EXPOSURE_AUTO

Описание: Контрол устанавливает режим автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Установка контрола в V4L2_EXPOSURE_AUTO(0) включает режим автоматической настройки экспозиции, установка в V4L2_EXPOSURE_MANUAL(1) — режим ручной настройки экспозиции. В режиме автоматической настройки значения контролов V4L2_CID_EXPOSURE и V4L2_CID_EXPOSURE_ABSOLUTE не могут быть изменены, а при их чтении выдаются текущие значения выдержки.

V4L2_CID_EXPOSURE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..17600]

Шаг между значениями: 1

Значение по умолчанию: 17280

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 1/16 строки. Минимальное значение контрола соответствует 1/16 строки. Значение по умолчанию соответствует количеству строк в кадре размера 1920х1080, поддерживаемого драйвером сенсора. Максимальное значение соответствует максимально возможному значению, превышающему размер кадра, при котором изображение стабильно. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_EXPOSURE_ABSOLUTE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..332]

Шаг между значениями: 1

Значение по умолчанию: 326

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 100 мкс. Максимальное значение и значение по умолчанию соответствует значениям контрола V4L2_CID_EXPOSURE. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

Приложение Д. Контролы, реализованные в драйвере сенсора OV2643

V4L2_CID_AUTOGAIN

Описание: Контрол устанавливает режим автонастройки значения усиления.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

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

V4L2_CID_GAIN

Описание: Контрол позволяет изменять чувствительность матрицы сенсора.

Тип: __s32

Диапазон возможных значений: [1..16]

Шаг между значениями: 1

Значение по умолчанию: 1

Алгоритм:

Значения усиления передаются в условных единицах. Диапазон значений контрола соответствует диапазону реального усиления [1..16]. Формула перевода условного усиления в реальное усиление:

gain = value,

где value — текущее значение контрола, gain — реальный коэффициент усиления.

Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.

V4L2_CID_EXPOSURE_AUTO

Описание: Контрол устанавливает режим автонастройки значения выдержки.

Тип: enum

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

Установка контрола в V4L2_EXPOSURE_AUTO(0) включает режим автоматической настройки экспозиции, установка в V4L2_EXPOSURE_MANUAL(1) — режим ручной настройки экспозиции. В режиме автоматической настройки значения контролов V4L2_CID_EXPOSURE и V4L2_CID_EXPOSURE_ABSOLUTE не могут быть изменены, а при их чтении выдаются текущие значения выдержки.

V4L2_CID_EXPOSURE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..1227]

Шаг между значениями: 1

Значение по умолчанию: 128

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 1 строке. Минимальное значение контрола соответствует 1 строке. Значение по умолчанию позволяет получить корректное изображение при дневном свете. Максимальное значение соответствует максимально возможному значению, превышающему размер кадра (1600x1200), при котором изображение стабильно. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_EXPOSURE_ABSOLUTE

Описание: Контрол позволяет изменять значение выдержки сенсора.

Тип: __s32

Диапазон возможных значений: [1..665]

Шаг между значениями: 1

Значение по умолчанию: 69

Алгоритм:

Значение выдержки сенсора задается в единицах, равных 100 мкс. Максимальное значение и значение по умолчанию соответствует значениям контрола V4L2_CID_EXPOSURE. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол V4L2_CID_EXPOSURE_AUTO установлен в 0). При чтении контрола будет выдано текущее значение выдержки.

V4L2_CID_HFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по горизонтали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно вертикальной оси (по горизонтали).

V4L2_CID_VFLIP

Описание: Контрол позволяет выполнить зеркальное отображение по вертикали.

Тип: bool

Диапазон возможных значений: [0..1]

Шаг между значениями: 1

Значение по умолчанию: 0

Алгоритм:

При включении контрола изображение отображается зеркально относительно горизонтальной оси (по вертикали).