Rockchip · AI & Linux Hub

Камеры и видео

Устранение неисправностей Camera в Rockchip Linux 4.4

Устранение неисправностей Camera в Rockchip Linux 4.4 · V1.0.1

· · 24 мин чтения

Справка платформы: V1.0.1 производителя, RK3xxx; Linux 4.4+. Полные разделы ниже посвящены драйверам камеры, подключению сенсоров, захвату и отладке. Конкретные сочетания платы ArmSoM/BSP/SDK/ядра не проверены; сверьте схему, интерфейсы, питание/такты, драйверы и IQ-файлы. Примеры и измерения производителя не являются тестами ArmSoM; команды не выполнялись. ZH использует китайские оригинальные рисунки, EN/RU/DE — английские.

ArmSoM Docs · Rockchip Linux

1. Запуск сенсора

1.1 ID сенсора не определяется: ошибка связи I2C

Если ID сенсора не определяется, исходник связывает это не с RKISP/RKCIF, а с несоблюдением последовательности питания. Проверяйте по порядку:

  1. Правильно ли задан 7-битный i2c slave id? Не указан ли ошибочно 8-битный адрес?
  1. Есть ли выход mclk 24M и правильная амплитуда напряжения?
  1. Соблюдена ли последовательность питания сенсора: avdd, dovdd, dvdd, power down, reset и прочее?

1.1.1 Что такое 7-битный адрес

Младший бит LSB 8-битного адреса обозначает R/W; старшие семь бит — нужный i2c slave id.

1.1.2 После включения не обнаруживаются mclk 24M и питание vdd

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

1.1.3 mclk 24M по-прежнему не обнаруживается

Проверьте полосу осциллографа; исходник рекомендует не менее 48M.

  1. Если сенсор не включает mclk, проверьте операции тактирования по примеру drivers/media/i2c/ov5695.c.
  1. GPIO может быть занят другим модулем; обычно об этом сообщает журнал ядра. Командой io можно проверить настройки регистра pin-ctrl.

1.1.4 mclk присутствует, но амплитуда не соответствует домену питания

Причина — неправильная настройка io-domains. Обычно напряжение составляет 1.8v или

3.3v, согласно схеме. Проверьте схему и измените io-domains, например:

&io_domains {
    status = "okay";

    vccio1-supply = <&vcc1v8_soc>;
    vccio2-supply = <&vccio_sd>;
    vccio3-supply = <&vcc1v8_dvp>;
    vccio4-supply = <&vcc_3v0>;
    vccio5-supply = <&vcc_3v0>;
};

В примере группа vccio3 питается от vcc1v8_dvp; домен имеет напряжение

1.8v, поэтому измеренный mclk также должен быть 1.8v. При загрузке io_domains может инициализироваться позже сенсора. При ошибке чтения ID попробуйте повторить probe:

diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c
index e0c608f..7842812 100644
--- a/drivers/media/i2c/ov7251.c
+++ b/drivers/media/i2c/ov7251.c
@@ -961,7 +961,8 @@ static int ov7251_check_sensor_id(struct ov7251 *ov7251,
                              OV7251_REG_VALUE_16BIT, &id);
        if (id != CHIP_ID) {
                dev_err(dev, "Unexpected sensor id(%06x), ret(%d)\n", id, ret);
-               return -ENODEV;
+               return -EPROBE_DEFER;
        }

Если io_domains ещё не инициализирован, используются значения по умолчанию. Если они не соответствуют реальному домену питания, напряжение mclk будет неправильным. Возврат -EPROBE_DEFER заставляет ядро повторить probe сенсора позднее.

1.1.5 Проверка последовательности питания сенсора

Datasheet задаёт порядок и интервалы включения источников питания. Проверьте их осциллографом. Некоторым сенсорам, например ov5695, порядок подачи vdd не важен: драйвер может использовать regulator_bulk. Другим, например ov2685.c, требуется последовательность и отдельные регуляторы avdd_regulator, dovdd_regulator. Выбирайте по конкретному сенсору.

1.2 Значения exp_def, hts_def и vts_def в драйвере сенсора

Получите значения у производителя. Иначе найдите регистры в datasheet и их начальные значения в списке инициализации. Пример ov2685.c:

#define OV2685_REG_VTS                  0x380e

...

        {0x380e, 0x05},
        {0x380f, 0x0e},

...

                .vts_def = 0x050e,

0x380e и 0x380f — регистры vts. При начальном значении 0x050e vts_def равен 0x050e. Значения exp и hts по умолчанию ищите в datasheet. Если приложение не должно менять экспозицию и частоту кадров, exp, hts и vts не требуются; для RAW-сенсора эти три параметра обычно нужны.

link_freq — реальная частота MIPI clk, не mclk 24M, а MIPI dn/dp clk. Спросите производителя или найдите параметр в datasheet. Обычно link_freq не меньше результата следующей формулы, в Гц:

width * height * fps * bits_per_pixel / lanes / 2

Если link_freq неизвестен, измерьте его осциллографом. pixel_rate — число пикселей в секунду; по известному link_freq он вычисляется так:

link_freq * 2 * lanes / bits_per_pixel

1.4 Как подтвердить запуск сенсора

Сначала должен определяться ID: чтение/запись I2C без ошибок. media-ctl -p -d /dev/media0 должен показывать имя, разрешение и другие сведения сенсора.

Затем при захвате MIPI должен выдавать данные без ошибок MIPI/ISP, а приложение — получать кадры.

1.5 Список AVL сенсоров

AVL RGB-сенсоров: https://redmine.rockchip.com.cn/projects/rockchip_camera_module_support_list/camera. Там приведены сведения о модулях. Для других сенсоров, например YUV, ищите драйверы в drivers/media/i2c ядра; по исходнику эти драйверы уже отлажены Rockchip.

2. Ошибки MIPI/ISP

При первоначальной отладке часто встречаются:

  1. Нет кадров и нет ошибок ISP/MIPI.
  1. Непрерывные сообщения об ошибках MIPI.
  1. Ошибка ISP PIC_SIZE_ERROR.
  1. Периодические ошибки MIPI.
  1. Ошибки MIPI продолжаются до зависания системы.

2.1 Какие параметры MIPI настраивать

Для обмена между сенсором и ISP необходимо проверить четыре параметра MIPI:

  1. Выходное разрешение сенсора.
  1. Формат YUV или RGB RAW, разрядность 8/10/12 бит.
  1. Выходная частота MIPI: исходник здесь пишет ink_freq (в других разделах link_freq).
  1. Число линий MIPI сенсора и правильность их задания в DTS.

2.2 Нет кадров и ошибок ISP/MIPI

  1. Проверьте журнал ядра, например dmesg | grep MIPI.
  1. Проверьте ошибки I2C. Если регистры не записаны, сенсор мог не инициализироваться и не включить выход.
  1. Измерьте сигналы MIPI clk и data. Если выхода нет, проверяйте инициализацию сенсора и аппаратную часть.
  1. Если MIPI-сигнал есть, но кадров и ошибок нет: ещё раз проверьте четыре параметра §2.1; убедитесь, что I2C работает и весь список регистров записан. Последним выход включает s_stream(). До него, особенно в s_power(), сигнала MIPI быть не должно: приёмник ещё не готов и может потерять заголовок SOT. Переключите clock lane сенсора из continuous в non-continuous.

2.3 Ошибки MIPI

2.3.1 Таблицы ошибок MIPI

Для RK3288/RK3399/RK3368:

Бит ошибки Сокращение Описание
25 ADD_DATA_OVFLW Переполнение FIFO дополнительных данных
24 FRAME_END Кадр принят нормально, не ошибка
23 ERR_CS Ошибка контрольной суммы
22 ERR_ECC1 Ошибка ECC в 1 бите
21 ERR_ECC2 Ошибка ECC в 2 битах
20 ERR_PROTOCOL Начало пакета внутри текущего пакета
19:16 ERR_CONTROL Ошибка управления PPI, один бит на линию
15:12 ERR_EOT_SYNC Ошибка синхронизации MIPI EOT (конец передачи), один бит на линию
11:8 ERR_SOT_SYNC Ошибка синхронизации MIPI SOT (начало передачи), один бит на линию
7:4 ERR_SOT MIPI SOT (начало передачи), один бит на линию
3:0 SYNC_FIFO_OVFLW Переполнение FIFO синхронизации, один бит на линию

Для RK3326/PX30/RK1808 три таблицы ошибок:

Бит ошибки ERR1 Сокращение Описание
28 ERR_ECC Ошибка ECC
27:24 ERR_CRC Ошибка CRC
23:20 ERR_FRAME_DATA Передача кадра завершена, но есть как минимум одна ошибка CRC
19:16 ERR_F_SEQ Номер кадра не последователен, не соответствует ожиданию
15:12 ERR_F_BNDRY Начало и конец кадра не соответствуют друг другу
11:8 ERR_SOT_SYNC Ошибка синхронизации MIPI SOT (начало передачи), один бит на линию
7:4 ERR_EOT_SYNC Ошибка синхронизации MIPI EOT (конец передачи), один бит на линию
Бит ошибки ERR2 Сокращение Описание
19:16 ERR_CONTROL  
15:12 ERR_ID  
11:8 ERR_ECC_CORRECTED  
7:4 ERR_SOTHS Ошибка PHY SOTHS
3:0 ERR_ESC Ошибка PHY ESC

Разбор типичных ошибок приведён ниже.

2.3.2 Ошибки SOT/SOT_SYNC

SOT должен соответствовать MIPI_D-PHY_Specification. Для подробного анализа найдите спецификацию PDF и изучите:

  1. High-Speed Data Transmission — высокоскоростная передача данных.
  1. Start-of-Transmission Sequence — последовательность начала передачи.
  1. HS Data Transmission Burst — пакетная передача HS.
  1. High-Speed Clock Transmission — высокоскоростное тактирование.
  1. Global Operation Timing Parameters — общие временные параметры. Если сенсор уже работал на другой платформе, несоответствие протоколу MIPI маловероятно. Рекомендуется:
  1. Уточнить у производителя, действительно ли сенсор успешно передавал данные по MIPI.
  1. Повторно проверить link_freq: приёмник должен правильно настроить Ths-settle в последовательности SOT.
  1. При нескольких линиях попросить производителя проверить передачу по одной линии.

2.3.3 Ошибки CRC/CheckSum(CS), ECC/ECC1/ECC2

Ошибки ECC и CS означают повреждение/неполноту данных при передаче. Рекомендации:

  1. Сначала проверить аппаратные сигналы.
  1. При нескольких линиях проверить одну линию: плохая синхронизация линий тоже вызывает ECC.

2.3.4 Ошибки ERR_PROTOCOL/ERR_F_BNDRY

Ожидаемые EOT/SOT не получены; SOT и EOT должны идти парами. Проверьте осциллограмму.

2.3.5 Кадры приходят, но MIPI иногда сообщает ошибки

Сверьтесь с таблицами; сигнальные ошибки анализируйте аппаратно. Если ошибка возникает только при запуске захвата, сенсор может выдавать несоответствующий протоколу сигнал при включении. Попробуйте:

  1. Полную инициализацию регистров перенести в s_power(): приёмник MIPI ещё не принимает и игнорирует данные.
  1. В конце s_power() выключить выход сенсора вызовом stop_stream().
  1. В start_stream() и stop_stream() только включать/выключать MIPI-выход.

2.3.6 Много ошибок MIPI вплоть до зависания

Это может быть ухудшенный случай §2.3.5: сигнал не соответствует требованиям, некоторые ошибки приёмника генерируют прерывания по уровню, возникает шторм прерываний и зависание. Проверьте эффект мер §2.3.5. Английское “voltage interruptions” передано по китайскому объяснению прерываний по уровню.

2.3.7 Ошибка ISP PIC_SIZE_ERROR

Ошибка размера изображения означает, что ISP получил не ожидаемое число строк/столбцов. Проверяйте разрешение на всех этапах; если MIPI уже сообщает ошибку, сначала устраните её. Далее:

  1. Достаточна ли частота DDR? Низкая частота и задержка ответа тоже вызывают ошибку. Проверьте при максимальной частоте: echo performance > /sys/class/devfreq/dmc/governor.
  1. Не превышает ли разрешение последующего этапа предыдущее? media-ctl -p -d /dev/media0 показывает топологию. Должно выполняться Sensor == MIPI_DPHY >= isp_sd input >= isp_sd output. Без ручных изменений условие обычно выполняется.
  1. Правильно ли сенсор выдаёт разрешение? Принудительно уменьшите заявленное разрешение в драйвере. Пример ov7251.c, исходно 640x480:
static const struct ov7251_mode supported_modes[] = {
        {
                .width = 640,
                .height = 480,

Уменьшите width/height, например до 320x240, не меняя регистры, чтобы проверить, не превышает ли настроенный размер фактический выход сенсора.

static const struct ov7251_mode supported_modes[] = {
        {
                .width = 320,
                .height = 240,

3. Получение изображений

В этой главе рассматриваются типичные вопросы захвата изображений.

3.1 Способы захвата

Драйверы RKISP/RKCIF поддерживают V4L2. Можно использовать:

  1. v4l2-ctl из v4l-utils. При отладке сначала проверяйте им получение изображения. Он сохраняет кадры в файл, но не декодирует и не отображает их. Для просмотра используйте mplayer в Ubuntu/Debian либо 7yuv в Windows.

Подробности v4l2-ctl и mplayer приведены в Rockchip_Developer_Guide_Linux_Camera_CN.pdf; также доступна справка v4l2-ctl –help.

  1. qcamera из Linux SDK: откройте приложение камеры с рабочего стола, выберите видеоустройство и предпросмотр. Это демонстрационное Qt-приложение; для продукта рекомендуется собственная разработка.
  1. Плагин GStreamer v4l2src получает данные /dev/video и выводит на экран. Сначала изучите скрипты SDK в /rockchip_test/camera/. Старые плагины rkisp и rkv4l2src больше не поддерживаются; используйте штатный v4l2src. Причины: 3A больше не требуется настраивать в этих плагинах (глава 4), а V4L2-интерфейс rkisp стал стандартнее.
  1. В Debian доступны VLC и другие открытые инструменты. После установки VLC через apt можно вывести камеру следующей командой:
vlc v4l2:///dev/video1:width=640:height=480

Нужны права группы video либо root.

3.2 Неправильные цвета, слишком тёмное или светлое изображение

Рассматривайте тип сенсора:

  1. RAW RGB (RGGB, BGGR и т. п.) требует работающего 3A, см. главу 4. Если 3A исправен, проверьте формат декодирования/вывода и перестановку компонентов UV.
  1. При YUV либо RGB565/RGB888 ISP работает в bypass. При неверных цветах проверьте выходной формат сенсора и порядок UV; если они верны, обратитесь к производителю сенсора. При явно неправильной яркости также обратитесь к нему.

3.3 Топология ISP и команда media-ctl

RKISP/RKCIF может поочерёдно работать с несколькими сенсорами, а RKISP поддерживает многоступенчатое кадрирование. Узлы соединены топологией; media-ctl позволяет настроить параметры каждого. Подробности в Rockchip_Developer_Guide_Linux_Camera_CN.pdf.

3.3.1 Несколько сенсоров на одном ISP

Допускается только поочерёдная работа. Соедините сенсоры с MIPI DPHY в DTS, затем переключайте через media-ctl.

3.4 Совпадают ли захваченные RAW-данные с оригиналом?

В bypass при RAW (RGGB/BGGR) требуется выравнивание по 8 бит; недостающие младшие биты дополняются нулями. Исходные 8/16-битные кадры не меняются. Для 10/12-битных каждый пиксель дополняется младшими нулями до 16 бит. RAW выдаёт только видеоустройство MP; SP его не поддерживает.

3.5 Одновременный выход MP и SP

SP и MP независимо кадрируют и меняют формат одного сенсорного изображения, выводя одновременно. Возможности описаны в Rockchip_Developer_Guide_Linux_Camera_CN.pdf. Одновременный вывод возможен, только если оба выдают RGB/YUV. При RAW на MP выхода SP нет.

3.6 Увеличение изображения в ISP

Аппаратно поддерживается, но не рекомендуется и по умолчанию отключено в драйвере.

3.7 Поворот изображения в ISP

Не поддерживается. Для flip/mirror сначала проверьте функцию сенсора: это наиболее эффективно. Иначе используйте RGA; код и примеры в external/linux-rga/, документация в docs/.

3.8 Захват изображения GREY

Если ISP выдаёт YUV или сенсор — Y8, приложение может непосредственно захватывать V4L2_PIX_FMT_GREY (FourCC GREY).

3.9 Поддерживаемые RGB-форматы

RGB поддерживает только SP: V4L2_PIX_FMT_XBGR32 и V4L2_PIX_FMT_RGB565. XBGR32 (FourCC XR24) содержит R/G/B/X, где X всегда 0. RGB888, то есть 24-битный вывод, не поддерживается.

3.10 Быстрый предпросмотр на плате без экрана

SDK external/uvc_app/ превращает плату в UVC-камеру. См. описание и код каталога. После подключения к ПК устройство распознаётся как USB-камера и позволяет предпросмотр.

3.11 Различение SP и MP

Посмотрите топологию командой media-ctl -p -d /dev/media0; при нескольких устройствах попробуйте /dev/media1 и /dev/media2. Часть вывода:

# media-ctl -p -d /dev/media0
...
- entity 2: rkisp1_mainpath (1 pad, 1 link)              //Means the entity is
MP(MainPath)
            type Node subtype V4L flags 0
            device node name /dev/video1                 //The corresponding
device node is/dev/video1
        pad0: Sink
                <- "rkisp1-isp-subdev":2 [ENABLED]

- entity 3: rkisp1_selfpath (1 pad, 1 link)              //Means the entity is
SP(SelfPath)
            type Node subtype V4L flags 0
            device node name /dev/video2                 //The corresponding
device node is/dev/video2
        pad0: Sink
                <- "rkisp1-isp-subdev":2 [ENABLED]
...

Если media-ctl отсутствует, можно искать через /sys/, например:

# grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:stream_cif
/sys/class/video4linux/video1/name:rkisp1_mainpath       # Corresponding MP
node/dev/video1
/sys/class/video4linux/video2/name:rkisp1_selfpath       # Corresponding SP
Node/dev/video2
/sys/class/video4linux/video3/name:rkisp1_rawpath
/sys/class/video4linux/video4/name:rkisp1_dmapath
/sys/class/video4linux/video5/name:rkisp1-statistics
/sys/class/video4linux/video6/name:rkisp1-input-params

4. Обработка 3A

RAW BAYER RGB (RGGB/BGGR) требует 3A и обработки RKISP. Реализация зависит от camera_engine_rkisp; рекомендуется актуальная совместимая версия. Проверьте модуль в списке поддержки: для поддерживаемых модулей есть XML в external/camera_engine_rkisp/iqfiles/. Иначе оформите запрос настройки модуля через деловой контакт производителя.

4.1 Версия camera_engine_rkisp

  1. По исходному коду:
  # grep CONFIG_CAM_ENGINE_LIB_VERSION interface/rkisp_dev_manager.h
  define CONFIG_CAM_ENGINE_LIB_VERSION "v2.2.0"           # The output v2.2.0 is
the version number of librkisp.so
  1. По журналу выполнения:
  # persist_camera_engine_log=0x4000 rkisp_3A_server --mmedia=/dev/media1 | grep
"CAM ENGINE LIB VERSION"
        CAM ENGINE LIB VERSION IS v2.2.0                # The output v2.2.0 is
the version number of librkisp.so

Если версия ниже v2.2.0, рассмотрите обновление до v2.2.0 или новее.

4.1.1 Требуемая версия драйвера rkisp ядра

camera_engine_rkisp предъявляет требования к версии драйвера ядра; убедитесь, что rkisp достаточно новый.

  1. Версия ISP из исходников ядра:
  # grep RKISP1_DRIVER_VERSION drivers/media/platform/rockchip/isp1/version.h
  define RKISP1_DRIVER_VERSION KERNEL_VERSION(0, 1, 0x5) # The output v0.1.5 is
the version number of the rkisp driver
  1. Версия ISP из журнала ядра:
# dmesg  | grep "rkisp1 driver version"
[    0.867864] rkisp1 ff4a0000.rkisp1: rkisp1 driver version: v00.01.05

4.2 Обновление camera_engine_rkisp

Обновляются три части:

  1. Основной camera_engine_rkisp в external/camera_engine_rkisp. Обновляется git/repo отдельно, без изменения остальных каталогов SDK.
  1. Ядро согласно требованиям camera_engine_rkisp. Требуемую версию rkisp ищите через git log этого каталога. Пример:
# git log
commit e456a50a5524792d64dac384604d4136a697deac
Author: ZhongYichong <zyc@rock-chips.com>
Date:   Mon Jul 1 11:26:32 2019 +0800

    librkisp: v2.2.0

    (BY ZSQ: UPDATE v2.2.0 iq version: from v1.4.0 to v1.5.0)

    3A lib version:
      af:  v0.2.17
      awb: v0.0.e
      aec: v0.0.e
    iq version: v1.5.0
    iq magic version code: 706729
matched rkisp1 driver version:
  v0.1.5                 # The needed kernel driver version is v0.1.5

Change-Id: I3d2adb949dadec259b9ba587a3e3b2770a1c155d
Signed-off-by: ZhongYichong <zyc@rock-chips.com>
Signed-off-by: Shunqian Zheng <zhengsq@rock-chips.com>
  1. Сценарий сборки Buildroot в buildroot/package/rockchip/camera_engine_rkisp. Его можно обновить отдельно, если полное обновление Buildroot неудобно.

4.3 Проверка работы 3A

После проверки camera_engine_rkisp v2.2.0 или новее захватите кадр и оцените цвета/экспозицию. Проверьте также фоновый процесс rkisp_3A_server:

# ps -ef | grep rkisp_3A_server
  706 root      9176 S    /usr/bin/rkisp_3A_server --mmedia=/dev/media1
  746 root      2408 S    grep rkisp_3A_server
# pidof rkisp_3A_server
706

В примере PID 706 соответствует rkisp_3A_server.

4.3.1 Процесс rkisp_3A_server отсутствует

  1. Проверьте /usr/bin/rkisp_3A_server. Если файла нет, проверьте версию camera_engine_rkisp и сборку.
  1. Найдите ошибки rkisp_3A в /var/log/syslog, особенно отсутствие или несовпадение XML сенсорного модуля.
  1. В одном shell запустите rkisp_3A_server –mmedia=/dev/media0, выбирая media-устройство, соответствующее /dev/video. В другом захватите кадры, чтобы получить сообщения ошибок сервера.

4.3.2 Запуск rkisp_3A_server

В SDK скрипт /etc/init.d/S40rkisp_3A запускает сервер в фоне. Если скрипта нет, проверьте camera_engine_rkisp и сценарии сборки пакета Buildroot.

4.3.3 Имя и путь IQ-файла XML

Имя составляется из трёх частей:

  1. Тип сенсора, например ov5695 или imx327.
  1. Имя модуля из DTS. На RK3326/PX30 EVB пример: rockchip,camera-module-name = “TongJu”;
  1. Имя объектива из DTS: rockchip,camera-module-lens-name = “CHT842-MD”; Получается ov5695_TongJu_CHT842-MD.xml в /etc/iqfiles/. Регистр букв важен.

4.4 Ручная экспозиция

Сначала завершите rkisp_3A_server, затем используйте пример rkisp_demo.cpp или исходники librkisp_api.so.

4.5 Журнал librkisp

Задайте переменную среды persist_camera_engine_log. Назначение битов:

bits:    23-20   19-16 15-12  11-8  7-4   3-0
module: [xcore]  [ISP] [AF]   [AWB] [AEC] [NO]

0: error
1: warning
2: info
3: verbose
4: debug

Например, включение debug ISP и AWB:

# /etc/init.d/S40rkisp_3A stop
# export persist_camera_engine_log=0x040400
# /usr/bin/rkisp_3A_server --mmedia=/dev/media0

Техническая схема оригинала · EN PDF p.20

5. Разработка приложений

5.1 Пример на C

  1. SDK содержит rkisp_demo и исходники. Как v4l2-ctl, программа захватывает, но не показывает изображения; прежде всего это образец кода. Код в external/camera_engine_rkisp/apps, а в старых версиях — external/camera_engine_rkisp/tests.
  1. SDK содержит библиотеку rkisp_api.so и исходники для изменения или непосредственной разработки на C. Код в external/camera_engine_rkisp/apps; если каталога нет в старой версии, обновите её.

5.2 DMA buffer и его преимущества

DMA buffer — память, выделенная драйвером и разделяемая несколькими модулями ядра. Это сокращает копирование, повышает эффективность обработки изображений и снижает нагрузку DDR. Пример кодирования камеры через MPP:

RKISP → общий DMA buffer → кодирование MPP.

RKISP может принимать DMA buffer от MPP/RGA либо выделять память и экспортировать буфер другим модулям. Подробности в исходниках librkisp_api.so.

Различия кода оригиналов

Основной текст соответствует языку оригинала; RU/DE переведены с EN. Ниже сохранены отличающиеся фрагменты другого оригинала, включая комментарии/разметку. Это независимые примеры, не единый исполняемый сценарий; параметры источника не подменены.

CN PDF p.13 · 108

# media-ctl -p -d /dev/media0
...
- entity 2: rkisp1_mainpath (1 pad, 1 link)              //表⽰该entity是
MP(MainPath)
            type Node subtype V4L flags 0
            device node name /dev/video1                 //对应的设备节点
是/dev/video1
        pad0: Sink
                <- "rkisp1-isp-subdev":2 [ENABLED]

- entity 3: rkisp1_selfpath (1 pad, 1 link)              //表⽰该entity是
SP(SelfPath)
            type Node subtype V4L flags 0
            device node name /dev/video2                 //对应的设备节点
是/dev/video2
        pad0: Sink
                <- "rkisp1-isp-subdev":2 [ENABLED]

CN PDF p.14 · 109

...

CN PDF p.14 · 111

# grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:stream_cif
/sys/class/video4linux/video1/name:rkisp1_mainpath       # MP节点对应/dev/video1
/sys/class/video4linux/video2/name:rkisp1_selfpath       # SP节点对应/dev/video2
/sys/class/video4linux/video3/name:rkisp1_rawpath
/sys/class/video4linux/video4/name:rkisp1_dmapath
/sys/class/video4linux/video5/name:rkisp1-statistics
/sys/class/video4linux/video6/name:rkisp1-input-params

CN PDF p.14 · 116

  # grep CONFIG_CAM_ENGINE_LIB_VERSION interface/rkisp_dev_manager.h
  define CONFIG_CAM_ENGINE_LIB_VERSION "v2.2.0"           # 输出的v2.2.0是
librkisp.so的版本号

CN PDF p.14 · 118

  # persist_camera_engine_log=0x4000 rkisp_3A_server --mmedia=/dev/media1 | grep
"CAM ENGINE LIB VERSION"
        CAM ENGINE LIB VERSION IS v2.2.0                # 输出的v2.2.0是librkisp.so
的版本号

CN PDF p.15 · 122

  # grep RKISP1_DRIVER_VERSION drivers/media/platform/rockchip/isp1/version.h
  define RKISP1_DRIVER_VERSION KERNEL_VERSION(0, 1, 0x5) # 输出的v0.1.5是rkisp驱动的
版本号

CN PDF p.15 · 129

# git log
commit e456a50a5524792d64dac384604d4136a697deac
Author: ZhongYichong <zyc@rock-chips.com>
Date:   Mon Jul 1 11:26:32 2019 +0800

    librkisp: v2.2.0

    (BY ZSQ: UPDATE v2.2.0 iq version: from v1.4.0 to v1.5.0)

    3A lib version:
      af:  v0.2.17
      awb: v0.0.e
      aec: v0.0.e
    iq version: v1.5.0
    iq magic version code: 706729

    matched rkisp1 driver version:
      v0.1.5                 # 所需要的kernel驱动版本为v0.1.5

    Change-Id: I3d2adb949dadec259b9ba587a3e3b2770a1c155d
    Signed-off-by: ZhongYichong <zyc@rock-chips.com>
    Signed-off-by: Shunqian Zheng <zhengsq@rock-chips.com>

Другие статьи по теме → · Учебные маршруты →