Repository navigation
Architecture
streamer (timps) userspace
| IMP API (same signatures as the vendor SDK)
libimp.so (OpenIMP) userspace
| /dev/isp-m0, framechan*, /dev/rmem, encoder device nodes
open-tx-isp (tx-isp-<soc>.ko) + sensor module (ingenic-sdk) + VPU kernel drivers
|
hardware: sensor -> CSI -> VIC -> ISP core -> scaler -> frame channels -> encoder
-
open-tx-isp replaces the vendor
tx-isp-<soc>.ko. It is installed under the canonical module name so the SDK sensor drivers and the module load lists keep working. It provides the ISP pipeline (AE, AWB, denoise, gamma, ...), frame channels, the tuning interface used byIMP_ISP_Tuning_*, and the sensor registry under/proc/jz/sensor. -
OpenIMP replaces the vendor
libimp.so(framesource, ISP tuning, encoder, JPEG, OSD, IVS, audio I/O, system, DMA allocator). It exposes the standard IMP API. Extras that go beyond the vendor are reachable through the same calls (see Beyond the Vendor in the OpenIMP wiki). -
timps is the streamer. With the compile-time switch
USE_OPENIMPit enables the additional per-SoC controls. - A small helper,
openimp-tuningd, can keep image policy and gain feedback independent of capture ownership (installed by the thingino package).
Two reserved regions come from the kernel command line (set by the boot loader):
-
rmem: video memory for the userspace library. OpenIMP carves frame pools, encoder reference/bitstream buffers and JPEG buffers out of it through
/dev/rmem. The kernel only accepts QBUF buffers that lie inside this window (qbuf_guard). - ispmem: memory the ISP driver needs for temporal noise reduction, WDR and raw snapshots. If it is too small, features are switched off and the driver logs the shortfall.
See Memory for sizing and the shortfall log lines.
| Engine | SoCs | Notes |
|---|---|---|
Helix VPU (/dev/soc_vpu) |
T21, T23, T30 | H.264 and JPEG only. T23 uses OpenIMP's native Helix path; no vendor helper is installed any more. T21 may use IPU-based OSD. |
NVPU (jz_nvpu, the pre-Helix core behind /dev/soc_vpu) |
T10, T20 | H.264 and JPEG only. Not Helix: OpenIMP drives it with the T10 or T20 command list of the same encoder source (src/t30/t30_helix_encoder.c; the combined T10/T20 build detects the SoC at runtime). The OEM-style rate controllers read NVPU statistics registers and need the kernel patch that exposes them. T20 may use IPU-based OSD. |
| AVPU (Allegro core) | T31, T40, T41 | shared AVC/HEVC backend; T31 has hardware JPEG and the vendor Allegro rate-control core ported |
Rate control: the vendor controllers were ported per SoC (T31 Allegro core, T21/T23 "eprc", T10/T20 OEM controller). Which controller runs is logged per channel ("effective rate control").
T23 historically used a vendor helper process (helixd) linked against the OEM library. The native Helix encoder replaced it; the helper option and the hybrid install were removed from the thingino package, so T23 runs fully on OpenIMP.
On T21 and T23 the encoder shares reference frames between streams (default on, saves about 1.5 MB of video memory). OPENIMP_REF_SHARE=0 disables it. The hardware of T10/T20/T31 does not support it.