Repository navigation
API ISP
The ISP module opens the image signal processor, registers the camera sensor and exposes the tuning interface:
exposure, white balance, colour, noise reduction, flip, crop, day/night and the statistics the ISP collects. The
calls named IMP_ISP_Tuning_* change the picture while the stream runs; they only work between EnableTuning and
DisableTuning.
Typical start-up order: IMP_ISP_Open, IMP_ISP_AddSensor, IMP_ISP_EnableSensor, IMP_System_Init, create and
enable the FrameSource channels, IMP_ISP_EnableTuning, then the tuning calls. Shut down in reverse order:
DisableTuning, DisableSensor, DelSensor, IMP_ISP_Close.
Many calls exist twice in the vendor library family: a plain form and a _Sec form (and ISP_MultiCamera_ prefix) for
the second sensor of a dual-sensor SoC (T23, and T40 and T41 with their own _VI forms). The second-sensor forms are
not described separately; they take the same arguments.
Signatures differ between SoC families. The declarations on this page are those of the OpenIMP header, which follows
the T10 to T31 form. On T40 and T41 most tuning calls take the video input (IMPVI_NUM num, normally IMPVI_MAIN) as an
extra first argument, and the one-byte picture controls (brightness, contrast, sharpness, saturation, hue) take a pointer
to the value; check the vendor header of the SoC you build for. On T10 to T31 a failed call returns -1; T40 and T41
return their own negative codes for some failures (for example -4 for a video input number that is out of range).
On T10 to T31 every Tuning call made outside the EnableTuning / DisableTuning window returns -1.
Status columns: T10 T20 T21 T23 T30 T31 T40 T41. As of 2026-10-26. Part of the API reference.
- Open, sensor and tuning session (15)
- Exposure (AE) (26)
- White balance (AWB) (19)
- Colour, contrast and sharpness (19)
- Noise reduction, defog and dynamic range (15)
- Day/night, scene and running mode (8)
- Flip, crop and zoom (12)
- Wide dynamic range (7)
- Autofocus statistics (7)
- Statistics and reading the ISP state (15)
- OSD, masks and drawing (16)
- Lens correction, bypass and raw (9)
- Board hooks and internals (18)
Status symbols are those of the feature matrix (API coverage tables):
-
✅works, device-tested -
✅+works, device-tested, better than the vendor -
✅rtAPI round trip on device, no visible effect expected -
✅rworks: called by the streamer on fleet cameras of this SoC that passed the fleet soak -
✅○vendor no-op, OpenIMP matches that -
🔧himplemented, host tests only (no camera run yet) -
🔧areally connected per static audit, no device test tracked -
🔧+API round trip in QEMU, no camera -
⚠cvalue only stored and read back, nothing applied -
⚠sreturns 0 without any effect -
❌eexported but fails or has a known defect -
❌not exported by OpenIMP -
·function does not exist on this SoC (not in that SoC's vendor API; not a gap) -
?state not determined -
📋no OpenIMP build for this SoC yet (planned)
int IMP_ISP_Open(void);Opens the ISP device (/dev/tx-isp, on T20 /dev/v4l-subdev0). Has to be the first ISP call.
Returns: 0 on success, -1 if the device cannot be opened (driver not loaded). On T40 and T41 a second call while the device is open returns 0.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_Close
int IMP_ISP_Close(void);Closes the ISP device. The sensor has to be disabled and deleted first.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
On T40 and T41 the call returns -1 while a sensor is still added or enabled or while tuning is enabled.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_Open
int IMP_ISP_AddSensor(IMPSensorInfo *pinfo);Registers a sensor with the ISP driver and selects it. The IMPSensorInfo structure names the sensor and its control bus.
Parameters
-
pinfo: Sensor description (IMPSensorInfo), with the sensor name that the driver knows (for examplegc2053). On T40 and T41 the first argument is the video input (IMPVI_NUM, normallyIMPVI_MAIN).
Returns: 0 on success, -1 on a NULL argument, when the ISP device is not open, when a sensor is already running (call DisableSensor first), when the driver refuses the registration, or when no sensor of that name is known to the driver. On T40 and T41 a second AddSensor without DelSensor also returns -1.
The sensor driver module has to be loaded first. Dual-sensor SoCs also have IMP_ISP_AddSensor_VI(vi, pinfo) for the second input.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_EnableSensor, IMP_ISP_DelSensor
int IMP_ISP_DelSensor(IMPSensorInfo *pinfo);Unregisters the sensor from the ISP driver and releases the buffers the library kept for it. The sensor has to be disabled first.
Returns: 0 on success. -1 on T10 to T31 when the ISP is not open or the sensor is still enabled, and when the driver refuses the request (the driver's result is returned). On T40 and T41 -1 for a video input out of range, a NULL pointer, when no sensor is registered, or while it is enabled.
On T40 the call only deselects the input, since the sensor kernel module owns the sensor device; on T41 it also releases the sensor I2C client, so a new sensor can be registered without reloading the module.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_AddSensor
int IMP_ISP_EnableSensor(void);Starts the registered sensor and links it into the ISP data path.
Returns: 0 on success. -1 on T10 to T31 when the ISP is not open, no sensor was registered, or a driver request fails. On T40 and T41 -1 for a video input out of range, a NULL pointer, when no sensor is registered or a driver request fails; calling it on an enabled sensor returns 0.
Do it before IMP_System_Init, as in the typical order above. The _VI form selects the sensor input on dual-sensor SoCs.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_DisableSensor
int IMP_ISP_DisableSensor(void);Stops the sensor and unlinks it from the ISP data path.
Returns: 0 on success. -1 on T10 to T31 when the ISP is not open, no sensor was selected, or a driver request fails. On T40 and T41 -1 for a video input out of range or a failing driver request; calling it when the sensor is not enabled returns 0.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_EnableSensor
int IMP_ISP_EnableTuning(void);Starts the tuning session, which allows all IMP_ISP_Tuning_* calls.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The vendor samples call it after the FrameSource channels are enabled. On T10 to T31 every tuning call made before it returns -1.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
See also: IMP_ISP_DisableTuning
int IMP_ISP_DisableTuning(void);Ends the tuning session.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3gaps2 2026-10-27 .31
- T20: apitest rc3gaps2 2026-10-27 .107
- T21: apitest rc3gaps2 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest rc3gaps2 2026-10-27 .26
- T40: apitest rc3gaps2 2026-10-27 .184
- T41: apitest rc3gaps2 2026-10-27 .34
Used by: prudynt, raptor, timps.
int IMP_ISP_Tuning_GetSensorFPS(uint32_t *fps_num, uint32_t *fps_den);
int IMP_ISP_Tuning_SetSensorFPS(uint32_t fps_num, uint32_t fps_den);Sets or reads the frame rate of the sensor as a fraction (numerator and denominator, each packed into 16 bits for the driver).
Parameters
-
fps_num: Numerator, for example 25. At most 65535. -
fps_den: Denominator, for example 1. Must not be 0.
Returns: 0 on success, -1 for a zero denominator or a NULL pointer. The setter on T40 and T41 also refuses a video input other than the main one and values above 65535. T10 to T31 also return -1 outside the tuning session, except T23, whose frame-rate calls do not check it.
On T40 and T41 the arguments are the video input and, on T41, a frame-rate structure (on T40 two pointers) instead of two integers. On T23 the call also retimes the frame source to the new rate. Except on T23 the getter returns the last known rate even when the driver request fails. The sensor driver decides whether it rounds the value to a rate it supports, so read the value back.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: gate1026 .184 2026-10-26 (open-tx-isp 2acd1afa, OpenIMP d2b40b9c): 100x, 0 oops, apitest PASS
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_FrameSource_Get/SetChnAttr
int IMP_ISP_Tuning_GetSensorAttr(IMPISPSENSORAttr *attr);Reads the sensor timing into IMPISPSENSORAttr: horizontal and vertical total size (hts, vts), frame rate and picture width and height (20 bytes).
Returns: 0 on success, -1 for a NULL pointer. On T31 a driver without the call leaves the structure zero except for fps, which then holds the last rate set with SetSensorFPS; on T23 the driver's answer is copied unchanged, and T40 and T41 pass the structure to the driver.
Only on T23, T31, T40 and T41.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetVideoDrop: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Installs a callback that the library calls when the stream has stalled: no frame for 2 seconds, then again after 4 and 6 seconds (at most three times in a row, a new count starts when frames return).
Parameters
-
cb: Callback without arguments (void (*)(void)); use it to restart the stream or to reboot the camera. Pass NULL to remove it.
Returns: 0 on success, -1 if tuning is not enabled or the monitor thread cannot start.
OpenIMP counts the frames its FrameSource hands out, and only while a channel is streaming and has a reader; a stream that was stopped on purpose is not reported. The callback runs in a library thread.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | ✅rt | ? | ✅rt | ✅rt | ✅rt |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
- T21: apitest agg47-cases 2026-10-26 .24 (API round trip, no visible effect expected)
- T23: apitest agg47-cases 2026-10-26 .30 (API round trip, no visible effect expected)
- T31: apitest agg47-cases 2026-10-26 .26 (API round trip, no visible effect expected)
- T40: apitest agg47-cases 2026-10-26 .184 (API round trip, no visible effect expected)
- T41: apitest agg47-cases 2026-10-26 .34 (API round trip, no visible effect expected)
Used by: raptor.
/* IMP_ISP_GetDefaultBinPath: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetDefaultBinPath: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the path of the ISP tuning binary (.bin) loaded at start-up.
Parameters
-
path: Path string. On T10 to T31 and T23 at most 63 characters; the getter's buffer needs 64 bytes. On T40 and T41 the first argument is the video input (main only).
Returns: 0 on success. The setter returns -1 for a NULL pointer, a path that is too long, and on T10 to T31 when the ISP is not open or the sensor is already running. The getter returns -1 for a NULL pointer, when the ISP is not open or no sensor was added (T10 to T31), or on T40 and T41 when no path was ever set and no default file is known.
Call the setter after IMP_ISP_Open and before IMP_ISP_AddSensor (T40 and T41 refuse it once a sensor is added). On T41, when no path was set, the getter reports /etc/sensor/<sensor>-t41.bin if that file exists.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅rt | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest agg47 stock 2026-10-27 .184 (API round trip, no visible effect expected)
- T41: apitest issue-116 2026-10-26 .34: SetDefaultBinPath ret=0 before AddSensor, AddSensor 0, EnableSensor 0; QEMU T41: the set file is the one tisp_init loads
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SwitchBin: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Switches the ISP tuning binary while running: with enable 1 it loads the file named in bname, with 0 it returns to the sensor's default bin.
Parameters
-
attr:IMPISPBinAttrwithenableand the file name (64 bytes on T40, 128 on T41); the name is always terminated in the copy sent to the driver.
Returns: 0 on success. Failures: T40 -4 (video input of 4 or more), -9 (NULL), -5 (tuning not running), -10 (enable not 0 or 1), -6 (driver refused). T41 uses the same numbers as -4096 plus the code (-4096+12 for the input, whose limit is 2).
SoC: only in the vendor API of T23, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ❌e | · | · | ✅ | ✅rt |
Tested (tool, date, camera, what was checked):
- T41: apitest rc3-cases 2026-10-26 .34 (API round trip, no visible effect expected)
Used by: prudynt.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_GetFrameDrop: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetFrameDrop: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the frame drop pattern, which makes the ISP skip frames: three channels, each with an enable flag and a pattern size.
Returns: 0 on success, -1 for a NULL pointer or a missing ISP; otherwise the driver's result. On T40 and T41 only the main input is accepted and the setter refuses a size above 31 or an enable value out of range.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅rt | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest agg47-cases 2026-10-26 .184 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_GetSensorRegister: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetSensorRegister: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Writes or reads a register of the sensor directly through the ISP.
Parameters
-
reg: Sensor register address. On T41 an{addr, value}structure after the video input; on T40 pointers after the video input. -
value: Value to write, or the output for the read.
Returns: 0 on success, -1 for a NULL pointer, a missing or closed ISP, when no sensor runs, or for a sensor on an SPI bus (only I2C sensors are supported on T10 to T31); otherwise the driver's result. On T40 and T41 only the main input is accepted.
For debugging and tuning only; the sensor driver does not know about changes made this way.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | ✅rt | ? | ✅ | ✅rt | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
- T21: apitest agg47-cases 2026-10-26 .24 (API round trip, no visible effect expected)
- T23: apitest agg47-cases 2026-10-26 .30 (API round trip, no visible effect expected)
- T31: apitest issue-113 2026-10-26 .26 (open-tx-isp 3e9a5d2c + OpenIMP 662b0d8c): chip id 0xcb3a read, same-value write round trip PASS; QEMU T31 equal
- T40: apitest agg47-cases 2026-10-26 .184 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
The auto exposure chooses integration time and gains to reach a brightness target. These calls read what it chose, limit it, or take it over.
int IMP_ISP_Tuning_GetExpr(IMPISPExpr *expr);
int IMP_ISP_Tuning_SetExpr(IMPISPExpr *expr);Reads the exposure mode and integration time in use, or sets them. IMPISPExpr is a union: the setter uses s_attr (mode, unit line or microsecond, time) and the getter fills g_attr (mode, current, minimum and maximum integration time, microseconds per line).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
A manual mode setting stops the auto exposure; set the mode back to auto to resume. The structure carries no gain fields; limit the gain with SetMaxAgain / SetMaxDgain. Clamping of the time is done by the driver.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest expr 2026-10-27 .31 (#130): 240 lines -> 240, Y 64 -> 92; 10000 us -> 227 lines (44 us/line) (beyond vendor SDK)
- T20: apitest expr 2026-10-27 .107 (#130): 240 lines read back 240, Y 122 -> 191 (30 -> 240 lines); 10000 us -> 338 lines; AUTO restores (beyond vendor SDK)
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest rc3gaps2 2026-10-27 .30
- T31: apitest agg47 2026-10-26 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_GetEVAttr, IMP_ISP_Tuning_Get/SetAeComp
int IMP_ISP_Tuning_GetEVAttr(IMPISPEVAttr *attr);Reads the exposure state into IMPISPEVAttr, an array of six 32-bit values filled by the driver. The meaning of the values is the driver's.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session. On T23 the 24 bytes are copied out even when the driver request failed.
Use it for telemetry; to see how bright the scene is, read GetTotalGain or GetAeLuma.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetAeComp(int *pcomp);
int IMP_ISP_Tuning_SetAeComp(int comp);Moves the brightness target of the auto exposure up or down (exposure compensation).
Parameters
-
comp: Compensation. The vendor library recommends 0 to 255; 128 is the default. Higher values give a brighter picture. Measured picture brightness for comp 0, 128 and 255: 56, 105 and 245 on T20, 55, 100 and 160 on T31.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The AE reacts slowly: on T31 allow about 30 seconds after a change. The vendor T40 and T41 libraries have no AeComp call; there the same effect is the AeTargetComp field of Get/SetAeScenceAttr (0 to 255, 128 neutral).
SoC: not in the vendor API of T21, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | · | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: See Beyond the Vendor: New in RC1 (since the 2026-10-06 state).
/* IMP_ISP_Tuning_GetMaxAgain: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetMaxAgain(uint32_t gain);Sets or reads the ceiling of the analogue gain the auto exposure may use.
Parameters
-
gain: Ceiling in the gain unit of the ISP driver; the library passes the value on unchanged. 0 means no ceiling and 1 the smallest ceiling (1x) in the sensor-hold code of OpenIMP.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session; otherwise the driver's result. A failed getter stores 0 in the output.
Lowering it reduces noise in the dark at the price of a darker picture or longer integration time. The ceiling only binds while the auto exposure runs.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetMaxDgain: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetMaxDgain(uint32_t gain);Sets or reads the ceiling of the digital gain the auto exposure may use.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session; otherwise the driver's result. A failed getter stores 0 in the output.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_Get/SetMaxAgain
int IMP_ISP_Tuning_GetBacklightComp(uint32_t *pstrength);
int IMP_ISP_Tuning_SetBacklightComp(uint32_t strength);Sets or reads the strength of backlight compensation.
Parameters
-
strength: Strength; the library passes it on unchanged, the range is the driver's.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session; otherwise the driver's result.
Only on T23 and T31. A driver that does not support the control makes the call fail instead of being accepted without effect.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest rc3-cases 2026-10-26 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetHiLightDepress(uint32_t *pstrength);
int IMP_ISP_Tuning_SetHiLightDepress(uint32_t strength);Sets or reads how strongly very bright areas are held down.
Parameters
-
strength: Strength; the library passes it on unchanged, the range is the driver's.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session; otherwise the driver's result.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47-cases 2026-10-26 .30
- T31: apitest agg47-cases 2026-10-26 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAntiFlickerAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetAntiFlickerAttr(IMPISPAntiflickerAttr attr);Selects the mains-flicker avoidance of the exposure control.
Parameters
-
attr: On T10 to T31:IMPISP_ANTIFLICKER_DISABLE(0),IMPISP_ANTIFLICKER_50HZ(1) orIMPISP_ANTIFLICKER_60HZ(2), passed by value; other values return -1. On T40 and T41: the video input and a pointer to a structure withmodeandfreq.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
Set it to the frequency of the local mains so the integration time is a multiple of the light period; with the wrong value the picture shows moving bands.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetIntegrationTime: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetIntegrationTime: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the exposure integration time of the legacy interface, either as a fixed value or as an upper limit for the auto exposure.
Parameters
-
itattr: Structure with the mode (0 auto, 1 manual, 2 limit), the integration time and the maximum integration time.
Returns: 0 on success, -1 for a NULL pointer, a mode other than 0 to 2, or outside the tuning session. On T20 and T21 a manual integration time of 256 or more is refused with -1.
Mode 1 fixes the integration time; mode 2 sets the maximum the auto exposure may use; mode 0 returns to auto. The getter reports mode 1 for a fixed time, 0 otherwise. Only on T10, T20, T21 and T30; newer SoCs use SetExpr.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | · | ? | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest inttime 2026-10-27 .107, night (open-tx-isp 4e961167, #128): 30 -> 240 lines Y 5.6 -> 37.3, readback 30/240; AE no longer overrides the manual time
- T21: apitest issue-110 2026-10-27 .24 (open-tx-isp 28b26d20, stock libimp): Get mode/it/max 0/1350/2246, manual 30 read back; Set 30->240 lines Y 16.1->78.9; QEMU T21 equal (beyond vendor: stock T21 ignores the block)
Used by: timps.
Difference from the vendor library: See Beyond the Vendor: Behaviour that differs from the vendor (better or deviating on purpose).
int IMP_ISP_Tuning_GetAeAttr(void *ae_attr);
int IMP_ISP_Tuning_SetAeAttr(void *ae_attr);Reads or changes the AE attribute block in one structure.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Only on T23 and T31. The library converts between the public structure and the layout the driver uses; the meaning of the values is the driver's.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeExprInfo: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeExprInfo: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AE exposure parameter block (IMPISPAEExprInfo: AeMode, AeIntegrationTime, AeAGain, AeDGain, AeIspDGain).
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T40 and T41. OpenIMP's own test-pattern hold reads the block, sets AeMode to manual to pin the exposure while a pattern is shown and writes the saved block back afterwards.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | 🔧a |
/* IMP_ISP_Tuning_GetAeScenceAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeScenceAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AE scene attributes of IMPISPAEScenceAttr.
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T40 and T41 (the ISP spells it Scence). Get and Set are device-tested on T40 against the vendor library.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | 🔧a |
/* IMP_ISP_Tuning_GetAeSpeed: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeSpeed: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets how fast the auto exposure converges (IMPISPAeSpeedAttr).
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: 0 on success; -1 for a bad video input number or NULL, otherwise the driver's result.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x800009a. T40 only: the T41 vendor API has no AeSpeed.
SoC: T40 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | · |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
/* IMP_ISP_Tuning_GetAeConvergeStep: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeConvergeStep: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AE convergence step block.
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000028. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ⚠c |
Difference from the vendor library: On T41 the open driver stores the block and returns it; the AE does not use it yet.
int IMP_ISP_Tuning_GetAeStrategy(IMPISPAeStrategy *strategy);
int IMP_ISP_Tuning_SetAeStrategy(IMPISPAeStrategy strategy);Chooses how the AE splits a change between integration time and gain (IMPISPAeStrategy).
Parameters
-
strategy:IMPISPAeStrategy(value, not a pointer).
Returns: 0 on success, -1 outside the tuning window or for a NULL output; otherwise the driver's result.
Value control 0x8000022 of the ISP driver, as in the vendor T20, T21 and T30 libraries. T10, T20 and T21 are device-tested; T30 was tested on the host with a fake ioctl.
SoC: T10, T20, T21, T30.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅ | ✅ | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest apitest-cov 2026-10-27 .31 (API round trip, no visible effect expected)
/* IMP_ISP_Tuning_GetAeMin: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeMin: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the lower limit of the exposure (minimum integration time and gain) for the auto exposure.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Only on T21, T23 and T31.
SoC: only in the vendor API of T21, T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetAeTargetList(IMPISPAETargetList *at_list);
int IMP_ISP_Tuning_SetAeTargetList(IMPISPAETargetList *at_list);Sets or reads the table (10 values, IMPISPAETargetList) that maps total gain to the AE brightness target, so the target can fall in the dark.
Returns: 0 on success. -1 for a NULL pointer on T31 and T10 to T30, and on T31 also outside the tuning session or on a driver failure.
Only on T23 and T31. On T31 the table reaches the driver. In the T-series library code for the other SoCs (T10 to T30) the table is only kept in memory and read back.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the metering weights of the AE grid; zones with a higher weight count more.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. On T40 and T41 -1 for a video input out of range or NULL (the first argument is the video input).
The grid size and weight range are defined by the driver.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the histogram parameters of the AE (bin thresholds and weights).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Not on T40 and T41.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeExpList: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAeExpList: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AE exposure list (a mode switch plus a list of exposure steps; in list mode the AE allocates exposure from the list).
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPAeExpListAttr(324 bytes on T41).
Returns: 0 on success; -1 for a bad video input number or NULL, otherwise the driver's result.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T41: control 0x8000027, served by the open driver from the vendor AE; on a camera list mode on and off, read-back, and refusal of an invalid mode were checked with the calibration's own list. T40: control 0x8000099, host-tested only.
SoC: T40 (host-tested) and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | ✅rt |
Tested (tool, date, camera, what was checked):
- T41: apitest issue-90 runtime swap 2026-10-27 .34 (open-tx-isp 42691882 + OpenIMP c34c0196): mode on/off with the calibration list reads back, frames flow, mode 7 refused
/* IMP_ISP_Tuning_AE_GetROI: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_AE_SetROI: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads a region of interest for the exposure metering.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
On T20 the 4-byte region is handed to the driver by value instead of through a pointer. Not on T40 and T41.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31 (API round trip, no visible effect expected)
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAE_IT_MAX: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the upper limit of the AE integration time.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. A failed read stores 0 in the output.
Only on T23 and T31.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetAe_IT_MAX: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets the upper limit of the AE integration time. A short limit reduces motion blur and makes the auto exposure raise gain instead.
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result.
Only on T23 and T31. On the other T-series SoCs use SetIntegrationTime in mode 2.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | 🔧a | · | · |
Used by: prudynt, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetAeFreeze: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Freezes the current exposure (non-zero) or releases it (zero).
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result.
Only on T23 and T31 (the T20 and T21 drivers have no freeze). OpenIMP's own hold for test patterns uses gain ceilings and a manual integration time instead, because those work on every driver.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47-cases 2026-10-26 .30 (API round trip, no visible effect expected)
- T31: apitest agg47-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_SetAeAlgoFunc: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Registers an application-supplied auto exposure algorithm as a table of callbacks. The function is copied and kept; it is handed to the driver the next time a sensor is enabled (and is re-registered at every enable).
Returns: 0 on success, -1 for NULL or no memory.
Register before IMP_ISP_EnableSensor. DisableSensor unregisters the algorithm again, so register it once per run of the sensor.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | 🔧a | ❌ | ❌ |
/* IMP_ISP_Tuning_GetFaceAe: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetFaceAe: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the face-priority exposure: a face window and a brightness target that the AE meters instead of the whole picture.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPFaceAttr(24 bytes on T41).
Returns: 0 on success; -1 for a bad video input number or NULL, otherwise the driver's result.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T41 uses control 0x8000035 (vendor 1.2.6 layout) and the open T41 driver serves it from the vendor AE; on a camera a face target of 40 darkened the picture and a target of 180 brightened it (mean luma 98 to 88 and 106). T40 uses the same control number, host-tested only. Not in the T10 to T31 APIs.
SoC: T40 (host-tested) and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest issue-90 runtime swap 2026-10-27 .34 (open-tx-isp 42691882 + OpenIMP c34c0196): target 40 Y 98.2->88.4, target 180 ->105.8, off restores; Get returns the request (beyond vendor)
int IMP_ISP_Tuning_GetWB(IMPISPWB *wb);
int IMP_ISP_Tuning_SetWB(IMPISPWB *wb);Reads or sets the white balance mode and, for manual mode, the red and blue gains.
Parameters
-
wb:IMPISPWB:mode(IMPISP_WB_MODE_AUTOorIMPISP_WB_MODE_MANUAL; the driver's other white-balance preset values pass through unchanged),rgainandbgain.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Manual mode needs the gains in the structure; auto mode ignores them. OpenIMP's own hold for test patterns switches to manual mode with the gains read from GetWB_Statis and restores the previous setting afterwards.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| 🔧a | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_GetWB_Statis
int IMP_ISP_Tuning_GetWB_Statis(IMPISPWB *wb);Reads the colour temperature and gains that the AWB currently uses.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. Only rgain and bgain are written (unpacked from one 32-bit word); mode is left alone.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetWB_GOL_Statis(IMPISPWB *wb);Reads the global AWB statistics (mean R, G, B of the picture).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. Only rgain and bgain are written (unpacked from one 32-bit word); mode is left alone.
SoC: only in the vendor API of T21, T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetWB_ALGO: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Selects the AWB algorithm variant with a value (0 to 2 on T23).
Parameters
-
mode: Algorithm number, passed to the driver as the control value.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T23 and T31; the value goes to the driver as the control value. T31: the driver handler exists (static audit only, no device test). T23: the open driver accepts the call like the stock module (modes 0 to 2 stored, always 0) but the call has no effect on the picture, which is why the matrix lists it as a known limitation; host build only so far.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ❌e | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T31: apitest agg47 2026-10-26 .26
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAwbAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB attribute block of IMPISPWBAttr (T40, T41), including the freeze switch awb_frz and the colour temperature ct.
Returns: T40/T41 form: first argument is the video input (IMPVI_MAIN); the return value is the driver's result, -1 for a bad input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. OpenIMP's own test-pattern hold sets awb_frz to freeze the AWB and writes the saved block back afterwards. T40 is device-tested; T41 reviewed against the code only.
SoC: T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | 🔧a |
/* IMP_ISP_Tuning_GetAwbWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the weights of the AWB zones.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. On T40 and T41 the first argument is the video input; an invalid input or NULL gives -1.
On T23 and T31 the stock driver treats this as a no-op, and OpenIMP matches that.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅○ | ? | ✅○ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAwbZoneWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbZoneWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB zone weight table (T23).
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T23 only; the table is passed to the driver unchanged (round trip tested only, the effect needs the open driver's AWB). NULL is refused by the library.
SoC: T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAwbHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB histogram parameters.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
A no-op on T23 and T31, like the stock driver.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅○ | ? | ✅○ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAwbClust: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbClust: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB cluster table. The block goes to the ISP driver unchanged (pointer argument, vendor layout).
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Only T23 and T31 have this call. On T23 the open ISP driver's AWB reads the cluster and trend tables like the stock module (emulator-identical); the Set/Get round trip is device-tested, the effect on the picture only on the host and in the emulator.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_Get/SetAwbCtTrend
/* IMP_ISP_Tuning_GetAwbCtTrend: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbCtTrend: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB colour-temperature trend table. The block goes to the ISP driver unchanged (pointer argument, vendor layout).
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Only T23 and T31. On T23 the library does not check for NULL itself; the driver result is returned. Effect on the picture: see AwbClust.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_Get/SetAwbClust
/* IMP_ISP_Tuning_GetAwbCtTrendOffset: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbCtTrendOffset: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets an offset block for the colour-temperature trend (28 bytes).
Returns: T40/T41 form: first argument is the video input (IMPVI_MAIN); the return value is the driver's result, -1 for a bad input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000015. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
/* IMP_ISP_Tuning_GetAwbConvergeStep: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAwbConvergeStep: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AWB convergence step block.
Returns: T40/T41 form: first argument is the video input (IMPVI_MAIN); the return value is the driver's result, -1 for a bad input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000016, vendor 1.2.6 layout. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
/* IMP_ISP_Tuning_GetAWBCt: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the colour temperature the AWB currently uses.
Parameters
-
ct: Pointer to a 32-bit value; the ISP driver stores the colour temperature through it.
Returns: 0 on success. -1 for a NULL pointer or outside the tuning window; otherwise the driver's result.
Only T23 and T31. The pointer itself travels in the request (the driver writes through it), the same way as the stock T31 library does.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetAwbCt: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a colour-temperature block to the AWB through the driver control; the argument is a pointer, not a number.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Only T23 and T31. Checked on the device as an API round trip only; no visible effect has been verified. On T23 the library does not check for NULL itself.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest rc3-cases 2026-10-26 .30 (API round trip, no visible effect expected)
- T31: apitest rc3-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_Awb_GetRgbCoefft: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_Awb_SetRgbCoefft: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the red, green and blue correction coefficients of the white balance.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T40: gate1026 .184 2026-10-26 (open-tx-isp 2acd1afa, OpenIMP d2b40b9c): 100x, 0 oops, apitest PASS
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_Awb_GetCwfShift(IMPISPWB *isp_wb_attr);
int IMP_ISP_Tuning_Awb_SetCwfShift(IMPISPWB *isp_wb_attr);Reads or sets the cool-white-fluorescent shift of the AWB as red and blue gains.
Parameters
-
isp_wb_attr:IMPISPWB:rgainandbgainonly.
Returns: 0 on success, -1 for NULL or outside the tuning window; otherwise the driver's result.
Both gains travel in one 32-bit control value (rgain << 16 | bgain, control 0x8000001); the driver stores them in the light-source calibration of the current day or night bank. T10, T20 and T30 only.
SoC: T10, T20, T30.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | · | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
/* IMP_ISP_Tuning_AwbSync: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Has the kernel synchronise the AWB of sensor 1 to sensor 0 (dual-sensor boards).
Returns: 0 on success; sensors 0 and 2 and above return 0 without any request; the driver error otherwise.
Only sensor 1 is synchronised.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | · |
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_SetAwbAlgoFunc: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Registers an application-supplied auto white balance algorithm as a table of callbacks; handled like SetAeAlgoFunc.
Returns: 0 on success, -1 for NULL or no memory.
Register before IMP_ISP_EnableSensor; DisableSensor unregisters it.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | 🔧a | ❌ | ❌ |
/* IMP_ISP_Tuning_GetFaceAwb: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetFaceAwb: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the face-priority white balance: the AWB uses a face rectangle supplied by the application.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPFaceAttr.
Returns: 0 on success; -1 for a bad video input number or NULL, otherwise the driver's result.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000014. T40 only; host-tested, not run on a camera.
SoC: T40 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
Simple picture controls. Brightness, contrast, saturation and sharpness are one byte; 128 is the default and the byte goes unchanged to the ISP driver (above 128 increases the effect, below decreases it).
int IMP_ISP_Tuning_GetBcshHue(unsigned char *phue);
int IMP_ISP_Tuning_SetBcshHue(unsigned char hue);Sets or reads the hue rotation (one byte).
Parameters
-
hue: Hue byte. On T40 and T41 a pointer to the byte, after the video input.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. On T40 the codes are -4 (video input out of range), -9 (NULL pointer), -5 (tuning not running) and -6 (driver refused); the T40 getter returns the byte cached by the last set (128 before any set) and does not ask the driver. T41 takes only the main input and returns -1 otherwise.
On T40 the driver maps the byte 0 to 255 onto a hue angle of 0 to 120 degrees.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅rt | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest rc3-cases 2026-10-26 .184 (API round trip, no visible effect expected)
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetContrast(unsigned char *pcontrast);
int IMP_ISP_Tuning_SetContrast(unsigned char contrast);Sets or reads the contrast, one byte, 128 is the default.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The byte goes unchanged to the ISP driver. On T40 and T41 the call takes the video input and a pointer to the byte, and the getter returns the value the application set last (it does not read the driver).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T41: apitest agg47 2026-10-26 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetSaturation(unsigned char *psat);
int IMP_ISP_Tuning_SetSaturation(unsigned char sat);Sets or reads the colour saturation, one byte, 128 is the default.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The byte goes unchanged to the ISP driver; below 128 reduces the colour. On T40 and T41 the call takes the video input and a pointer to the byte, and the getter returns the value the application set last.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅ | ✅rt | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24 (API round trip, no visible effect expected)
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
- T41: apitest agg47 2026-10-26 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_SetBrightness(unsigned char bright);Sets the brightness, one byte, 128 is the default.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The byte goes unchanged to the ISP driver. On T40 and T41 the call takes the video input and a pointer to the byte.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅+ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
- T41: apitest agg47 2026-10-26 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: On T21 the value scales the AE target by value/128, so brightness acts through the exposure control (beyond the vendor, whose T21 call changes nothing). Better than the vendor on T21.
int IMP_ISP_Tuning_GetBrightness(unsigned char *pbright);Reads the brightness value.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
On T40 and T41 the getter returns the value the application set last (default 128) and does not read the driver.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
- T41: apitest agg47 2026-10-26 .34
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: The T40 getter returned -1 in the RC1 test; it now returns the per-input cached value like the vendor library.
int IMP_ISP_Tuning_SetSharpness(unsigned char sharpness);Sets the sharpness, one byte, 128 is the default.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The byte goes unchanged to the ISP driver. On T40 and T41 the call takes the video input and a pointer to the byte.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅○ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: On T21 and one other SoC the value has no visible effect in our tests, as with the vendor library.
int IMP_ISP_Tuning_GetSharpness(unsigned char *psharpness);Reads the sharpness value.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
On T40 and T41 the getter returns the value the application set last (default 128).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetColorfxMode(IMPISPColorfxMode *pmode);
int IMP_ISP_Tuning_SetColorfxMode(IMPISPColorfxMode mode);Selects a colour effect: auto (normal), black and white, sepia, negative or vivid.
Parameters
-
mode:IMPISP_COLORFX_MODE_AUTO(0),_BW(1),_SEPIA(2),_NEGATIVE(3) or_VIVID(9).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning window; otherwise the driver's result. On T30 the call only exists as a stub that returns -1 (one message on stderr: not supported on this SoC).
Implemented as a V4L2 control of the ISP video device on T10, T20, T21 (and T31 in the library build); T23 has its own V4L2 path. Not present in the T40 and T41 libraries. Black and white, negative and vivid change the picture on T21 (checked with the image-effect test).
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅+ | · | ? | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest agg47-cases 2026-10-26 .24
Used by: timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: Sepia works on T21 although the vendor library has no effect there. Better than the vendor on T21.
/* IMP_ISP_Tuning_GetGamma: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetGamma: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the gamma curve table.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
A curve that falls anywhere is rejected. On T23 the new curve is applied at once.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅+ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest issue-121 2026-10-27 .107 (open-tx-isp b4d8eae0): Get returns the active curve (128/129 points, was all 0); same curve written back: luma unchanged; x^0.3 vs linear Y 131.6 vs 42.3
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: Applied at once on T23, where the stock behaviour is to wait. Better than the vendor on T23.
/* IMP_ISP_Tuning_GetGammaAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetGammaAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the gamma block: curve type plus a 129-entry table.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPGammaAttr(Curve_typeand the table).
Returns: 0 on success. Set returns -1 for a NULL pointer or a Curve_type that is not below IMP_ISP_GAMMA_CURVE_BUTT (4) before any driver call; Get passes the driver's result (-1 for NULL or a bad input number).
T40 and T41. The table is passed to the driver as it is. On T40 the Get is device-tested; the Set was tested on the host only. On T41 the error handling follows the vendor 1.2.6 library, not device-tested.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor.
/* IMP_ISP_Tuning_GetCCMAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetCCMAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the colour correction matrix (3x3 floats) with the manual-mode and saturation switches.
Parameters
-
attr:IMPISPCCMAttr:ManualEn,SatEn,ColorMatrix[9].
Returns: 0 on success, -1 for a NULL pointer (T23, T31, T40, T41) or outside the tuning window; otherwise the driver's result.
On T23, T31, T40 and T41 the library converts between the floats and the 40-byte driver block, as the vendor library does: byte 0 manual, byte 1 saturation, then nine words, each a sign bit plus 13 bits in steps of 1/1024 (so values outside about -8 to 8 are cut, and resolution is 1/1024). On T23 the Set also replaces negative coefficients by their absolute value in your structure (vendor behaviour); the other SoCs leave your structure alone. Not available on T10, T20, T21, T30. Device status: T40 Get tested, T41 round trip, T23 and T31 reviewed against the code only.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅ | ✅rt |
Tested (tool, date, camera, what was checked):
- T23: apitest apitest-cov 2026-10-27 .30
- T31: apitest apitest-cov 2026-10-27 .26
- T41: apitest rc3-cases 2026-10-26 .34 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetCsc_Attr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetCsc_Attr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the colour space conversion (RGB to YUV) block. The block goes to the ISP driver unchanged (pointer argument, vendor layout).
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Only T23 and T31 (device-tested on T31, round trip on T23).
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest rc3-cases 2026-10-26 .30 (API round trip, no visible effect expected)
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetISPCSCAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetISPCSCAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the colour space conversion (RGB to YUV) of T40 and T41: a colour gamut preset or a user matrix.
Parameters
-
csc:IMPISPCSCAttr:ColorGamutand, for the user gamut, the matrixCscCoef[9], offsets and clip values.
Returns: 0 on success; -1 for a bad input number, NULL, a gamut value that is not valid, or the driver's failure.
The library converts between the public floating-point matrix and the driver block (T41: 92 bytes, coefficients in 1/65536 steps; T40: 64 bytes, coefficients in 1/1024 steps), as the vendor library does. T40 is device-tested; the T41 error handling follows the vendor 1.2.6 library and has not been tested on a camera.
SoC: T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
/* IMP_ISP_GetCsccrMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetCsccrMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the mode of the chroma conversion stage (a T41 vendor call).
Returns: Not applicable.
Not provided by OpenIMP on any SoC. The matrix lists it as a gap on T41.
SoC: Vendor T41 only; missing in OpenIMP.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ❌ |
/* IMP_ISP_Tuning_GetModule_Ratio: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetModule_Ratio: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets how strongly individual ISP blocks work, as a ratio.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPModuleRatioAttr.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. On T41 the open driver applies the strengths of the 2D and 3D noise reduction, the dynamic range compression and the dead pixel correction; other fields are ignored there.
SoC: T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest apitest-cov 2026-10-27 .34
int IMP_ISP_Tuning_GetModuleControl(IMPISPModuleCtl *ispmodule);
int IMP_ISP_Tuning_SetModuleControl(IMPISPModuleCtl *ispmodule);Switches individual ISP processing blocks on or off (bypass bits).
Parameters
-
ispmodule: Bit field with one bit per processing block (IMPISPModuleCtl).
Returns: 0 on success, -1 for a NULL pointer; on T31 also when the driver refuses the request.
On T23 and T31 the mask goes to the driver. On T21 the driver request is tried and a refusal is ignored, the value being kept. On T20 the mask is only kept in the library and read back. Only the module bits the driver knows have an effect.
SoC: not in the vendor API of T10, T20, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T21: apitest apitest-cov 2026-10-27 .24
- T23: apitest apitest-cov 2026-10-27 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetBlcAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the black level correction attributes.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T23 and T31. The stock T23 driver has no black-level control, so T23 returns an error there. Checked on T31 with the API test.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅○ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetFixedContraster: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands an IMPISPFixedContrastAttr to the driver as the fixed-contrast control (T40 and T41 form with a sensor number).
Returns: 0 on success, non-zero on error.
SoC: only in the vendor API of T40
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_SetFixedContraster: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Fixes the contrast of the picture: the argument points to an IMPISPFixedContrastAttr (mode and a low and a high limit) that is handed to the driver.
Returns: 0 on success, -1 when the tuning session is not open or the pointer is NULL, otherwise the driver result.
On T23 the call goes to the sensor-0 form of the multi-camera call. On T10, T20, T21 and T30 the call does nothing and returns 0.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_SetDPStrength(uint32_t ratio);Sets the strength of the dead pixel correction in percent.
Parameters
-
ratio: 0 to 200 (percent; larger values are cut to 200).
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
The percentage is scaled to the driver's 0 to 255 range (percent times 128 / 100, rounded, at most 255) and sent as control 0x8000062 with the value inline. The return code is tested on T10, T20 and T21; the effect on the picture has not been measured. On T30 only the host test with a fake ioctl exists.
SoC: T10, T20, T21, T30.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
/* IMP_ISP_Tuning_GetDPC_Strength: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetDPC_Strength(uint32_t ratio);Sets or reads the strength of the dead pixel correction, as a percentage.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetDRC_Strength(uint32_t *ratio);
int IMP_ISP_Tuning_SetDRC_Strength(uint32_t ratio);Sets or reads the strength of the dynamic range compression (it brings out dark areas).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
On T20 the strength is limited to 255; if the driver refuses the ratio control, the call falls back to the strength field of the DRC attribute block.
SoC: only in the vendor API of T21, T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_EnableDRC(IMPISPTuningOpsMode mode);Switches the dynamic range compression (ADR) block on or off.
Parameters
-
mode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 on success; on T31 and T23 the driver's failure (-1) is returned. On the other SoCs where the symbol exists the value is only remembered in the library.
Reaches the driver on T31 and T23 only (T31: control 0x80000a3 with the mode inline).
SoC: T23 and T31.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetRawDRC(IMPISPDrcAttr *attribute);
int IMP_ISP_Tuning_SetRawDRC(IMPISPDrcAttr *attribute);Reads or sets the DRC attributes of the raw stage: mode and, for manual mode, the strength.
Parameters
-
attribute:IMPISPDrcAttr:mode(IMPISP_DRC_MANUAL,_UNLIMIT,_HIGH,_MEDIUM,_LOW,_DISABLE,_RANGE) anddrc_strength.
Returns: 0 on success, -1 for a NULL pointer or when the tuning session is not running (T10, T20); otherwise the driver's result.
T10, T20 and T21 send the mode and (in manual mode) the strength to the driver, and skip a call whose value equals the last one sent. On T10 and T20 the library keeps the strength in the shared tuning table and returns it from there. On T30 the attribute is only checked (mode must not exceed IMPISP_DRC_DISABLE) and remembered in the library; nothing reaches the hardware. On T21 the image-effect test showed no picture change.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅rt | ✅○ | · | ? | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107 (API round trip, no visible effect expected)
Used by: prudynt.
/* IMP_ISP_Tuning_GetDefog_Strength: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetDefog_Strength(uint8_t *ratio);Sets or reads the defog strength.
Parameters
-
ratio: Pointer to the strength byte (the setter takes the pointer too).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session (T10 to T31); otherwise the driver's result.
On T40 and T41 the call is an OpenIMP extension of the single-argument form: 0 to 255, 128 neutral, applied through the module ratio of the ISP firmware (the vendor's own defog strength call is a stub there), main sensor only; the getter returns 128 while the unit is not enabled.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: See Beyond the Vendor: Extensions an application can use or detect.
/* IMP_ISP_Tuning_EnableDefog: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Switches defog on or off.
Parameters
-
enable: 1 switches on, 0 off.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Only T23 and T31; the flag is passed to the driver as the control value.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: Takes the enable flag like the vendor library; an earlier OpenIMP stub always switched it on.
int IMP_ISP_Tuning_SetAntiFogAttr(int attr);Sets the anti-fog level: 0 off, 1 strong, 2 medium, 3 weak.
Returns: 0 on success, -1 without an open tuning session, otherwise the driver result; the T10 and T20 driver rejects levels above 3.
Accepted, no picture change on T21 in our tests, as with the vendor library.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅○ | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
int IMP_ISP_Tuning_GetSinterDnsAttr(IMPISPSinterDenoiseAttr *attribute);
int IMP_ISP_Tuning_SetSinterDnsAttr(IMPISPSinterDenoiseAttr *attribute);Reads or sets the spatial (2D, Sinter) noise reduction: auto or manual mode and the strength.
Parameters
-
attribute:IMPISPSinterDenoiseAttr:type(auto or manual),sinter_strength; on T10 and T20 also a range form (sval_max,sval_min).
Returns: 0 on success; -1 for a NULL pointer or, on T10 and T20, a tuning session that is not ready, or sval_max below sval_min; otherwise the driver's result.
T10 and T20 write the setting into the driver's shared tuning table; T21 sends a prepared block through a driver control. On Get the library fills the attribute even when the driver call failed (as the vendor does). On T30 the value is only remembered in the library. Not available on T23, T31, T40, T41.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | · | 🔧+ | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest agg47-cases 2026-10-26 .24
- T30: apitest agg47-cases 2026-10-26 QEMU (no camera)
Used by: prudynt.
int IMP_ISP_Tuning_GetTemperDnsAttr(IMPISPTemperDenoiseAttr *attribute);
int IMP_ISP_Tuning_SetTemperDnsAttr(IMPISPTemperDenoiseAttr *attribute);Reads or sets the temporal (3D, Temper) noise reduction: auto or manual mode and the strength.
Parameters
-
attribute:IMPISPTemperDenoiseAttr:type(IMPISP_TEMPER_DISABLE,_AUTO,_MANUAL,_RANGE) andtemper_strength.
Returns: 0 on success; -1 for a NULL pointer or, on T10 and T20, a tuning session that is not ready; otherwise the driver's result.
T10 and T20 write into the shared tuning table; the Set is ignored (returns 0) while the ISP runs in night mode. T21 uses driver controls and remembers the last values. On T30 the value is only remembered in the library. Not available on T23, T31, T40, T41.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | · | 🔧+ | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest agg47-cases 2026-10-26 .24
- T30: apitest agg47-cases 2026-10-26 QEMU (no camera)
Used by: prudynt.
int IMP_ISP_Tuning_SetTemperDnsCtl(IMPISPTemperDenoiseAttr *attribute);Run-time control of the temporal noise reduction: a type and, for the manual type, a strength.
Returns: 0 on success, -1 for NULL or no tuning session, otherwise the driver result.
T20: ignored while the ISP runs in night mode (returns 0); the type and the manual strength are sent only when they changed. T30: the value is only kept, no driver control is written. T21 sends the control to the driver.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | · | ⚠c | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
- T21: apitest agg47-cases 2026-10-26 .24 (API round trip, no visible effect expected)
int IMP_ISP_Tuning_GetSinterStrength(uint32_t *ratio);
int IMP_ISP_Tuning_SetSinterStrength(uint32_t ratio);Sets the strength of the spatial (2D) noise reduction as a ratio; 128 is the neutral value.
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result.
On T21 the strength is converted to the sinter block of the driver. On T20 it is scaled to a percentage of the table (capped at 200 percent). The vendor library uses a different driver control there.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | 🔧a | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest agg47 2026-10-26 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetTemperStrength(uint32_t *ratio);
int IMP_ISP_Tuning_SetTemperStrength(uint32_t ratio);Sets the strength of the temporal (3D) noise reduction as a ratio; 128 is the neutral value.
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result.
On T20 the strength is scaled to a percentage of the table (capped at 200 percent) and the getter returns the last value set.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | 🔧a | 🔧a | 🔧a | ? | 🔧a | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_SetMeshShadingScale(IMPISPMeshShadingScale scale);Selects the scale of the lens shading (mesh shading) correction.
Parameters
-
scale:IMPISPMeshShadingScale, passed to the driver as the control value.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
Control 0x80000a3, which writes the scale field of the shading register in the open driver. T10 is device-tested; T20 only on the host. Not in the other vendor APIs.
SoC: T10 and T20.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | 🔧h | · | · | · | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
/* IMP_ISP_Tuning_GetTmoCurve: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetTmoCurve: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the tone mapping curve.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr: The tone mapping curve block.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the block goes to the ISP driver unchanged.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
int IMP_ISP_Tuning_GetISPRunningMode(IMPISPRunningMode *pmode);
int IMP_ISP_Tuning_SetISPRunningMode(IMPISPRunningMode mode);Switches the ISP between day mode and night mode, or reads the mode.
Parameters
-
mode:IMPISP_RUNNING_MODE_DAY(0) orIMPISP_RUNNING_MODE_NIGHT(1). On T40 and T41 a pointer to the mode, after the video input.
Returns: 0 on success. -1 for a NULL pointer or outside the tuning session (T10 to T31, except T23, which does not check the session); otherwise the driver's result. On T40: -4 for a video input out of range or a mode outside the vendor range, -9 for NULL, -5 when tuning is not running on the getter, -6 when the driver refuses the getter. T41 takes only the main input.
The library does not switch the IR-cut filter or the IR LEDs; the application drives them. On T20 and T21 a successful switch re-applies brightness, contrast and saturation for the new mode. On T23 the call restarts the frame source change wait.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
See also: IMP_ISP_Tuning_Get/SetSceneMode
int IMP_ISP_Tuning_GetISPCustomMode(IMPISPTuningOpsMode *mode);
int IMP_ISP_Tuning_SetISPCustomMode(IMPISPTuningOpsMode mode);Switches the ISP to a custom parameter bank (T23, T31) and reads the state back.
Parameters
-
mode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 on success; -1 for a NULL pointer or a failed driver call. A failed Get leaves the output untouched.
T31 sends the mode to the driver (control 0x80000e7), which swaps parameter banks; Set only needs an opened tuning device, not the running tuning session. On T10, T20 and T21 the call does not exist in the vendor API; their crop is separate.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest issue-122 2026-10-27 .30 (open-tx-isp a6b4ab2e): Get 0 (was 0xffffffff), Set same value 0 (was -1); QEMU equal
- T31: apitest issue-117 2026-10-27 .26 (open-tx-isp a6b4ab2e): Set of the value read (DISABLE) 0, was -1; ENABLE without a *-cust-t31.bin stays -1 like the vendor; QEMU equal
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetSceneMode(IMPISPSceneMode *pmode);
int IMP_ISP_Tuning_SetSceneMode(IMPISPSceneMode mode);Selects a scene preset (auto, indoor, outdoor and so on).
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅○ | · | ? | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest scene 2026-10-27 .24 (#120): ret 0, NIGHT/AUTO no picture change on the open and the stock stack (stock oem-t21 handler returns 0 without effect)
Used by: timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: The vendor T21 kernel module ignores the call; OpenIMP matches that.
/* IMP_ISP_Tuning_SetFWFreeze: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sends the firmware-freeze flag (1 or 0) to the ISP driver as a tuning control.
Returns: 0 on success, -1 when the tuning session is not open, otherwise the driver result.
On T23 a value equal to the last one is not sent again. T20 and T21 use the older control interface for the same control.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | · | ? | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
- T21: apitest agg47-cases 2026-10-26 .24 (API round trip, no visible effect expected)
/* IMP_ISP_Tuning_SetISPProcess: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sends the ISP-process flag to the ISP driver as a tuning control.
Returns: 0 on success, -1 when the tuning session is not open, otherwise the driver result.
On T23 a value equal to the last one is not sent again. T20 and T21 pass the argument as the control value, the other SoCs pass a pointer to it.
SoC: only in the vendor API of T10, T20, T21, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | · | 🔧+ | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31 (API round trip, no visible effect expected)
- T20: apitest agg47-cases 2026-10-26 .107 (API round trip, no visible effect expected)
- T21: apitest agg47-cases 2026-10-26 .24 (API round trip, no visible effect expected)
- T30: apitest agg47-cases 2026-10-26 QEMU (no camera)
/* IMP_ISP_Tuning_EnableMovestate: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Tells the ISP that the camera is moving. It loads the moving-scene limits from /etc/sensor/<sensor>move.txt into the exposure control.
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
The stock T31 driver ignores the control, so there the visible effects are a key-frame request on channel 0 and the return value (-1 without tuning, otherwise 0). On T10 and T20 the driver applies the block (shorter integration time, manual 2D noise reduction while moving).
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅ | ✅○ | 🔧+ | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest issue-109 2026-10-27 .31 + QEMU: ret 0 (was -1); vendor 3.12.0 logic (SYSTEM_TAB block, same as T31), picture effect not measured, no move.txt in the image (vendor alike)
- T20: apitest issue-109 2026-10-27 .107 + QEMU: ret 0 (was -1); vendor 3.12.0 logic (SYSTEM_TAB block, same as T31), picture effect not measured, no move.txt in the image (vendor alike)
- T21: apitest movestate 2026-10-27 .24 (movestate-t21-t30, in next): IT max 2246 -> 1347 -> 2246, frames flow
- T30: QEMU T30 2026-10-27 (movestate-t21-t30): IT max 1916 -> 1149 -> 1916 (no T30 camera)
- T31: apitest agg47-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_DisableMovestate: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Ends the moving state: the exposure block captured by EnableMovestate is sent back (if the running mode has not changed) and a key frame is requested on encoder channel 0.
Returns: 0 on success, -1 outside the tuning window.
T10, T20 and T31 run the vendor library logic (captured block of control 0x800002c, the limits from move.txt in /etc/sensor/, key frame on disable). On T21 and T30 the call writes only 0 to the movestate control (no key frame). On T23 the library does the same as T31, but the stock driver does nothing with it.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅ | ✅○ | 🔧+ | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest issue-109 2026-10-27 .31 + QEMU: ret 0 (was -1); vendor 3.12.0 logic (SYSTEM_TAB block, same as T31), picture effect not measured, no move.txt in the image (vendor alike)
- T20: apitest issue-109 2026-10-27 .107 + QEMU: ret 0 (was -1); vendor 3.12.0 logic (SYSTEM_TAB block, same as T31), picture effect not measured, no move.txt in the image (vendor alike)
- T21: apitest movestate 2026-10-27 .24 (movestate-t21-t30, in next): IT max 2246 -> 1347 -> 2246, frames flow
- T30: QEMU T30 2026-10-27 (movestate-t21-t30): IT max 1916 -> 1149 -> 1916 (no T30 camera)
- T31: apitest agg47-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_StartNightMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Starts the sensor in night mode: call it after IMP_ISP_Open and before IMP_ISP_AddSensor, so the first frames already use the night settings.
Parameters
-
num: Sensor number, below 4.
Returns: 0 on success; -4 for a sensor number of 4 or more; -8 when the ISP device is not open; -1 when the driver call fails.
SoC: T40 only; missing on T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ❌ |
int IMP_ISP_Tuning_GetHVFLIP(IMPISPHVFLIP *hvflip);
int IMP_ISP_Tuning_SetHVFLIP(IMPISPHVFLIP hvflip);Sets or reads the horizontal and vertical flip as one value (normal, horizontal, vertical, both).
Parameters
-
hvflip:IMPISP_FLIP_NORMAL_MODE(0),_H_MODE(1),_V_MODE(2) or_HV_MODE(3). On T23 a value above 3 is refused. On T40 and T41 a pointer to the value after the video input.
Returns: 0 on success, -1 outside the tuning session; otherwise the driver's result. T23 refuses a value above 3 with -1. On T40: -4 (video input out of range or mode out of range), -9 (NULL), -5 (tuning not running), -6 (driver refused).
On T10 to T31 the horizontal and vertical bits are set through two separate driver controls. On T40 the getter returns the mode cached by the last set (0 before any set), because the driver has no getter.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅rt | 🔧h | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 stock 2026-10-27 .30 (API round trip, no visible effect expected)
- T31: apitest next+ko/libimp swap 2026-10-27 .26 (API round trip, no visible effect expected)
- T41: apitest agg47 2026-10-26 .34
Used by: raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetHVFlip(IMPISPHVFLIP *hvflip);Reads the combined flip; the same call as GetHVFLIP under the spelling of the newer library.
Returns: 0 on success, -1 for a NULL pointer; on T10 to T31 also outside the tuning session or when a driver read fails. On T40 the video input is checked (-4) and the cached value of the last set is returned (-9 for NULL).
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest rc3-cases 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest agg47 2026-10-26 .184
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetISPHflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetISPHflip(IMPISPTuningOpsMode mode);Sets or reads the horizontal mirror of the ISP output.
Parameters
-
mode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session (T10 to T31, except T23); otherwise the driver's result.
On T23 every set restarts the frame source change wait.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest rc3-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: prudynt, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetISPVflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
int IMP_ISP_Tuning_SetISPVflip(IMPISPTuningOpsMode mode);Sets or reads the vertical flip of the ISP output.
Parameters
-
mode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 on success, -1 for a NULL pointer (getter) or outside the tuning session (T10 to T31, except T23); otherwise the driver's result.
On T23 every set restarts the frame source change wait.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest rc3-cases 2026-10-26 .107
- T21: apitest rc3-cases 2026-10-27 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest rc3-cases 2026-10-26 .26 (API round trip, no visible effect expected)
Used by: prudynt, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetISPHVflip(IMPISPTuningOpsMode *phmode, IMPISPTuningOpsMode *pvmode);
int IMP_ISP_Tuning_SetISPHVflip(IMPISPTuningOpsMode hmode, IMPISPTuningOpsMode vmode);Sets or reads the horizontal and the vertical ISP flip in one call.
Parameters
-
hmode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLEfor the horizontal flip. -
vmode: The same for the vertical flip.
Returns: 0 on success; the first failing result of the two single flips (for example -1 outside the tuning session); -1 for a NULL pointer (Get).
The library applies the two flips one after the other, as SetISPHflip followed by SetISPVflip (Get the same way), because the control the vendor library uses for the pair is not served by the open drivers.
SoC: T10, T20 and T30.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | · | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest rc3-cases 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
/* IMP_ISP_Tuning_GetSensorHflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetSensorHflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the horizontal flip done by the sensor itself.
Parameters
-
mode: Flip on or off; Get returns it through a pointer.
Returns: 0 on success; -1 outside the tuning session or for a NULL pointer (Get); otherwise the driver's result, or -4090 when the driver call fails.
Set restarts the frame source change wait, like the ISP flip calls. The MultiCamera_ form takes a sensor number below 3 (a larger number gives -4092). If the driver call fails, Get leaves the preset 0 in the result.
SoC: T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest apitest-cov 2026-10-27 .30
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetSensorVflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetSensorVflip: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the vertical flip done by the sensor itself.
Parameters
-
mode: Flip on or off; Get returns it through a pointer.
Returns: 0 on success; -1 outside the tuning session or for a NULL pointer (Get); otherwise the driver's result, or -4090 when the driver call fails.
Same behaviour as SetSensorHflip.
SoC: T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest apitest-cov 2026-10-27 .30
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_GetFrontCrop(IMPISPFrontCrop *ispfrontcrop);
int IMP_ISP_Tuning_SetFrontCrop(IMPISPFrontCrop *ispfrontcrop);Crops the picture at the ISP input, before scaling, so a smaller window of the sensor is used.
Parameters
-
ispfrontcrop: Enable flag, position and size of the window.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Only on T23 and T31.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T31: apitest agg47 2026-10-26 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: See Beyond the Vendor: New in RC1 (since the 2026-10-06 state).
/* IMP_ISP_Tuning_SetAutoZoom: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets a crop window and scaler output for a smooth digital zoom (auto zoom).
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
SoC: only in the vendor API of T23, T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅rt | · | ✅ | ✅rt | ✅rt |
Tested (tool, date, camera, what was checked):
- T23: apitest rc3gaps2 2026-10-27 .30 (API round trip, no visible effect expected)
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest agg47-cases 2026-10-26 .184 (API round trip, no visible effect expected)
- T41: apitest next+ko/libimp swap 2026-10-27 .34 (API round trip, no visible effect expected)
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAutoZoom: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the auto zoom window set with SetAutoZoom.
Returns: 0 on success; -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. T40 and T41: -1 for a bad video input number or NULL.
The structure goes to the driver and back unchanged. T40 and T41 take the video input as first argument.
SoC: T23, T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest rc3gaps2 2026-10-27 .30
- T40: apitest agg47-cases 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetScalerLv: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Passes a scaler-level block to the ISP driver.
Returns: T31 (and T23): the driver's result; -1 outside the tuning window or for NULL (T31). T40, T41: the driver's result; -1 for a bad video input number or NULL.
On T23 the stock driver has no handler for this control and answers an error; OpenIMP matches that. On T41 the open driver handles the control (set only); older drivers had no handler and the call failed with an error.
SoC: only in the vendor API of T23, T31, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅○ | · | ✅ | · | ✅rt |
Tested (tool, date, camera, what was checked):
- T31: apitest rc3-cases 2026-10-26 .26
- T41: apitest rc3-cases 2026-10-26 .34 (API round trip, no visible effect expected)
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_SetScalerLv: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */T40/T41 name of the scaler-level call, without Tuning; sends the same driver control as ISP_Tuning_SetScalerLv.
Returns: The driver's result; -1 for a bad video input number or NULL.
SoC: T40 (host-tested only).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
int IMP_ISP_Tuning_GetWDRAttr(IMPISPTuningOpsMode *pmode);
int IMP_ISP_Tuning_SetWDRAttr(IMPISPTuningOpsMode mode);Switches the wide dynamic range processing on or off, or reads the state.
Parameters
-
mode:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 on success; -1 outside the tuning session or for a NULL pointer (Get); otherwise the driver's result.
The library remembers the last mode. Set returns 0 without a driver call when the mode is unchanged, and a failing Get hands back the remembered mode together with the driver's error. On T10 and T20 the driver refuses the switch without a WDR frame buffer.
SoC: T10, T20 and T30.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | · | · | 🔧h | · | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
/* IMP_ISP_Tuning_GetWdrOutputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetWdrOutputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Chooses how the WDR frame is delivered (fusion in the ISP or the long/short frames).
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPWdrOutputMode.
Returns: 0 on success; -1 for NULL; on T40 also -1 for a bad video input number and the driver's result otherwise.
SoC: T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅○ |
Difference from the vendor library: On T41 the open driver refuses the control. The library then still returns 0: Set stores the value and Get reads it back (0 until something is set), like the vendor library, which accepts the call without an effect.
/* IMP_ISP_Tuning_GetWdr_OutputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetWdr_OutputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the WDR output mode with the older spelling of WdrOutputMode; the 4-byte value goes to the driver unchanged.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T31 only. The call reaches the WDR tool block; a round trip is device-tested, not the effect on the picture.
SoC: only in the vendor API of T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | ✅rt | · | · |
Tested (tool, date, camera, what was checked):
- T31: apitest issue-118 2026-10-27 .26 (open-tx-isp a6b4ab2e): after WDR_ENABLE(0) Get 0 mode 0 (was -1), Get/Set same value PASS; QEMU equal
Used by: raptor.
/* IMP_ISP_WDR_ENABLE: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Switches the wide dynamic range mode of the ISP on (1) or off (0).
Parameters
-
mode: T31: the integer 0 or 1. T40 and T41: a pointer to the mode after the video input (main input only).
Returns: 0 on success. -1 when the ISP is not open or the driver refuses; on T40 and T41 also for a NULL pointer or an input other than the main one. A value other than 0 and 1 is accepted without effect.
The library remembers the last mode, and the matching getter (ISP_WDR_ENABLE_GET on T40 and T41) answers from that memory without asking the driver.
SoC: only in the vendor API of T31, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | ✅ | ✅rt | ✅ |
Tested (tool, date, camera, what was checked):
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest rc3-cases 2026-10-26 .184 (API round trip, no visible effect expected)
Used by: raptor.
/* IMP_ISP_WDR_ENABLE_GET: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the WDR mode the library last set.
Returns: 0 on success, -1 for a NULL pointer or an input other than the main one (T40 and T41).
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest rc3-cases 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor.
/* IMP_ISP_WDR_ENABLE_Get: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads whether WDR is on (0 or 1) from the mode the library keeps.
Returns: 0 on success, -1 for a NULL pointer or an ISP that is not open.
If the library holds a mode other than 0 or 1 it logs the fact and leaves the result unchanged.
SoC: only in the vendor API of T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T31: apitest next+ko/libimp swap 2026-10-27 .26
/* IMP_ISP_WDR_OPEN: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Opens the WDR path (T40 and T41 form with a sensor number). For the linear running mode the sensor and input mode go to the driver; for the WDR running mode WDR is enabled in the driver.
Returns: 0 on success, -8 for a NULL attribute or when the ISP is not open, -1 when the driver refuses, -9 for another running mode.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | ❌ |
/* IMP_ISP_Tuning_GetAfHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAfHist: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the AF histogram parameters.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
The AF statistics chain is off by default on T23.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAfWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetAfWeight: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the weights of the AF zones.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. On T40 and T41 the first argument is the video input and an invalid input or NULL gives -1.
SoC: not in the vendor API of T10, T20, T30
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAFMetrices: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AF metrics block of the ISP.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T21, T23 and T31. The block layout is the vendor's and is not interpreted by the library. On T23 the open ISP driver now collects AF statistics by default; on T31 metrics, zone, weight and histogram reads were checked on a camera.
SoC: only in the vendor API of T21, T23, T30, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAFMetricesInfo: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AF metrics information block.
Parameters
-
num: Video input (IMPVI_MAIN). -
metric:IMPISPAFMetricsInfo.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the block goes to the ISP driver unchanged and its layout is not interpreted by the library.
SoC: T40; missing on T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ❌ |
Tested (tool, date, camera, what was checked):
- T40: gate1026 .184 2026-10-26 (open-tx-isp 2acd1afa, OpenIMP d2b40b9c): 100x, 0 oops, apitest PASS
/* IMP_ISP_Tuning_GetAfStatistics: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AF statistics.
Parameters
-
num: Video input (IMPVI_MAIN). -
info:IMPISPAFStatisInfo.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through, as GetAFMetricesInfo.
SoC: T40; missing on T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ❌ |
Tested (tool, date, camera, what was checked):
- T40: gate1026 .184 2026-10-26 (open-tx-isp 2acd1afa, OpenIMP d2b40b9c): 100x, 0 oops, apitest PASS
/* IMP_ISP_Tuning_GetAfZone: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AF value of each zone.
Returns: 0 on success. -1 for a NULL pointer or outside the EnableTuning / DisableTuning window; otherwise the driver's result.
T23 and T31. See GetAFMetrices for the AF statistics source.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
int IMP_ISP_Tuning_SetAFThreshold(uint32_t threshold);Sets the AF threshold.
Parameters
-
threshold: New threshold; only the low 16 bits are kept.
Returns: 0 on success; -1 outside the tuning session.
OpenIMP has no AF algorithm on T30 that would use the value, so it is only stored.
SoC: T30 only.
int IMP_ISP_Tuning_WaitFrame(IMPISPWaitFrameAttr *attr);Blocks until the ISP has finished a frame or the timeout has expired, and reports the frame-done counter.
Parameters
-
attr:timeout(in, milliseconds) andcnt(out, 64-bit count of finished frames; also filled after a timeout on T20 and T21).
Returns: 0 on success, non-zero (-1) on timeout or error.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47-cases 2026-10-26 .31
- T20: apitest agg47-cases 2026-10-26 .107
- T21: apitest issue-110 2026-10-27 .24 (open-tx-isp 28b26d20): frame count 49->50, -ETIMEDOUT on timeout; QEMU 96->97
- T23: apitest agg47-cases 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_WaitFrameDone: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Waits for the next frame-done event of the sensor num and returns the frame counter and interrupt type of that event (T40 and T41).
Returns: 0 on success, -1 for a NULL attribute or an invalid sensor number. On T41 a timeout returns -1 with errno set to ETIMEDOUT and leaves the structure unchanged; the vendor driver returns 0 on a timeout and the caller has to compare the counter.
The first word of the attribute is the timeout. The wait happens outside the library lock, so other ISP calls are not blocked meanwhile.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
int IMP_ISP_Tuning_GetAeLuma(int *luma);Reads the mean luma of the picture as seen by the AE.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result. A failed read stores 0 in the output.
Only on T21, T23 and T31.
SoC: only in the vendor API of T21, T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | ✅ | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeState: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the state block of the AE into the structure you pass (whether the exposure has settled); the layout is defined by the driver.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Only on T23 and T31.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeZone: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the per-zone luma values of the AE grid.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
SoC: not in the vendor API of T30, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅○ | ✅○ | ✅ | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: Not served by the stock T10/T20 kernel module, so on T10 and T20 the call is a no-op that returns success.
/* IMP_ISP_Tuning_GetAeHist_Origin: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the unprocessed AE histogram.
Returns: 0 on success, -1 for a NULL pointer or outside the tuning session; otherwise the driver's result.
Only on T23 and T31.
SoC: only in the vendor API of T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T23: apitest agg47-cases 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAeStatistics: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AE statistics: a 256-bin histogram, the 5-bin split derived from histThresh and the zone data.
Parameters
-
num: Video input (IMPVI_MAIN). -
ae_statis:IMPISPAEStatisInfo.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T40 and T41. On T41 the open driver computes the values with the vendor AE since issue 90: the 256 bins add up to width times height, and the 5-bin split follows histThresh of SetStatisConfig.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest issue-90 runtime swap 2026-10-27 .34 (open-tx-isp 42691882 + OpenIMP c34c0196): 256-bin sum = 2880x1620, 5-bin split follows histThresh, zones 1..226
/* IMP_ISP_Tuning_GetAEEvList: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AE EV list (same call as GetAeEvList; the vendor header spells it GetAEEvList, the library exports GetAeEvList).
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000038. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
See also: IMP_ISP_Tuning_GetAeEvList
/* IMP_ISP_Tuning_GetAeEvList: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AE EV list (the exported spelling; GetAEEvList is the same function).
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000038. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
See also: IMP_ISP_Tuning_GetAEEvList
/* IMP_ISP_Tuning_GetAeAtList: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the AE AT list.
Parameters
-
num: Video input (IMPVI_MAIN).
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000039. T41 only.
SoC: T41 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest next+ko/libimp swap 2026-10-27 .34
int IMP_ISP_Tuning_GetAwbZone(IMPISPAWBZone *awb_zone);Reads the per-zone white balance statistics (IMPISPAWBZone: 225 red, 225 green and 225 blue values, 15 by 15 zones).
Returns: 0 on success, -1 for a NULL pointer, outside the tuning session, or when the driver has no statistics frame of the running stream; the call then does not return a zero-filled or stale block.
SoC: only in the vendor API of T10, T20, T23, T31
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | · | ✅ | · | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetAwbGlobalStatistics: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the global AWB statistics block (IMPISPAWBGlobalStatisInfo).
Returns: T40/T41 form: first argument is the video input (IMPVI_MAIN); the return value is the driver's result, -1 for a bad input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. T40 and T41.
SoC: T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
/* IMP_ISP_Tuning_GetAwbStatistics: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the per-zone AWB statistics: three 15x15 planes of 32-bit zone means (raw R, G and B before white balance), 2700 bytes in all.
Parameters
-
num: Video input (IMPVI_MAIN). -
awb_statis:IMPISPAWBStatisInfo; the planes are in the order R, G, B (awb_gat offset 900,awb_bat 1800).
Returns: 0 only if the block holds statistics. A driver error, or a block that is all zero, returns -1 with errno EAGAIN (no frame measured yet, or on T41 the last statistics are older than one second), so a consumer never takes zeros or a stale copy for a measurement.
T40 and T41 only. The symbol OpenIMP_Cap_AwbStatistics (int, 1) exists in a library that has this contract; a streamer can look it up with dlsym before relying on it. On T41 the open ISP driver is required for statistics from the running stream; the vendor T40 kernel driver copies its state regardless, which is all zero before the first statistics frame.
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: timps.
/* IMP_ISP_Tuning_GetTotalGain: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the total gain (analogue and digital together) used by the exposure.
Returns: 0 on success, -1 for a NULL pointer or when the ISP or its tuning object does not exist; otherwise the driver's result.
On T23 the call does not check the tuning session and stores the value only on success. On T20 the driver writes the value through an address that the library passes in the request.
SoC: not in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ? | ✅ | · | · |
Tested (tool, date, camera, what was checked):
- T10: apitest agg47 2026-10-26 .31
- T20: apitest agg47 2026-10-26 .107
- T21: apitest agg47 2026-10-26 .24
- T23: apitest agg47 2026-10-26 .30
- T31: apitest next+ko/libimp swap 2026-10-27 .26
Used by: prudynt, raptor, timps.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetStatisConfig: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetStatisConfig: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the statistics configuration (72-byte IMPISPStatisConfig, among others the AE histogram thresholds histThresh).
Parameters
-
num: Video input (IMPVI_MAIN). -
statis_config:IMPISPStatisConfig.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged. Control 0x8000000, same on T40 and T41. On T41 the open driver applies the thresholds to the AE statistics (device test: split changed with histThresh, original restored).
SoC: only in the vendor API of T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T40: apitest gate1026 (open-tx-isp 2acd1afa) 2026-10-26 .184
- T41: apitest issue-90 runtime swap 2026-10-27 .34 (open-tx-isp 42691882 + OpenIMP c34c0196): 256-bin sum = 2880x1620, 5-bin split follows histThresh, zones 1..226
Overlays that the ISP or the mscaler draws into the picture. The software OSD of the IMP_OSD module is the usual choice; these calls are the lower level used on some SoCs.
/* IMP_ISP_Tuning_GetMask: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetMask: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets or reads the privacy mask: up to 3 channels with 4 rectangles each, filled with a colour.
Returns: 0 on success. -1 for a NULL pointer or when the ISP tuning is not running; otherwise the driver's result (T40: -4 bad video input, -9 NULL, -6 failed ioctl).
A mask given in RGB is converted to YUV in your structure before it is sent (T31, T40 and T23, as the vendor does), so a Get returns the YUV colour. T40 keeps a copy of the structure in the library and merges the fields the driver does not return into the Get. The stock T23 driver does not handle this control, so on T23 the calls fail; use SetMaskBlock there. Not in the T41 vendor API, which has SetMaskBlock instead.
SoC: only in the vendor API of T23, T31, T40
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅○ | · | ✅ | ✅ | · |
Tested (tool, date, camera, what was checked):
- T31: apitest agg47 2026-10-26 .26
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetMaskBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets one mask block (position, size, colour, channel, picture number) with the block table of the newer SoCs.
Parameters
-
num: Video input (IMPVI_MAIN); T23 has no such argument in the single-sensor form.
Returns: T41: -1 for a bad video input or NULL, otherwise the driver's result. T23: -4090 if the driver ioctl fails.
An enabled RGB mask is converted to YUV in your structure first. The library also remembers the block at slot chx * pinum, as the vendor library does (an odd index choice that is kept). T23: the open driver stores the block; the stored masks have no visible effect yet because the scaler update that consumes them is not run. T41: the open driver handles the control (window and colour are stored and programmed at the next output start; Get always reports the block as disabled, as the vendor driver does).
SoC: only in the vendor API of T23, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧h | · | · | · | ✅ |
Tested (tool, date, camera, what was checked):
- T41: apitest agg47 2026-10-26 .34
Used by: raptor.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetMaskBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads one mask block of the mask block table.
Parameters
-
num: Video input (IMPVI_MAIN); T23 has no such argument in the single-sensor form. -
mask:IMPISPMaskBlockAttr; setchxandpinumbefore the call.
Returns: T41: -1 for a bad video input or NULL, otherwise the driver's result. T23: -4090 if the driver ioctl fails.
After the driver call the library puts back the mask type and the colour that SetMaskBlock remembered for slot chx * pinum, because the driver does not return them. The driver reports the block as disabled on T41, as the vendor driver does.
SoC: T23 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧h | · | · | · | 🔧h |
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetDrawBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetDrawBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets one block of the table the ISP draws (rectangles and lines).
Parameters
-
draw: The draw block: type, channel, picture number and the configuration with colour.
Returns: -4090 if the driver ioctl fails; otherwise 0. There is no NULL check.
Set converts an RGB colour of an enabled block of the first three types to YUV in your structure and remembers it; Get puts the remembered colour type and colour back. Whether the running driver serves the control depends on its version: check the matrix cell.
SoC: T23 only; missing on T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ❌e | · | · | · | ❌ |
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_GetDrawAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetDrawAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the drawing attributes of the ISP: the 896-byte table of lines, ranges and windows (2 channels of 16 units).
Parameters
-
num: Sensor number, below 4. -
attr:IMPISPDrawAttr.
Returns: 0 on success; -4 for a sensor number of 4 or more; -9 for NULL; -5 when tuning is not running; -6 when the driver call fails.
Set converts the RGB colour of every enabled line, range or window unit to YUV in your structure and keeps a copy; Get puts the colour type and the RGB colour back from that copy, because the driver returns only its own form.
SoC: T40 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_GetOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the ISP OSD attributes (the picture slots the ISP overlays).
Parameters
-
num: Video input. -
attr:IMPISPOSDAttr.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the public structure goes to the ISP driver unchanged.
SoC: T40 (the T23 form is ISP_Tuning_Get/SetOSDAttr).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_GetSingleOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetSingleOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the attributes of a single ISP OSD region (44-byte block).
Parameters
-
num: Sensor number, below 4. -
attr:IMPISPSingleOSDAttr.
Returns: 0 on success; -4 for a sensor number of 4 or more; -9 for NULL; -6 when the driver call fails.
SoC: T40 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | · |
/* IMP_ISP_Tuning_GetOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetOSDAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the 12-byte OSD picture format of the scaler OSD (T23, T41).
Returns: T23: 0, or the error code for a bad sensor number, or -4090 for a failed ioctl. T41: -4087 for NULL, -4084 for a sensor of 2 or more, -4091 when tuning is not enabled, -4090 for a failed ioctl.
The block is passed to the driver unchanged (T41: control 0x80000a1). Normally the ISP OSD region calls fill it for you.
SoC: only in the vendor API of T23, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | · | 🔧h |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: OpenIMP claude/t4x-api-gaps (2026-10-26): host test; no camera run yet
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_GetOSDBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetOSDBlock: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets one block of the scaler OSD block table: picture number, enable, position and size, physical picture address.
Returns: T23: 0, or the error code for a bad sensor number, or -4090 for a failed driver ioctl. T41: -4087 for NULL, -4084 for a sensor of 2 or more, -4091 when tuning is not enabled, -4090 for a failed ioctl.
T23 and T41 only; the 20-byte block is passed to the driver unchanged. Normally the ISP OSD region calls fill this table for you. On T23 the call is wired to the open driver's scaler OSD table (a block above 7 is refused there).
SoC: only in the vendor API of T23, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | · | 🔧h |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: OpenIMP claude/t4x-api-gaps (2026-10-26): host test; no camera run yet
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
Difference from the vendor library: T23: an enabled block with an odd picture width makes the call return -1 without any ioctl (the vendor library and ISP accept it, and it stops the T23 ISP). This applies to all three sensor entry points. The open driver refuses it too. T41 has no such guard.
/* IMP_ISP_Tuning_CreateOsdRgn: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Creates an ISP OSD region (a picture slot) on a channel and returns its handle.
Parameters
-
chn: Channel: T23 0 to 2 (sensor channel), T40 0 to 5, T41 0 or 1. -
attr: Must be NULL; the attributes are given later withSetOsdRgnAttr.
Returns: Handle (0 to 7) on success, -1 for a bad channel, a non-NULL attr, no free slot or an OSD module that is not initialised.
Part of the ISP-drawn picture OSD (T23, T40, T41): the picture is copied to media memory and the ISP draws it after the scaler. A region is one of 8 picture slots per channel; the handle returned by CreateOsdRgn is the slot and must equal the picture number in the attribute. The region stays hidden until ShowOsdRgn.
SoC: T23, T40, T41. Other SoCs do not support it.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: apitest next+ko/libimp swap 2026-10-27 .34: isposd: picture visible in FS ch0 (Y 111 -> 234), hide/destroy back to the background, frames flow; needs open-tx-isp next 8d3504c8 (ISP OSD) and the OpenIMP next libimp; stock agg47 ko draws nothing
Used by: raptor.
/* IMP_ISP_Tuning_DestroyOsdRgn: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Removes an ISP OSD region: hides it, frees its picture memory and gives the slot back.
Returns: 0 on success, -1 for a bad channel or handle or a region that does not exist.
SoC: T23, T40, T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: apitest next+ko/libimp swap 2026-10-27 .34: isposd: picture visible in FS ch0 (Y 111 -> 234), hide/destroy back to the background, frames flow; needs open-tx-isp next 8d3504c8 (ISP OSD) and the OpenIMP next libimp; stock agg47 ko draws nothing
Used by: raptor.
/* IMP_ISP_Tuning_SetOsdRgnAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets position, size and picture of an ISP OSD region. The picture bytes are copied into media memory; the region stays hidden until ShowOsdRgn.
Parameters
-
attr:IMPIspOsdAttrAsm:typemust be the picture type; the picture,osd_stride * osd_heightbytes, must lie inside the frame of the channel.
Returns: 0 on success, -1 for a bad channel or handle, NULL, a region that was not created, a picture that does not fit the frame, a zero size, a wrong type or when the memory cannot be allocated.
The picture memory comes from the OpenIMP rmem allocator, one block per region, counted against the pool size. On T40 and T41 overlapping shown regions are dropped like in the vendor library: a later region that overlaps an earlier shown one is not sent. T40 handles chn 0..5 and ISP channel chx; T41 draws in main-stream coordinates before the outputs are scaled. T23 pictures appear in the frame since the open ISP driver writes the stored pictures into the scaler (checked on a camera: picture visible in channel 0 and 1).
SoC: T23, T40, T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: apitest next+ko/libimp swap 2026-10-27 .34
Used by: raptor.
Difference from the vendor library: On T23 an odd picture width (osd_width) is refused with -1 before any memory is touched. The vendor library and ISP accept it, but an odd width stops the T23 ISP (frames stop in the emulator). The open T23 driver refuses it too (-EINVAL). T40 and T41 have no such guard.
See Beyond the Vendor: Behaviour that differs from the vendor (better or deviating on purpose).
/* IMP_ISP_Tuning_GetOsdRgnAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads back the attributes of an ISP OSD region; osd_enable shows whether it is currently shown.
Returns: 0 on success, -1 for a bad channel or handle, NULL, or a region that does not exist.
SoC: T23, T40, T41 (T41: host-tested only).
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | 🔧h |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: OpenIMP claude/t4x-api-gaps (2026-10-26): host test; no camera run yet
/* IMP_ISP_Tuning_ShowOsdRgn: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Shows or hides an ISP OSD region; the ISP is told with the physical picture address.
Parameters
-
showFlag: 1 shows, 0 hides.
Returns: 0 on success; -1 for a bad channel or handle, a region that does not exist or (T23) a region that has no picture yet; on T23 also the driver's failure.
Needs a picture set with SetOsdRgnAttr first. T40 and T41 re-send all regions of the channel after the change and drop shown regions that overlap an earlier one.
SoC: T23, T40, T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: apitest next+ko/libimp swap 2026-10-27 .34: isposd: picture visible in FS ch0 (Y 111 -> 234), hide/destroy back to the background, frames flow; needs open-tx-isp next 8d3504c8 (ISP OSD) and the OpenIMP next libimp; stock agg47 ko draws nothing
Used by: raptor.
/* IMP_ISP_Tuning_SetOsdPoolSize: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sets the size of the memory pool for ISP OSD pictures, in bytes.
Returns: 0 on success, -1 if size is 0 or negative (T23, T40, T41). Elsewhere the call returns 0 for a non-negative size and does nothing.
T23 starts with a pool of 1 MB. OpenIMP counts the sizes of the created regions against the latest value, so the call also works after IMP_System_Init.
SoC: only in the vendor API of T23, T40, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | ✅ | · | · | ✅ | ✅ |
Tested (tool, date, camera, what was checked):
- T23: apitest isposd 2026-10-27 .30 (open-tx-isp 8cb942a7, #127): luma 111.3 -> 234.0, hide 111.2, destroy, frames flow; stock agg47 ko draws nothing
- T41: apitest next+ko/libimp swap 2026-10-27 .34: isposd: picture visible in FS ch0 (Y 111 -> 234), hide/destroy back to the background, frames flow; needs open-tx-isp next 8d3504c8 (ISP OSD) and the OpenIMP next libimp; stock agg47 ko draws nothing
Used by: raptor.
/* IMP_ISP_OSD_Alloc: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Allocates the memory for ISP OSD data (a vendor call of the newest SoCs).
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
Not provided by OpenIMP on any SoC. T23 has its own IMP_ISPOSD_Alloc(size), which returns the virtual address of an uninitialised rmem buffer or NULL.
SoC: Missing in OpenIMP.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | · |
/* IMP_ISP_GetISPBypass: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_SetISPBypass: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */T41 form of the ISP bypass: reads or sets the bypass of the ISP for one video input.
Parameters
-
num: Video input, 0 or 1. -
enable: Pointer toIMPISPTuningOpsMode.
Returns: 0 on success; -4087 for NULL, -4084 for an input number of 2 or more; -1 when the driver refuses the value.
T41 only. Set sends the bypass ioctl of the ISP device (0x80085418) and remembers the value for the Get. Setting 0 (full ISP) works. Setting 1 (the real bypass) is refused by the open driver and the call returns -1, so the value is not remembered and Get keeps returning 0 (issue 125). Without an open ISP device the value is only remembered.
SoC: T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ✅rt |
Tested (tool, date, camera, what was checked):
- T41: apitest ispbypass 2026-10-27 .34 (#125 branch, in next): Set 0 ret 0 (was -4095), Set 1 refused -1, Get stays 0, frames flow; real bypass needs the VIC MDMA path (#125)
Used by: prudynt.
int IMP_ISP_Tuning_SetISPBypass(IMPISPTuningOpsMode enable);Switches the ISP bypass. On T10, T20, T21, T23 and T31 ENABLE (full ISP, the state after EnableSensor) does nothing and DISABLE (the real bypass) is refused.
Parameters
-
enable:IMPISP_TUNING_OPS_MODE_ENABLEor_DISABLE.
Returns: 0 for ENABLE; -1 for DISABLE. T40: 0 on success, -1 for a video input other than IMPVI_MAIN or NULL.
T10, T20, T21, T23 and T31: ENABLE is what a streamer calls at start-up; it is a no-op returning 0 and the running pipeline keeps streaming. DISABLE (the real bypass) is refused with -1 and nothing is touched, like the vendor T21 library; on the open drivers a bypassed pipeline delivers no frames (issues 119 and 126; a working real bypass is issue 129). T40 only stores the flag in the library and sends nothing to the driver. Not in the T41 library under this name (see ISP_Get/SetISPBypass).
SoC: not in the vendor API of T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| ✅rt | ✅rt | ✅rt | ✅rt | ? | ✅rt | ✅rt | · |
Tested (tool, date, camera, what was checked):
- T10: apitest ispbypass_old 2026-10-27 .31 (open-tx-isp + OpenIMP next, #119/#126): ENABLE (full ISP, the streamer call) ret 0, DISABLE (real bypass) refused with -1 like the vendor T21, nothing touched, frames flow; real bypass = #129
- T20: apitest ispbypass_old 2026-10-27 .107 (open-tx-isp + OpenIMP next, #119/#126): ENABLE (full ISP, the streamer call) ret 0, DISABLE (real bypass) refused with -1 like the vendor T21, nothing touched, frames flow; real bypass = #129
- T21: apitest ispbypass_old 2026-10-27 .24 (open-tx-isp + OpenIMP next, #119/#126): ENABLE (full ISP, the streamer call) ret 0, DISABLE (real bypass) refused with -1 like the vendor T21, nothing touched, frames flow; real bypass = #129
- T23: apitest ispbypass_old 2026-10-27 .30 (open-tx-isp + OpenIMP next, #119/#126): ENABLE (full ISP, the streamer call) ret 0, DISABLE (real bypass) refused with -1 like the vendor T21, nothing touched, frames flow; real bypass = #129
- T31: apitest ispbypass_old 2026-10-27 .26 (open-tx-isp + OpenIMP next, #119/#126): ENABLE (full ISP, the streamer call) ret 0, DISABLE (real bypass) refused with -1 like the vendor T21, nothing touched, frames flow; real bypass = #129
- T40: apitest rc3-cases 2026-10-26 .184 (API round trip, no visible effect expected)
Used by: prudynt, raptor.
/* IMP_ISP_Tuning_GetISPBypass: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */T40: reads the bypass flag stored by SetISPBypass (0 before the first Set).
Returns: 0 on success; -1 for NULL or a video input other than IMPVI_MAIN.
SoC: T40.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | · |
Tested (tool, date, camera, what was checked):
- T40: apitest rc3-cases 2026-10-26 .184
/* IMP_ISP_Bypass_Bind: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Programs the three bypass outputs of sensor num (enable flag, virtual channel index and DMA index each) so the raw frames go to the selected DMA channels.
Returns: 0 on success, -4 for a sensor number of 4 or more, -9 for a NULL attribute, -8 when the ISP device is not open, -1 when the driver refuses.
Call it after IMP_ISP_Open, and not together with IMP_ISP_Tuning_SetISPBypass.
SoC: Implemented for T40 and T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | · |
/* IMP_ISP_GetRaw: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Captures one raw frame of sensor num into a buffer that the library allocates and keeps per sensor (grown when a larger frame is requested); the buffer address and size are returned in the attribute.
Returns: 0 on success, -1 for a NULL attribute, a raw_bit other than 8 or 16, a zero size or a driver error, -2 when the buffer cannot be allocated, -4 for a sensor number of 4 or more, -8 when the ISP is not open.
raw_bit 8 uses width times height bytes, 16 uses twice that. The cache is invalidated so the data read after the call is what the DMA wrote.
SoC: Implemented for T40; not on T41.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_Tuning_GetHLDCAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_Tuning_SetHLDCAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the hardware lens distortion correction.
Parameters
-
num: Video input (IMPVI_MAIN). -
attr:IMPISPHLDCAttr.
Returns: The driver's result; -1 for a bad video input number or NULL.
Pointer pass-through: the block goes to the ISP driver unchanged (control 0x8000097).
SoC: T40 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_Tuning_SetISPLDC: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Switches the lens distortion correction on or off (a T30 vendor call).
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
Not provided by OpenIMP on any SoC. The matrix lists it as a gap on T30.
SoC: Vendor T30 only; missing in OpenIMP.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | ❌ | · | · | · |
/* IMP_ISP_LDC_GetAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */
/* IMP_ISP_LDC_SetAttr: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads or sets the lens distortion correction attributes (a T41 vendor call).
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
Not provided by OpenIMP on any SoC. The matrix lists it as a gap on T41.
SoC: Vendor T41 only; missing in OpenIMP.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ❌ |
/* IMP_ISP_LDC_INIT: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Initialises the lens distortion correction (a T41 vendor call).
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
Not provided by OpenIMP on any SoC. The matrix lists it as a gap on T41.
SoC: Vendor T41 only; missing in OpenIMP.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | · | ❌ |
GPIO, camera input selection and helper entries of the vendor library that are exported for binary compatibility. Applications seldom call them.
/* IMP_ISP_GetCameraInputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the camera input configuration last stored by SetCameraInputMode: six 32-bit words (input mode, select mode, frame-source pairing).
Parameters
-
mode: Pointer to sixuint32_t.
Returns: 0 on success, -8 if the ISP is not open, -9 for NULL.
T40 only. The words are cleared when the ISP is opened and filled by a successful SetCameraInputMode.
SoC: T40.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅ | · |
Used by: raptor.
/* IMP_ISP_SetCameraInputMode: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Passes the dual-sensor camera input mode to the ISP driver; the argument is a structure whose first field is the mode number.
Returns: T23: 0 on success, -1 when the ISP is not open, the pointer is NULL, the mode is 73 or above or its low nibble is 9 or above, or the driver refuses. T40 and T41: 0 on success, -8 when the ISP is not open, -9 for a NULL pointer, -4 for an invalid combination.
The accepted mode is remembered. Call it before the sensors are enabled.
SoC: only in the vendor API of T23, T40
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | · | 🔧h | · |
/* IMP_ISP_SetCameraInputSelect: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Chooses which sensor input is active when the camera input mode is the selecting one.
Parameters
-
vinum: 0 or 1.
Returns: 0 on success, -8 if the ISP is not open, -10 if the stored camera input mode is not the selecting mode, -9 for vinum of 2 or more, -1 if the driver ioctl fails.
T40 only. Needs a prior SetCameraInputMode with the select mode.
SoC: T40.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | ✅rt | · |
Tested (tool, date, camera, what was checked):
- T40: apitest rc3-cases 2026-10-26 .184 (API round trip, no visible effect expected)
Used by: raptor.
/* IMP_ISP_Tuning_SetSharpness_internal: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Internal sharpness entry (value and mode). On T23 it forwards to the multi-camera internal entry for sensor 0.
Returns: 0 on success, non-zero on error.
Exported for compatibility with the vendor library; applications use IMP_ISP_Tuning_SetSharpness.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetContrast_internal: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Internal contrast entry (value and mode). On T23 it forwards to the multi-camera internal entry for sensor 0; elsewhere it needs an open tuning session and logs an error without one.
Returns: 0 on success, non-zero on error.
Exported for compatibility with the vendor library; applications use IMP_ISP_Tuning_SetContrast.
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_Tuning_SetShading: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Sends the enable flag to the ISP driver as the lens-shading control.
Returns: 0 on success, -1 when the tuning session is not open, otherwise the driver result.
The T23 implementation prints a trace line to standard output on every call.
SoC: Implemented on T23 only.
/* IMP_ISP_SetAeAlgoFunc_close: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Tells the driver to stop using the custom AE algorithm and clears the registration flag.
Returns: 0 on success, -1 when the ISP is not open or the driver refuses.
Called by DisableSensor.
/* IMP_ISP_SetAeAlgoFunc_internal: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Registers the callback table directly with the driver (used by EnableSensor) and then stores it as SetAeAlgoFunc does.
Returns: 0 on success, -1 for NULL, when the sensor is already running, or when the driver refuses.
Exported for compatibility with the vendor library; applications call SetAeAlgoFunc.
/* IMP_ISP_SetAwbAlgoFunc_close: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Tells the driver to stop using the custom AWB algorithm and clears the registration flag.
Returns: 0 on success, -1 when the ISP is not open or the driver refuses.
Called by DisableSensor.
/* IMP_ISP_SetAwbAlgoFunc_internal: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Registers the AWB callback table with the driver (used by EnableSensor) and stores it as SetAwbAlgoFunc does.
Returns: 0 on success, -1 for NULL, when the sensor is already running, or when the driver refuses.
Exported for compatibility with the vendor library; applications call SetAwbAlgoFunc.
/* IMP_ISP_SET_GPIO_INIT_OR_FREE: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a GPIO description (an int array) to the driver, which claims or releases the pin.
Returns: 0 on success, -1 for NULL or when the ISP is not open, otherwise the driver result.
SoC: only in the vendor API of T23, T31, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | 🔧a | · | ❌ |
/* IMP_ISP_SET_GPIO_STA: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a GPIO description (an int array) to the driver, which sets the pin level.
Returns: 0 on success, -1 for NULL or when the ISP is not open, otherwise the driver result.
SoC: only in the vendor API of T23, T31, T41
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | 🔧a | · | ❌ |
/* IMP_ISP_SetSwitchgpio: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Selects the GPIO that switches between two sensors on a multi-camera board.
Returns: 0.
OpenIMP exports only the IMP_ISP_MultiCamera_SetSwitchgpio spelling, on T23. A one-sensor T23 has no sensor switch, so the call does nothing and returns 0.
SoC: T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧h | · | · | · | · |
Multi-sensor variants (T23): _Sec suffix (second sensor) and ISP_MultiCamera_ prefix.
/* IMP_ISP_SetPreDqtime: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a pre-dequeue time value to the ISP driver (T40 and T41).
Returns: 0 on success, -4 for a sensor number of 4 or more, -9 for a NULL pointer, -8 when the ISP device is missing, -6 when the driver refuses.
SoC: only in the vendor API of T40
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | · | · | · | 🔧h | · |
/* IMP_ISP_SetStreamOut: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a state structure to the driver's stream-out request.
Returns: 0 on success, -1 when the ISP is not open or the pointer is NULL, otherwise the driver result.
SoC: Implemented on T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | · | · | · |
/* IMP_ISP_StreamCheck: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Hands a state structure to the driver's stream-check request.
Returns: 0 on success, -1 when the ISP is not open or the pointer is NULL, otherwise the driver result.
SoC: Implemented on T23 only.
| T10 | T20 | T21 | T23 | T30 | T31 | T40 | T41 |
|---|---|---|---|---|---|---|---|
| · | · | · | 🔧a | · | · | · | · |
/* IMP_ISP_Tuning_GetNCUAlloc: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Returns the NCU buffer allocation of sensor 0 that IMP_ISP_AddSensor made, as an integer (0 when there is none).
Returns: 0 on success, non-zero on error (mostly -1; T40 and T41 return their own error codes for some failures).
SoC: Implemented on T23 only.
/* IMP_ISP_Tuning_GetNCUInfo: exported by libimp; declared in the vendor SDK header, not in the OpenIMP include directory */Reads the NCU information block of the ISP driver into the buffer you pass.
Returns: 0 on success, non-zero for a NULL pointer or a driver error.
SoC: Implemented on T23 only.
Open Ingenic camera stack
- Home
- Supported SoCs and Sensors
- Per-SoC Status
- Feature Matrix
- Architecture
- Building
- Installing and Switching
- Module Parameters
- Environment Variables
- Beyond the Vendor
- API reference
- Memory
- Troubleshooting
- Testing
- Test Pattern
- Performance
- Changelog
- Release Scheme
- Release Gates
- Live feature matrix
- Project board
Current: RC2 (v2026.10.25-rc2); RC3 in progress