Драйвер V4L2 vinc ISP VPIN/VINC 1892ВМ14Я. Руководство программиста¶
Введение¶
Драйвер vinc предназначен для получения видео с видео-сенсоров и блока ISP VPIN/VINC 1892ВМ14Я. Драйвер предоставляет стандартный интерфейс V4L2 Video Capture (см Video for Linux 2). Драйвер vinc использует подсистему soc_camera в качестве интерфейса для работы с сенсором. На рисунке 13 представлена диаграмма использования драйвера 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¶
При инициализации устройства драйвер выполняет:
Печатает версию драйвера.
Устанавливает поле CMOS_CTR.CMOS_RESET блока VINC в 0.
Читает из DeviceTree значение свойства «elvees,pixel-clock-divider», определяющего во сколько раз частота синхросигнала пикселей сенсора должна быть меньше частоты синхросигнала блока VINC.
Читает из DeviceTree свойство «elvees,pixel-clock-over-fsync». При наличии данного свойства в качестве синхросигнала для сенсора будет использоваться вывод FSYNCO_0, в отсутствие данного свойства — вывод PCLKO_0.
Читает из DeviceTree граф, описывающий связи портов VINC с удаленными устройствами (сенсорами). Каждый порт графа связан с одним удаленным устройством, интерфейс подключения этого устройства определяется свойством «elvees,ifacenum». Это свойство может принимать одно из четырех значений: PInterface0 (0), PInterface1 (1), SInterface0(2), SInterface1(3).
Для удаленных устройств, подключенных к параллельному порту (PInterface0 или PInterface1), может быть определено свойство «elvees,pport-low-bits». Наличие данного свойства указывает, что сенсор, подключенный к параллельному порту, имеет разрядность компонентов пикселя меньше 12 и они подключены к младшим разрядам шины данных блока VINC. Эта информация будет учитываться при обработке данных, в частности при выполнении преобразования YCbCr->RGB.
Вычисляет и записывает значения полей регистров:
- В отсутствие свойства «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. Драйвер выполняет:
- Включение бита CMOS0_CTR.FSYNC_ENAB_EDGE.
- Запись значения 1 в регистры CMOS0_TIMER_HIGH и CMOS0_TIMER_LOW, что обеспечивает деление частоты PCLKO на 2 (минимально возможный коэффициент деления).
- Запись в поле CMOS0_CTR.CLK_DIV значения свойства «elvees,pixel-clock-divider», деленного на четыре.
Включает бит 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 устанавливает последнее использованное разрешение.
Обработка ошибок¶
В случае возникновения ошибок при получении видео с сенсора драйвер печатает сообщение об
ошибке (см. таблицу 4) и восстанавливает нормальную работу ISP, однако
в этом случае принимаемый кадр повреждается. Поврежденные кадры помечаются флагом
V4L2_BUF_FLAG_ERROR
и могут быть исключены при обработке видеопотока.
Сообщение | Описание |
---|---|
Short frame/line | От сенсора принята короткая строка или недостаточное количество строк |
DMA overflow | Переполнилось FIFO канала DMA, осуществляющего запись данных в память. Происходит из-за недостаточной пропускной способности подсистемы памяти или задержках при записи данных. |
Bad pixel/line count | Неправильные значения счетчиков пикселей и строк [1]. При возникновении ошибки выполняется очистка FIFO, иначе происходит сдвиг изображения на последующих кадрах (см. также rf#14541). |
[1] | Причина неправильных значений счетчиков пикселей и строк в отсутствии ошибки DMA overflow неизвестна. Возможно, прерывание DMA overflow не вырабатывается из-за аппаратной ошибки. |
Управление блоком Color Correction (CC)¶
Расчет матрицы коэффициентов и вектора смещения¶
Блок Color Correction выполняет преобразование пикселей входного изображения по формуле:
(1)¶
где — матрица коэффициентов цветности,
— вектор смещений,
I — трёхкомпонентный вектор входного пикселя, O — трёхкомпонентный вектор выходного пикселя.
Блок Color Correction может принимать на вход изображения в форматах RGB и YCbCr. При входном формате RGB, вычисление пикселей выполняется по формуле:
(2)¶
При входном формате YCbCr, вычисление пикселей выполняется по формуле:
(3)¶
где используются следующие обозначения:
- — вектор смещений, определяемый контролом V4L2_CID_BLACK_LEVEL_CORR
- — вектор смещений, определяемый контролом 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_WHITE_BALANCE_CC
- — матрица перевода формата YCbCr в RGB
- — матрица перевода формата RGB в YCbCr
- — вектор смещений для перевода формата YCbCr в RGB
- — вектор смещений для перевода формата RGB в YCbCr
- — вектор смещений (2048; 0; 0)
- — векторы смещений, определяемые контролом V4L2_CID_COLORFX
Матрицы и вектора перевода цветовых пространств приведены в описании блока Color Transformation. Для входного формата YCbCr баланс белого не выполняется.
Приводя формулу (2) к виду (1), для входного формата RGB получаем:
Приводя формулу (3) к виду (1), для входного формата YCbCr получаем:
где E — единичная матрица.
Во избежании ошибок при переполнении в блоке Color Correction вводятся ограничения на значения контролов. Если при расчете коэффициентов матрицы и вектора смещений не выполняется одно из условий:
то драйвер возвращает ошибку ERANGE и значения регистров , и Scaling не изменяются (обозначения регистров приведены согласно спецификации VINC). В остальных случаях значения регистров блока рассчитываются по формулам:
где — максимальный модуль коэффициентов матрицы .
где i — целое число и принимает значения от 0 до 8.
где 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
представлена на рисунке 14. Состояние
кластера определяется флагами контролов и значением контрола 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)
При загрузке драйвера кластер cc
устанавливается в исходное состояние, отмеченное
на диаграмме двойной линией. В этом состоянии блок Color Correction включен и
в регистры блока записаны значения, обеспечивающие трансляцию изображения с входа на выход
без преобразования:
Переходы между состояниями происходят при изменении значения одного из контролов. Значения контролов V4L2_CID_СС и V4L2_CID_СС_ENABLE могут быть изменены одновременно.
Управление блоком Color Transformation (CT)¶
Блок Color Transformation изменяет формат входного потока по формуле:
где — матрица коэффициентов цветности,
— вектор смещений,
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, в зависимости от функций перевода и типа диапазона выходного изображения, значения и изменяются следующим образом:
V4L2_YCBCR_ENC_SYCC, сжатый диапазон:
V4L2_YCBCR_ENC_SYCC, полный диапазон:
V4L2_YCBCR_ENC_601, сжатый диапазон:
V4L2_YCBCR_ENC_601, полный диапазон:
V4L2_YCBCR_ENC_709, сжатый диапазон:
V4L2_YCBCR_ENC_709, полный диапазон:
V4L2_YCBCR_ENC_BT2020, сжатый диапазон:
V4L2_YCBCR_ENC_BT2020, полный диапазон:
При переводе изображения из формата YCbCr в RGB, в зависимости от функций перевода и типа диапазона выходного изображения, значения и изменяются следующим образом:
V4L2_YCBCR_ENC_SYCC, сжатый диапазон:
V4L2_YCBCR_ENC_SYCC, полный диапазон:
V4L2_YCBCR_ENC_601, сжатый диапазон:
V4L2_YCBCR_ENC_601, полный диапазон:
V4L2_YCBCR_ENC_709, сжатый диапазон:
V4L2_YCBCR_ENC_709, полный диапазон:
V4L2_YCBCR_ENC_BT2020, сжатый диапазон:
V4L2_YCBCR_ENC_BT2020, полный диапазон:
При выполнении преобразования из YCbCr в RGB будет учитываться наличие свойства «elvees,pport-low-bits», прочитанного из DeviceTree. При наличии этого свойства все коэффициенты цветности будут умножены на 4, обеспечивая сдвиг цветовых компонентов влево на 2 разряда.
Если сдвига влево на 2 разряда недостаточно для получения полного диапазона (при разрядности входных данных меньше 10), требуется коррекция значений вектора смещения. Значения вектора смещений, приведенные выше, рассчитывались исходя из разрядности компонентов n=12. Если разрядность входных цветовых компонентов m, значения вектора смещения при наличии свойства «elvees,pport-low-bits» должны быть пересчитаны как , где i принимает значения от 0 до 2.
Значения регистров блока Color Transformation рассчитываются по формулам (обозначения регистров приведены согласно спецификации VINC):
где — максимальный модуль коэффициентов матрицы .
где i — целое число и принимает значения от 0 до 8.
где i — целое число и принимает значения от 0 до 2.
Управление блоком Gamma Correction (GC)¶
Блок Gamma Correction выполняет табличное преобразование входного изображения. Каждому из трех цветовых компонентов пикселя (R, G, B) входного изображения соответствует таблица из 4096 элементов. Преобразование выполняется по формуле:
где используются следующие обозначения:
- C — принимает одно из значений R, G, B;
- — яркость цветового компонента соответствующего входного пикселя;
- — яркость цветового компонента соответствующего выходного пикселя;
- — таблица преобразования для яркости цветового компонента.
Управление блоком Gamma Correction осуществляется с помощью контролов кластера gamma
.
Кластер gamma
включает четыре контрола: стандартные контролы V4L2_CID_GAMMA,
V4L2_CID_BACKLIGHT_COMPENSATION, нестандартные контролы
V4L2_CID_GAMMA_CURVE и V4L2_CID_GAMMA_ENABLE.
Диаграмма состояний кластера gamma
представлена на рисунке 15.
Состояние кластера определяется флагами контролов 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 в ноль
При загрузке драйвера кластер 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,
- V4L2_CID_AE_TARGET_LUM.
Диаграмма состояний кластера ae
представлена на рисунке 16. На диаграмме
отображено поведение контролов 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.
Поддерживаемые 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_S_CTRL¶
При каждой записи контрола подсистема V4L2 вначале вызывает функцию try_ctrl()
.
Это гарантирует, что обработчик s_ctrl()
получает уже проверенное значение.
Поддерживаемые контролы описаны в главе Контролы.
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_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 будет передавать контрол драйверу сенсора.
# | Название контрола | Расширенный контрол | Тип данных | Значение по умолчанию | Минимальное значение | Максимальное значение | Описание |
---|---|---|---|---|---|---|---|
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 | Включение/выключение и выбор тестового шаблона |
# | Название | Тип данных | Номер [3] | Описание |
---|---|---|---|---|
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 | Разрешение авто баланса белого сенсора |
35 | V4L2_CID_BLACK_LEVEL_CORR | __s32 | 0x1022 | Коррекция уровня черного |
36 | V4L2_CID_WHITE_BALANCE_CC | void* | 0x1023 | Матрицы цветокоррекции для различных цветовых температур |
37 | V4L2_CID_AE_TARGET_LUM | __s32 | 0x1024 | Целевая яркость автоэкспозиции |
[2] | Все нестандартные контролы являются расширенными. |
[3] | Номер указан относительно V4L2_CID_CAMERA_CLASS_BASE. |
Стандартные контролы¶
Обозначения в описании стандартных контролов:
max_v – количество возможных значений компоненты пикселя.
V4L2_CID_BRIGHTNESS¶
Описание: Контрол позволяет регулировать яркость изображения.
Тип: __s32
Диапазон возможных значений: [-2048..2048]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
Контрол изменяет значение яркости изображения на заданную величину. При установке контрола рассчитывается вектор и обновляются значения коэффициентов блока Color Correction:
где value — текущее значение контрола
V4L2_CID_CONTRAST¶
Описание: Контрол позволяет изменить контрастность изображения.
Тип: __s32
Диапазон возможных значений: [0..255]
Шаг между значениями: 1
Значение по умолчанию: 128
Алгоритм:
Контрол умножает значение яркости изображения на заданную величину. При установке контрола рассчитывается матрица и обновляются значения коэффициентов блока Color Correction:
где и value — текущее значение контрола.
V4L2_CID_SATURATION¶
Описание: Контрол позволяет изменить насыщенность изображения.
Тип: __s32
Диапазон возможных значений: [0..255]
Шаг между значениями: 1
Значение по умолчанию: 128
Алгоритм:
Контрол умножает значения цветности изображения на заданную величину. При установке контрола рассчитывается матрица и обновляются значения коэффициентов блока Color Correction:
где и value — текущее значение контрола.
V4L2_CID_HUE¶
Описание: Контрол позволяет изменить тон изображения.
Тип: __s32
Диапазон возможных значений: [-128..127]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
Контрол выполняет поворот вектора цветности на заданный угол. При установке контрола рассчитывается матрица и обновляются значения коэффициентов блока Color Correction:
где и value — текущее значение контрола.
V4L2_CID_GAMMA¶
Описание: Контрол позволяет выполнить гамма-коррекцию изображения с использованием степенной функции.
Тип: __s32
Диапазон возможных значений: [1..31]
Шаг между значениями: 1
Значение по умолчанию: 16
Алгоритм:
Контрол задает параметр для вычисления степени передаточной функции при гамма-коррекции. Значение степени вычисляется как:
где value — текущее значение контрола.
Значение по умолчанию соответствует = 1. Преобразование выполняется в блоке Gamma Correction (GC). Для настройки преобразования требуется задать три таблицы из 4096 значений, по одной для каждого цветового компонента пикселя. Таблицы одинаковы для всех цветовых компонентов. Формирование таблицы осуществляется следующим образом: для каждого значения цветового компонента входного пикселя в диапазоне 0-4095 вычисляется значение цветового компонента выходного пикселя по формуле:
Полученные таблицы записываются в ячейки каждой из трех памятей коэффициентов блока Gamma Correction.
V4L2_CID_COLOR_KILLER¶
Описание: Контрол позволяет перевести изображение в градации серого цвета.
Тип: bool
Диапазон возможных значений: [0..1]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
При включении контрол обнуляет значение цветовых компонент изображения. При включении контрола рассчитывается матрица и обновляются значения коэффициентов блока Color Correction:
где value — текущее значение контрола.
V4L2_CID_COLORFX¶
Описание: Контрол позволяет накладывать на изображение различные цветовые эффекты.
Тип: enum
Диапазон возможных значений: [0..15]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
В зависимости от значения контрола выбираются значения матриц и векторов . При этом обновляются значения коэффициентов блока Color Correction. Цветовой эффект зависит от значения, принимаемого контролом. Если контрол выставлен в не поддерживаемое значение, то он переводится в предыдущее поддерживаемое. Если в описании эффекта нет упоминания матрицы или вектора, то они принимают значения по умолчанию:
Список значений поддерживаемых эффектов и их описание:
V4L2_COLORFX_NONE
Эффект отсутствует. Это исходное значение контрола. Матрицы и вектор смещения выставляются в значения по умолчанию;
V4L2_COLORFX_BW
Изображение переводится в черно-белое. Матрица и вектор принимают значения:
V4L2_COLORFX_SEPIA
К изображению применяется эффект сепии. Матрица принимает значение:
V4L2_COLORFX_NEGATIVE
Изображение переводится в негатив. Матрица и вектор принимают значения:
V4L2_COLORFX_VIVID
В изображении насыщаются цвета. Матрица и вектор принимают значения:
V4L2_COLORFX_AQUA
Изображение переводится в холодные тона. Матрица принимает значение:
V4L2_COLORFX_ANTIQUE
К изображению применяется эффект старого фото. Матрица принимает значение:
V4L2_COLORFX_SET_CBCR
В изображении компоненты Cb и Cr пикселей заменяются на значения Cb_{new} и Cr_{new}, заданные контролом V4L2_CID_COLORFX_CBCR. Матрица и вектор принимают значения:
V4L2_CID_COLORFX_CBCR¶
Описание: Контрол позволяет изменять компоненты Cb и Cr пикселей изображения на фиксированные значения, при использовании эффекта V4L2_COLORFX_SET_CBCR контрола V4L2_CID_COLORFX.
Тип: __s32
Диапазон возможных значений: [0..65535]
Значение по умолчанию: 0
Алгоритм:
При установке контрола драйвер выполняет:
- изменение переменных и , где value — значение контрола.
- пересчёт вектора контрола V4L2_CID_COLORFX и обновление значения коэффициентов блока Color Correction.
V4L2_CID_DO_WHITE_BALANCE¶
Описание: Контрол выполняет единовременную автонастройку баланса белого цвета изображения.
Тип: button
Диапазон возможных значений: -
Шаг между значениями: -
Значение по умолчанию: -
Алгоритм:
Преобразование выполняется только над данными в формате RGB.
При установке контрола драйвер выполняет:
чтение значений суммы по красному, синему и зелёному цвету sumR, sumG, sumB из блока статистики (STT).
вычисление в соответствии с алгоритмом «Серый мир» коэффициентов баланса красного цвета и синего цвета .
вычисление матрицы с помощью линейной интерполяции матриц коэффициентов цветности coeff из контрола V4L2_CID_WHITE_BALANCE_CC исходя из отношения коэффициентов усиления красного и синего .
формирование матрицы по формуле:
для данных в формате YCbCr матрица равна единичной.
установку контролов V4L2_CID_RED_BALANCE и V4L2_CID_BLUE_BALANCE в соответствии с рассчитанными коэффициентами и .
установку флагов WRITE_ONLY и EXECUTE_ON_WRITE для контрола V4L2_CID_WHITE_BALANCE_TEMPERATURE.
обновление значения коэффициентов блока Color Correction.
V4L2_CID_RED_BALANCE¶
Описание: Контрол устанавливает баланс красного цвета в изображении.
Тип: __s32
Диапазон возможных значений: [-112..112]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
При установке контрола драйвер выполняет:
- вычисление коэффициента баланса красного цвета по формуле:
где value — текущее значение контрола, Kg — коэффициент баланса зеленого цвета.
Установка value < 0 приводит к установке Kr < Kg, минимальное значение value = -112 соответствует . Установка value > 0 приводит к установке Kr > Kg, максимальное значение value = 112 соответствует . При value = 0 Kr = Kg.
- формирование матрицы для нового значения Kr (см. V4L2_CID_DO_WHITE_BALANCE).
- установку флагов WRITE_ONLY и EXECUTE_ON_WRITE для контрола V4L2_CID_WHITE_BALANCE_TEMPERATURE.
- обновление значения коэффициентов блока Color Correction.
V4L2_CID_BLUE_BALANCE¶
Описание: Контрол устанавливает баланс синего цвета в изображении.
Тип: __s32
Диапазон возможных значений: [-112..112]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
При установке контрола драйвер выполняет:
- вычисление коэффициента баланса синего цвета по формуле:
где value — текущее значение контрола, Kg — коэффициент баланса зеленого цвета.
Установка value < 0 приводит к установке Kb < Kg, минимальное значение value = -112 соответствует . Установка value > 0 приводит к установке Kb > Kg, максимальное значение value = 112 соответствует . При value = 0 Kb = Kg.
- формирование матрицы для нового значения Kb (см. V4L2_CID_DO_WHITE_BALANCE).
- установку флагов WRITE_ONLY и EXECUTE_ON_WRITE для контрола V4L2_CID_WHITE_BALANCE_TEMPERATURE.
- обновление значения коэффициентов блока Color Correction.
V4L2_CID_WHITE_BALANCE_TEMPERATURE¶
Описание: Контрол устанавливает баланс белого цвета изображения в соответствии с цветовой температурой.
Тип: __s32
Диапазон возможных значений: [2000 - 9000]
Шаг между значениями: 10
Значение по умолчанию: 6500
Алгоритм:
При установке контрола драйвер выполняет:
- вычисление коэффициентов Kr, Kb с помощью линейной интерполяции значений gain_r, gain_b из контрола V4L2_CID_WHITE_BALANCE_CC для заданной цветовой температуры.
- формирование матрицы для новых значений Kr, Kb (см. V4L2_CID_DO_WHITE_BALANCE).
- установку контролов V4L2_CID_RED_BALANCE и V4L2_CID_BLUE_BALANCE в соответствии с рассчитанными коэффициентами и .
- сброс флагов 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 суммарной гистограммы по красному, синему и зеленому цвету , где i=0-255; для данных в формате YCbCr используется гистограмма по яркости .
построение кумулятивного распределения по суммарной гистограмме: , где i=1-255.
определение минимального и максимального значения для обрезки гистограммы по краям таким образом, чтобы в обрезанные участки гистограммы попадало по 1% от общего количества пикселей в изображении (нормализация гистограммы). Минимальное и максимальное значения должны выбираться таким образом, чтобы только для и только для выполнялись следующие условия:
где N — количество пикселей в выходном изображении.
определение входного диапазона после нормализации гистограммы как
установку нового значения контраста с целью получения максимального выходного диапазона: , где L — коэффициент матрицы (см. V4L2_CID_CONTRAST).
установку нового значения яркости c целью получения нулевой нижней границы выходного диапазона: , где value — коэффициент вектора (см. 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:
или формата YCbCr:
где — коэффициент матрицы (см. Color Transformation), N — количество пикселей в выходном изображении.
вычисление коэффициента подстройки экспозиции , где TH является параметром алгоритма и выбирается в зависимости от требуемого значения средней яркости (в текущей реализации TH = 110). Значение adj должно находиться в диапазоне от 1/16 до 4, при выходе за пределы диапазона значение ограничивается нижней или верхней границей диапазона.
чтение текущих значений экспозиции и усиления и вычисление нового значения искомой яркости:
где SMOOTH — коэффициент сглаживания, позволяющий избежать резкого изменения значений экспозиции и усиления, который является параметром алгоритма (в текущей реализации ).
определение новых значений экспозиции exp и усиления gain с учетом параметров алгоритма EXPmax, GAINmax, которые соответствуют максимальным значением контролов сенсора V4L2_CID_EXPOSURE_ABSOLUTE и V4L2_CID_GAIN:
Если полученное значение , 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 суммарной гистограммы по красному, синему и зеленому цвету , где ; для данных в формате YCbCr используется гистограмма по яркости .
построение кумулятивного распределения по суммарной гистограмме: , где .
вычисление таблицы преобразования изображения HE(i) методом эквализации гистограммы:
где N — количество пикселей в выходном изображении, .
вычисление коэффициента линейной модификации таблицы преобразования , где value — текущее значение контрола.
модификация таблицы преобразования изображения с помощью коэффициента:
- вычисление таблицы преобразования по формуле:
- запись таблиц преобразования в блок 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
Значение | Название | Описание |
---|---|---|
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;
};
Поле | Описание |
---|---|
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];
};
Поле | Описание |
---|---|
temp | Массив значений цветовых температур |
gain_r | Коэффициент усиления красного для каждой температуры |
gain_b | Коэффициент усиления синего для каждой температуры |
coeff | Коэффициенты преобразования цветности для каждой температуры |
Массивы gain_r, gain_b и coeff хранят числа с фиксированной точкой с выделением 12 бит под дробную часть. Данные для температуры с нулевым значением игнорируются. По умолчанию структура заполнена нулями — в этом случае формируется единичная матрица (см. V4L2_CID_DO_WHITE_BALANCE).
Алгоритм:
При установке контрола драйвер выполняет:
- формирование матрицы для текущих значений 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;
};
Поле | Описание |
---|---|
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];
};
Поле | Описание |
---|---|
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;
};
Поле | Описание |
---|---|
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;
};
Поле | Описание |
---|---|
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]. Формула перевода условного усиления в реальное усиление:
где value — текущее значение контрола, gain — реальный коэффициент усиления.
Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.
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]. Формула перевода условного усиления в реальное усиление:
где value — текущее значение контрола, gain — реальный коэффициент усиления
Значение контрола не может быть изменено, если включен режим автонастройки усиления (контрол V4L2_CID_AUTOGAIN включен). При чтении контрола будет выдано текущее значение усиления.
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 — шаг изменения выдержки, r — частота кадров, h — количество строк в кадре, f — частота мерцания освещения.
Максимальное количество шагов определяется в зависимости от частоты кадра:
где — максимальное количество шагов, 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]. Формула перевода условного усиления в реальное усиление:
где 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]. Формула перевода условного усиления в реальное усиление:
где 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]. Формула перевода условного усиления в реальное усиление:
где value — текущее значение контрола, 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
Алгоритм:
В сенсоре устанавливается коэффициент усиления красного цвета по формуле:
где value — текущее значение контрола.
Установка value < 0 приводит к установке Kr < 1, минимальное значение value = -112 соответствует . Установка value > 0 приводит к установке Kr > 1, максимальное значение value = 112 соответствует . При value = 0 Kr = 1.
V4L2_CID_BLUE_BALANCE¶
Описание: Контрол устанавливает баланс синего цвета в сенсоре.
Тип: __s32
Диапазон возможных значений: [-112..112]
Шаг между значениями: 1
Значение по умолчанию: 0
Алгоритм:
В сенсоре устанавливается коэффициент усиления синего цвета по формуле:
где value — текущее значение контрола.
Установка value < 0 приводит к установке Kb < 1, минимальное значение value = -112 соответствует . Установка value > 0 приводит к установке Kb > 1, максимальное значение value = 112 соответствует . При value = 0 Kb = 1.