Skip to content

Instantly share code, notes, and snippets.

@kervel
Last active March 5, 2026 19:42
Show Gist options
  • Select an option

  • Save kervel/d020583aca50cb4fd28cfbdf191bf4d3 to your computer and use it in GitHub Desktop.

Select an option

Save kervel/d020583aca50cb4fd28cfbdf191bf4d3 to your computer and use it in GitHub Desktop.
OV01A10 Camera Profile — Dell Latitude 9320 (IPU6EP) — extracted from Intel aiqb + HAL config

OV01A10 Image Quality Comparison — Dell Latitude 9320

Intel HW ISP (libcamhal, 1280x720 NV12)

HW ISP

libcamera GPU ISP (.deb v4: sensor helper + AWB fix + CCM + BlackLevel, 60fps)

GPU ISP

Notes

  • HW ISP uses Intel's proprietary PSYS pipeline with full 3A from aiqb tuning
  • GPU ISP uses libcamera's soft IPA with CCMs extracted from the same aiqb
  • HW ISP has noticeably better white balance (warm/neutral tones)
  • GPU ISP still has slight blue cast — soft AWB is simpler than Intel's 3A
  • GPU ISP resolution is 1280x800 (full sensor) vs HW ISP 1280x720 (cropped)
  • Stock kernel module (SBGGR10) is correct — no kernel patching needed

Required patches (on top of libcamera 0.7.0)

  1. ov01a10.yaml tuning file with CCMs extracted from aiqb
  2. CameraSensorHelper for OV01A10 (black level 64@10bit, gain=code/256)
  3. AWB stats normalization fix for 10-bit sensors: patchwork.libcamera.org/patch/26258
  4. IPU6 pipeline handler wrapping libcamhal (for HW ISP path)

.deb package

Built from branch ov01a10-soft-isp-tuning: 0.7.0-1ubuntu2+ov01a10+4

OV01A10 Camera Profile — Dell Latitude 9320 (Tributo)

Hardware

Parameter Value
Sensor OmniVision OV01A10
Platform Intel Alder Lake (IPU6EP)
PCI ID 0x462e (ADLN)
Laptop Dell Latitude 9320 (codename Tributo)
Position User-facing (front camera)
Interface CSI-2, port 0
Bayer pattern BGGR (SBGGR10)

Sensor Specifications

Parameter Value
Pixel array 1280 x 800
Active area 1280 x 800 (full)
Physical size 3.69 x 2.77 mm
Bit depth 10-bit
Max frame rate 30 fps
Color filter Bayer GRBG (arrangement=2)
Fixed focus Yes (AF mode=OFF only)
Aperture f/2.5
Focal length 4.28 mm
Minimum focus distance 0.1 m
Hyperfocal distance infinity (0.0)
OIS None

Supported Output Resolutions

All via PSYS (hardware ISP), NV12 format:

Resolution Use case Min frame duration
1280 x 720 Preview / Video 33.3 ms (30 fps)
640 x 480 Preview / Video 33.3 ms (30 fps)
640 x 360 Preview / Video 33.3 ms (30 fps)

Internal ISYS capture: 1280 x 800 (raw SGRBG10), cropped to 1280 x 798 via BE SOC.

FPS ranges: 15-15, 15-30, 30-30.

AIQB Tuning Profile

Parameter Value
File /etc/camera/ipu6ep/ov01a10.aiqb
Size 458,968 bytes
Format CPFF (Camera Parameter File Format)
Profile name Dell_Tributo_OV01A_Release_ww50_4
Created 2021-12-07
Tool IQStudio 21.45.0.0
LibIQ 2.0.359.0

AIQB Sections

Section Description Size
LCMC Lens Correction & Color Matrix Calibration 355,168 bytes
LAIQ Light / Auto IQ Parameters (3A tuning) 17,928 bytes
LISP ISP Configuration Parameters 85,680 bytes
LTHR Thermal/Temperature Parameters 168 bytes

Auto Exposure (AE) Parameters

Parameter Value
AE modes AUTO, MANUAL
Exposure time range 10 — 1,000,000 µs
Sensor exposure range 100 — 100,000 µs
Gain range 0 — 60 dB
Sensitivity range (ISO) 100 — 800
EV compensation range -6 to +6
EV step 1/3
Exposure lag 2 frames
Gain lag 2 frames
AE lock Available

Auto White Balance (AWB) Parameters

Supported AWB Modes

  • AUTO
  • INCANDESCENT (~2700K)
  • FLUORESCENT (~4000K)
  • DAYLIGHT (~5500K)
  • FULL_OVERCAST
  • PARTLY_OVERCAST
  • SUNSET
  • VIDEO_CONFERENCE
  • MANUAL_CCT_RANGE
  • MANUAL_WHITE_POINT
  • MANUAL_GAIN
  • MANUAL_COLOR_TRANSFORM

Calibration Illuminants

Color temperature calibration data found for these illuminants:

Illuminant CCT (K) Standard
Incandescent A 2856 CIE Illuminant A
Warm White 2700 Typical LED warm
Tungsten 3000
Fluorescent 4000 CIE F2
Cool White 4100
Daylight 5000 CIE D50
Bright Daylight 5100
Cloudy 6500 CIE D65
Shade 7500

AWB lock: Available.

Color Correction Matrices (CCM)

Multiple CCMs found for different illuminants. These are 3x3 matrices that convert from sensor RGB to sRGB-like output. Row sums = 1.0 (color-preserving).

CCM Set 1 (likely daylight/D65-ish)

[ 1.5720  -0.8123   0.2403]
[-0.1407   0.9484   0.1923]
[-0.3426  -1.9057   3.2483]

CCM Set 2 (higher color temperature)

[ 1.7045  -0.8785   0.1740]
[-0.5693   1.1627   0.4066]
[ 0.0676  -2.1108   3.0432]

CCM Set 3 (warmer / tungsten)

[ 0.9886   0.5896  -0.5783]
[-0.4999   1.3190   0.1809]
[-0.7300  -0.5693   2.2993]

CCM Set 4

[ 1.1247   0.0819  -0.2066]
[-0.7007   2.0684  -0.3677]
[-0.4059  -1.7790   3.1848]

Note: 233 potential CCM candidates found in LCMC section. The above are representative samples. Multiple CCMs per illuminant are used for interpolation.

Lens Shading Correction (LSC)

  • Shading map size: 50 x 38 grid
  • 4 channels: R, Gr, Gb, B
  • Correction factors: higher at corners (vignetting compensation), ~1.0 at center

ISP Pipeline Features

Supported Features

  • MANUAL_EXPOSURE
  • MANUAL_WHITE_BALANCE
  • IMAGE_ENHANCEMENT
  • NOISE_REDUCTION
  • PER_FRAME_CONTROL
  • SCENE_MODE

Available ISP Modes

Feature Available modes
Edge enhancement OFF, FAST, HIGH_QUALITY, ZERO_SHUTTER_LAG
Hot pixel correction FAST, HIGH_QUALITY
Noise reduction OFF, FAST, HIGH_QUALITY, MINIMAL
Tone mapping CONTRAST_CURVE, FAST, HIGH_QUALITY, GAMMA_VALUE
Lens shading OFF, FAST, HIGH_QUALITY
Scene modes NORMAL
Anti-banding AUTO, 50Hz, 60Hz, OFF
Test patterns Off (0), ColorBars (2)

Pipeline Configuration

Parameter Value
PSys processor Enabled
DVS type IMG_TRANS
YUV color range Full
Pipeline switch delay 60 frames
Max requests in-flight 5
Pipeline max depth 6
Reprocess max stall 4
Initial skip frames 0
Max raw data buffers 32
AIQD enabled Yes
Tuning config NORMAL→VIDEO/ov01a10, STILL_CAPTURE→VIDEO/ov01a10

Media Pipeline Topology

ov01a10 3-0036 (I2C, pad 0)
    ↓ SBGGR10_1X10, 1280x800
Intel IPU6 CSI-2 (CSI port)
    ↓ SBGGR10_1X10, 1280x800
Intel IPU6 CSI2 BE SOC 0
    ↓ SGRBG10_1X10, 1280x798 (crop: top=1, height=798)
Intel IPU6 BE SOC capture 0
    ↓ V4L2_PIX_FMT_SGRBG10
[PSYS Hardware ISP]
    ↓ V4L2_PIX_FMT_NV12
Output (1280x720 / 640x480 / 640x360)

Note: The Bayer pattern changes from SBGGR at sensor to SGRBG after BE SOC due to the 1-line top crop shifting the pattern.

Graph Settings (PSYS Processing)

From graph_settings_ov01a10.xml:

  • Sensor mode: OV01A10_30fps (id=0), 1280x800, 30fps, 10bpp
  • Bayer order: BGGR
  • No binning (1:1), no scaling
  • No PDAF
  • Settings for multiple output resolutions with SIS (Scaled Image Streams)

Files

File Purpose
/etc/camera/ipu6ep/ov01a10.aiqb Binary tuning profile (3A, CCM, LSC, ISP)
/etc/camera/ipu6ep/sensors/ov01a10-uf.xml HAL sensor configuration
/etc/camera/ipu6ep/gcss/graph_settings_ov01a10.xml PSYS graph settings
/etc/camera/ipu6ep/gcss/graph_descriptor.xml PSYS graph descriptor
/etc/camera/ipu6ep/libcamhal_profile.xml Main HAL profile
/etc/camera/ipu6ep/psys_policy_profiles.xml PSYS scheduling policy

Reference Captures

HW ISP captures (via libcamhal wrapper, 1280x720 NV12):

  • hwi_1280x720_frame0.png — first frame
  • hwi_1280x720_frame4.png — mid-sequence
  • hwi_1280x720_frame9.png — last frame (3A converged)
# SPDX-License-Identifier: CC0-1.0
#
# Tuning file for OmniVision OV01A10 (1.3MP, 1280x800)
# For use with libcamera simple/soft ISP pipeline
#
# CCM data extracted from Dell Latitude 9320 (Tributo) aiqb profile
# (Dell_Tributo_OV01A_Release_ww50_4, created 2021-12-07 with IQStudio 21.45).
%YAML 1.1
---
version: 1
algorithms:
- Awb:
- Ccm:
ccms:
- ct: 2800
ccm: [ 0.9886, 0.5896, -0.5783,
-0.4999, 1.3190, 0.1809,
-0.7300, -0.5693, 2.2993 ]
- ct: 4000
ccm: [ 1.1247, 0.0819, -0.2066,
-0.7007, 2.0684, -0.3677,
-0.4059, -1.7790, 3.1848 ]
- ct: 5000
ccm: [ 1.5720, -0.8123, 0.2403,
-0.1407, 0.9484, 0.1923,
-0.3426, -1.9057, 3.2483 ]
- ct: 6500
ccm: [ 1.7045, -0.8785, 0.1740,
-0.5693, 1.1627, 0.4066,
0.0676, -2.1108, 3.0432 ]
- Agc:
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment