Драйвер ISP VPIN/VINC

Введение

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

../../_images/vinc-driver.png

Рис. 8 Диаграмма использования драйвера 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

  • Кэшируемые DMA буферы для оптимизации доступа при обработке на CPU — требуется установка параметра модуля cacheable=1

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

Инициализация 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 устанавливает последнее использованное разрешение.

Обработка ошибок

В случае возникновения ошибок при получении видео с сенсора драйвер печатает сообщение об ошибке (см. таблицу Таблица 11) и восстанавливает нормальную работу ISP, однако в этом случае принимаемый кадр повреждается. Поврежденные кадры помечаются флагом V4L2_BUF_FLAG_ERROR и могут быть исключены при обработке видеопотока.

Таблица 11 Сообщения об ошибках при приёме видео

Сообщение

Описание

Short frame/line

От сенсора принята короткая строка или недостаточное количество строк

DMA overflow

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

Bad pixel/line count

Неправильные значения счетчиков пикселей и строк [1]. При возникновении ошибки выполняется очистка FIFO, иначе происходит сдвиг изображения на последующих кадрах (см. также rf#14541).

Управление блоком 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_{BL})+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}, \\

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

Матрицы и вектора перевода цветовых пространств приведены в описании блока 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} - M_{YCbCr} \times M_{WB} \times V_{BL}) + \\
&+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, V4L2_CID_BLACK_LEVEL_CORR и V4L2_CID_WHITE_BALANCE_CC.

Диаграмма состояний кластера cc представлена на рисунке Рис. 9. Состояние кластера определяется флагами контролов и значением контрола V4L2_CID_CC_ENABLE (на диаграмме CC_ENABLE, наличие флагов указано в квадратных скобках). STD auto обозначает группу стандартных контролов, управляемых автоконтролом, включенном в данном состоянии кластера, CC_STD non auto — остальные стандартные контролы кластера CC. CC_CALIB обозначает калибровочные контролы V4L2_CID_BLACK_LEVEL_CORR и V4L2_CID_WHITE_BALANCE_CC. Нестандартный контрол V4L2_CID_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_ENABLE. Для обозначения переходов между состояниями на диаграмме используются следующие обозначения:

  • «set CC_STD» — изменение значения стандартных контролов

  • «set CC_CALIB» — изменение значения калибровочных контролов

  • «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

Рис. 9 Диаграмма состояний кластера сс

При загрузке драйвера кластер 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.5041 & 0.0979 & 0.2568\\ -0.291 & 0.4392 & -0.1482\\
-0.3678 & -0.0714 & 0.4392 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 256\\2048\\2048\end{pmatrix}

  • 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.5041 & 0.0979 & 0.2568\\ -0.291 & 0.4392 & -0.1482\\
-0.3678 & -0.0714 & 0.4392 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 256\\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.6142 & 0.062 & 0.1826\\ -0.3386 & 0.4392 & -0.1006\\
-0.3989 & -0.0403 & 0.4392 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 256\\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.5823 & 0.0509 & 0.2256\\ -0.3166 & 0.4392 & -0.1227\\
-0.4039 & -0.0353 & 0.4392 \end{pmatrix};\ V_{CT} = \begin{pmatrix} 256\\2048\\2048\end{pmatrix}

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

    M_{CT} = \begin{pmatrix} 0.678 & 0.0593 & 0.2627\\ -0.3604 & 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} 0.8588 & -0.2956 & -0.6133\\ 0.8588 & 1.5218 & 0\\
0.8588 & 0 & 1.2041 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2117.3645\\-2860.7187\\-2209.9366\end{pmatrix}

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

    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_601, сжатый диапазон:

    M_{CT} = \begin{pmatrix} 0.8588 & -0.2956 & -0.6133\\ 0.8588 & 1.5218 & 0\\
0.8588 & 0 & 1.2041 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 2117.3645\\-2860.7187\\-2209.9366\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} 0.8588 & -0.1609 & -0.402\\ 0.8588 & 1.5936 & 0\\
0.8588 & 0 & 1.3525 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1408.8492\\-3007.7603\\-2513.8694\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} 0.8588 & -0.1413 & -0.4907\\ 0.8588 & 1.6158 & 0\\
0.8588 & 0 & 1.2664 \end{pmatrix};\
V_{CT} = \begin{pmatrix} 1550.3639\\-3053.1391\\-2337.6306\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 представлена на рисунке Рис. 10. Состояние кластера определяется флагами контролов 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

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

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

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

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

Диаграмма состояний кластера ae представлена на рисунке Рис. 11. На диаграмме отображено поведение контролов V4L2_CID_EXPOSURE_AUTO, V4L2_CID_SENSOR_EXPOSURE_AUTO и V4L2_CID_AE_TARGET_LUM. Контрол 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

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

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

Таблица 12 Поддерживаемые 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_CREATE_BUFS

Создать буферы

VIDIOC_REQBUFS

Запросить буферы

VIDIOC_STREAMON

Включить приём видео

VIDIOC_STREAMOFF

Выключить приём видео

VIDIOC_ENUM_FMT

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

  • V4L2_PIX_FMT_BGR32

  • V4L2_PIX_FMT_M420

  • V4L2_PIX_FMT_NV12

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_CREATE_BUFS

Подсистема 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 будет передавать контрол драйверу сенсора.

Таблица 13 Поддерживаемые стандартные контролы

#

Название контрола

Расширенный контрол

Тип данных

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

Минимальное значение

Максимальное значение

Описание

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

Включение/выключение и выбор тестового шаблона

Таблица 14 Поддерживаемые нестандартные [2] контролы

#

Название

Тип данных

Описание

1

V4L2_CID_BAD_CORRECTION_ENABLE

bool

Вкл/выкл блока коррекции битых пикселей

2

V4L2_CID_BAD_PIXELS

void*

Карта битых пикселей

3

V4L2_CID_BAD_ROWS

__u16*

Битые строки

4

V4L2_CID_BAD_COLS

__u16*

Битые столбцы

5

V4L2_CID_GAMMA_CURVE_ENABLE

bool

Вкл/выкл блока гамма-коррекции

6

V4L2_CID_GAMMA_CURVE

void*

Гамма-коррекция

7

V4L2_CID_CC_ENABLE

bool

Вкл/выкл коррекции цвета

8

V4L2_CID_CC

void*

Коррекция цвета

9

V4L2_CID_CT_ENABLE

bool

Вкл/выкл преобразования цвета

10

V4L2_CID_CT

void*

Преобразование цвета

11

V4L2_CID_DR_ENABLE

bool

Вкл/выкл адаптации динамического диапазона

12

V4L2_CID_DR

__u16*

Адаптация динамического диапазона

13

V4L2_CID_STAT_ENABLE

__s32

Вкл/выкл сбора статистики

14

V4L2_CID_STAT_AF_COLOR

__s32

Компонента автофокуса

15

V4L2_CID_STAT_AF_TH

__s32

Пороговое значение автофокуса

16

V4L2_CID_STAT_ZONE0

void*

Настройка зоны 0

17

V4L2_CID_STAT_ZONE1

void*

Настройка зоны 1

18

V4L2_CID_STAT_ZONE2

void*

Настройка зоны 2

19

V4L2_CID_STAT_ZONE3

void*

Настройка зоны 3

20

V4L2_CID_STAT_HIST0

void*

Гистограммы по зоне 0

21

V4L2_CID_STAT_HIST1

void*

Гистограммы по зоне 1

22

V4L2_CID_STAT_HIST2

void*

Гистограммы по зоне 2

23

V4L2_CID_STAT_HIST3

void*

Гистограммы по зоне 3

24

V4L2_CID_STAT_AF0

void*

Значения автофокуса по зоне 0

25

V4L2_CID_STAT_AF1

void*

Значения автофокуса по зоне 1

26

V4L2_CID_STAT_AF2

void*

Значения автофокуса по зоне 2

27

V4L2_CID_STAT_AF3

void*

Значения автофокуса по зоне 3

28

V4L2_CID_STAT_ADD0

void*

Дополнительная статистика по зоне 0

29

V4L2_CID_STAT_ADD1

void*

Дополнительная статистика по зоне 1

30

V4L2_CID_STAT_ADD2

void*

Дополнительная статистика по зоне 2

31

V4L2_CID_STAT_ADD3

void*

Дополнительная статистика по зоне 3

32

V4L2_CID_SENSOR_EXPOSURE_AUTO

bool

Разрешение автоэкспозиции сенсора

33

V4L2_CID_SENSOR_AUTOGAIN

bool

Разрешение автоусиления сенсора

34

V4L2_CID_SENSOR_AUTO_WHITE_BALANCE

bool

Разрешение авто баланса белого сенсора

35

V4L2_CID_BLACK_LEVEL_CORR

__s32

Коррекция уровня черного

36

V4L2_CID_WHITE_BALANCE_CC

void*

Матрицы цветокоррекции для различных цветовых температур

37

V4L2_CID_AE_TARGET_LUM

__s32

Целевая яркость автоэкспозиции

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

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

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.

  • вычисление матрицы M_{WBCC} с помощью линейной интерполяции матриц коэффициентов цветности coeff из контрола V4L2_CID_WHITE_BALANCE_CC исходя из отношения коэффициентов усиления красного и синего gain\_r'/gain\_b'=Kr/Kb.

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

    M_{WB} = M_{WBCC} * \begin{pmatrix} K{r}&0&0\\
0&1&0\\
0&0&K{b}\end{pmatrix},

    для данных в формате YCbCr матрица M_{WB} равна единичной.

  • установку контролов 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

Алгоритм:

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

  • вычисление коэффициентов Kr, Kb с помощью линейной интерполяции значений gain_r, gain_b из контрола V4L2_CID_WHITE_BALANCE_CC для заданной цветовой температуры.

  • формирование матрицы M_{WB} для новых значений Kr, Kb (см. 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, при выходе за пределы диапазона значение ограничивается нижней или верхней границей диапазона.

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

    brightness = 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 $brightness$ > $EXPmax$},\\
brightness&  \text{if $brightness$ <= $EXPmax$}.
\end{cases}

    gain = \begin{cases}
brightness / EXPmax&  \text{if $brightness$ > $EXPmax$},\\
1&  \text{if $brightness$ <= $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

Таблица 15 Возможные значения контрола

Значение

Название

Описание

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;
};
Таблица 16 Описание полей структуры vinc_cc

Поле

Описание

coeff

Коэффициенты преобразования цветности

offset

Смещение цветовых компонент

scaling

Коэффициент масштабирования

V4L2_CID_BLACK_LEVEL_CORR

Драйвер устанавливает значение уровня черного.

Тип: __s32

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

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

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

Алгоритм:

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

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

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

V4L2_CID_WHITE_BALANCE_CC

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

struct vinc_wb_cc {
    __u16 temp[5];
    __u16 gain_r[5];
    __u16 gain_b[5];
    __s16 coeff[5][9];
};
Таблица 17 Описание полей структуры vinc_wb_cc

Поле

Описание

temp

Массив значений цветовых температур

gain_r

Коэффициент усиления красного для каждой температуры

gain_b

Коэффициент усиления синего для каждой температуры

coeff

Коэффициенты преобразования цветности для каждой температуры

Массивы gain_r, gain_b и coeff хранят числа с фиксированной точкой с выделением 12 бит под дробную часть. Данные для температуры с нулевым значением игнорируются. По умолчанию структура заполнена нулями — в этом случае формируется единичная матрица M_{WBCC} (см. V4L2_CID_DO_WHITE_BALANCE).

Алгоритм:

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

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

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

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

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;
};
Таблица 18 Описание полей структуры 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];
};
Таблица 19 Описание полей структуры 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;
};
Таблица 20 Описание полей структуры 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;
};
Таблица 21 Описание полей структуры 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_AE_TARGET_LUM

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

Тип: __s32

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

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

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

Алгоритм:

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

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 включен). При чтении контрола будет выдано текущее значение усиления.

Таблица 22 Соответствие значений контрола 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 для изображения в формате 1920x1080@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 включен). При чтении контрола будет выдано текущее значение усиления.

Таблица 23 Соответствие значений 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 для изображения в формате 640x480@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 строки. Значение по умолчанию соответствует количеству строк в кадре размера 1920x1080, поддерживаемого драйвером сенсора. Максимальное значение соответствует максимально возможному значению, превышающему размер кадра, при котором изображение стабильно. Значение контрола не может быть изменено, если включен режим автонастройки выдержки (контрол 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

Алгоритм:

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

Приложение Д. Поддержка OV2718

Поддерживаемые разрешения сенсора OV2718:

  • 1920x1080@30fps, 12-bit, 4 MIPI CSI lanes.

  • 1280x720@30fps, 12-bit, 4 MIPI CSI lanes.

V4L2_CID_GAIN

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

Тип: __s32

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

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

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

Алгоритм:

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

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

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

Таблица 24 Соответствие значений контрола 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

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

Тип: __s32

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

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

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

Алгоритм:

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

V4L2_CID_EXPOSURE_ABSOLUTE

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

Тип: __s32

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

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

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

Алгоритм:

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

V4L2_CID_HFLIP

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

Тип: bool

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

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

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

Алгоритм:

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

V4L2_CID_VFLIP

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

Тип: bool

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

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

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

Алгоритм:

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

V4L2_CID_RED_BALANCE

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

Тип: __s32

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

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

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

Алгоритм:

В сенсоре устанавливается коэффициент усиления красного цвета по формуле:

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

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

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

V4L2_CID_BLUE_BALANCE

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

Тип: __s32

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

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

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

Алгоритм:

В сенсоре устанавливается коэффициент усиления синего цвета по формуле:

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

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

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