Repository navigation
Performance
Maintained in the repository as docs/PERFORMANCE.md in opensensor/openimp (branch aperto); this page is a copy. Method: Testing.
Every number below is quoted from a named source; nothing is estimated. Cells with no measurement read not measured. Most cells are single-stack measurements from the test campaign; only the T20 night pair is a same-version A/B (see section 4). Do not turn single-stack cells into ratios.
Two stacks are contrasted:
-
open = open-tx-isp (kernel driver) + OpenIMP (libimp) + timps, built from the
nextbranches. -
vendor =
tx-isp-*.ko+ the Ingenic libimp.
The measurement procedure is the one documented in the OpenIMP wiki, page
Testing.md, section "A/B method against the vendor stack":
two full OTA images that differ only in the ISP choice, same streamer revision, same
camera, same scene, same lighting, one warm-up period before measuring. The recorded
quantities are streamer CPU (all threads), system CPU, resident memory, thread count,
time from start to first image, snapshot latency (average of 10), bitrate main/sub at
the same target and MemFree.
Conditions matter and are recorded per row:
| Condition that changes the result | Why |
|---|---|
| day vs night | Bitrate, CPU and snapshot latency differ strongly (the AE and the rate controller behave differently). |
| streamer revision | Older timps revisions did not encode without a viewer; two vendor baselines (cam-I, cam-J) were taken with such an older build (see section 4). |
| connected viewers | Each RTSP client adds CPU and memory to timps. |
isp_mmap_pool_kb (T10/T20) |
An 8 MiB V4L2-MMAP pool was allocated by the driver until 2026-10-04 noon; after it was turned off by default the open stack has ~8 MB more MemFree. |
-O0 vs -Os for the recovered firmware unit |
2026-10-04: keeping only the firmware unit at -O0 and turning the frame pool off changed the T20/T10 module by ≈ −140 KB. 2026-10-05: a host harness verified the firmware unit builds identically at -O0, -Os and -O2 (375 of 517 functions executed) and the module became 590 → 409 KB (T20) / 587 → 406 KB (T10) — branch only, not device-tested. |
Two different "module size" numbers appear in the sources and they are not the same
quantity: lsmod reports the in-memory module size, while the changelog/feature
matrix figures are the stripped .ko file size. Both are reported below, labelled.
Cameras are anonymised as cam-A to cam-J. Camera mapping used by the sources: cam-A = T31, cam-B/cam-G/cam-H = T23, cam-C/cam-I = T20, cam-D/cam-J = T21, cam-E = T10, cam-F = T41.
Raw measurement logs (campaign shell output, not published as files; one line per metric):
| Tag | Camera, stack, date |
|---|---|
L1 |
cam-C, T20, open, night, 2026-10-04 |
L2 |
cam-C, T20, vendor, night, 2026-10-04 (same streamer revision as L1) |
L3 |
cam-C, T20, open, day, 2026-10-05, no RTSP client |
L4 |
cam-I, T20, open, night mode, first boot after flash, 2026-10-05 |
L5 |
cam-I, T20, vendor, 2026-10-05, older streamer build, not a same-version A/B |
L6 |
cam-J, T21, vendor, day, 2026-10-05, older streamer build, not a same-version A/B |
L7 |
cam-J, T21, open stack after flashing, 2026-10-05 |
The L1/L2 pair is also published as a table in C:Late morning (2026-10-04, 09:50);
the L3 day figures are summarised in C:Early morning (2026-10-05, 02:30).
Documents (read from origin/aperto):
| Tag | Document |
|---|---|
C:<section> |
docs/OPEN_STACK_CHANGELOG.md, the named dated section |
M:<row> / M:Summary
|
docs/FEATURE_MATRIX.md, the named row or the Summary block |
B:<section> |
docs/OPENIMP_BEYOND_VENDOR.md, the named numbered section |
RD:<section> |
README.md, the named section |
W:Testing |
wiki page Testing.md, section "A/B method against the vendor stack" |
CH:vs |
docs/OPEN_STACK_CHANGELOG.md, section "Compared with the vendor stack" |
L1–L7
|
the raw measurement logs above |
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, lsmod in-memory |
616,608 B | 302,208 B | night, 2026-10-04 |
L1 (lsmod_isp=tx_isp_t20 616608), L2 (302208) |
Kernel ISP module, lsmod in-memory |
476,832 B (reported as "466 KB") | not measured | day, 2026-10-05 |
L3 (lsmod tx_isp_t20=476832), C:Early morning (2026-10-05, 02:30) ("ISP module 466 KB") |
Kernel ISP module, lsmod in-memory |
476,896 B | not measured | cam-I, night mode, first boot |
L4 (lsmod tx_isp_t20=476896) |
Kernel ISP module (T20/T10 unit rebuilt -Os, branch only) |
.ko 590 → 409 KB |
not measured | 2026-10-05, not yet device-tested |
C:Early morning (2026-10-05, 02:30) ("Module T20 590 → 409 KB, T10 587 → 406 KB") |
Kernel ISP module, stripped .ko
|
736 KB | not measured | 2026-10-04, next
|
CH:vs (T20 not in the vendor table), C:Night (2026-10-03, 20:39) ("T20 775 to 736 KB") |
| libimp size (code + data) | 594 KB | not measured | 2026-10-04 |
M:libimp size (code + data) and its note, B:1. Encoder / rate control (size bullet), C:Evening (2026-10-03) (T20 libimp 694 to 594 KB) |
| MemFree | 46,916 kB | 52,300 kB | night, 2026-10-04, streams running |
L1, L2
|
| MemFree (gain from the pool change) | +8 MB (cam-C 46.7 → 55 MB with streams) | 52,300 kB (measured before the pool change) | 2026-10-04 noon |
C:Noon (2026-10-04, 11:40 - 12:15), RD:Where it is better than the vendor stack
|
| MemFree | 54,952 kB | not measured | day, 2026-10-05, no RTSP client | L3 |
| MemFree | 52,400 kB | 50,444 kB (not comparable, see section 4) | cam-I, night mode |
L4, L5
|
| Cached | 13,592 kB | 13,784 kB | night, 2026-10-04 |
L1, L2
|
| Streamer RSS | 3,740 kB | 6,784 kB | night, 2026-10-04 |
L1, L2
|
| Streamer RSS | 4,352 kB | not measured | day, 2026-10-05 | L3 |
| Threads | 21 | 30 | night, 2026-10-04 |
L1, L2
|
| Streamer CPU | 10.5 % | 25.2 % | night, 2026-10-04 |
L1, L2, W:Testing (A/B method, example result), RD:Where it is better than the vendor stack
|
| Streamer CPU | 9.1 % | not measured | day, 2026-10-05 |
L3, C:Early morning (2026-10-05, 02:30) ("streamer CPU 9.1 %") |
| System CPU busy | 15.3 % | 33.5 % | night, 2026-10-04 |
L1, L2
|
| System CPU busy | 17.5 % | not measured | day, 2026-10-05 | L3 |
| Time to first image | 2.529891800 s | 2.976232782 s | night, 2026-10-04 |
L1, L2
|
| Snapshot latency (avg / min / max) | 0.198 / 0.144 / 0.274 s | 0.448 / 0.214 / 0.596 s | night, 2026-10-04 |
L1, L2
|
| Snapshot latency (avg / min / max) | 0.336 / 0.199 / 0.492 s | not measured | day, 2026-10-05, 10 samples ("10x") | L3 |
| Bitrate main (ch0) | 1,311 kbit/s | 1,248 kbit/s | night, 2026-10-04, 30.05 s capture, same configuration |
L1, L2
|
| Bitrate sub (ch1) | 200 kbit/s | 261 kbit/s | night, 2026-10-04, 30.05 s capture |
L1, L2
|
| IVS CPU with motion | 2.7 % (was 4.1 % before the IVS optimisation) | not measured | 2026-10-04 |
M:CPU load (documented figures), M:IVS / motion detection
|
| Hardware JPEG CPU | "~95 % less CPU per snapshot" (generic figure, not T20-specific) | not measured | 2026-10-04 |
M:CPU load (documented figures), M:JPEG / MJPEG / snapshot (note) |
| Rate control at 1200 kbit/s target | CBR 1300, VBR 1044, SMART 1019 kbit/s | not measured | 2026-10-04, OEM controller default | M:Rate-control mode (CBR/VBR/FixQP/Capped*/SMART) |
| Rate control at 1200 kbit/s target (OEM controller port, 60 s) | CBR 1435, VBR 1329, SMART 983 kbit/s (old GOP controller CBR 942) | not measured | measured on cam-C at the time of the port |
B:1. Encoder / rate control ("Measured 60 s at 1200 kbit/s: CBR 1435 ... VBR 1329, SMART 983; old GOP controller CBR 942") |
| Rate control, I-aware P budget (P2) | CBR 1583 → 1300 kbit/s (encoder stats 1244) | not measured | measured on cam-C at 1200 kbit/s | B:1. Encoder / rate control |
| RC parameters at 1200 kbit/s target |
quality_lvl 0/6 → 1130/800, change_pos 50/100 → 850/1210 kbit/s |
not measured | 2026-10-04 | M:Rate-control mode (CBR/VBR/FixQP/Capped*/SMART) |
| Video memory saved by JPEG sharing the H.264 bitstream area | −1.44 MB, plus 328 KiB in the JPEG bitstream buffer | not measured | T20/T23/T10 | B:3. JPEG / snapshot |
| IVS v2 extra CPU cost | +225 µs per 25 fps input frame (+0.6 % of a core); 1.8 ms per analysed 640×360 frame | vendor move: 1.6 ms per analysed frame | 2026-10-04 | B:4.1 Motion v2 (on by default, beyond vendor) |
| Snapshot rate | 30/30 non-empty, 0 oops | count not measured (only oops=0), 0 oops |
cam-I first boot (open); cam-C night (no snapshot count recorded) |
L4 ("snapshots 30/30 ... oops=0"); L1, L2 (oops=0), W:Testing (pass criterion 30/30) |
Notes on the T20 rows:
- The 2026-10-04 night pair (
L1/L2) is the campaign's A/B reference and is quoted in the wiki as the example result, but it was taken before the day mode was measured a second time inL3and beforeisp_mmap_pool_kb=0became the default. TheMemFreecomparison in that pair (46.9 MB open vs 52.3 MB vendor) is therefore a pre-fix number; the source itself states the gap "is ~5 MB lower because the open driver module is larger and keeps more in RAM" (C:Late morning (2026-10-04, 09:50)), and after the pool change the changelog says the open stack "now leaves more RAM free than the vendor stack on T20" (C:Noon (2026-10-04, 11:40 - 12:15): "cam-C 46.7 → 55 MB").L3(54,952 kB) confirms the higher figure. - The open
lsmodsizes differ between the 2026-10-04 night run (616,608 B) and the 2026-10-05 day run (476,832 B); this matches the change that only the recovered firmware unit stays-O0(C:Noon (2026-10-04, 11:40 - 12:15)). The A/B CPU/RSS/ latency figures inL1/L2are therefore from the older, larger module.
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, stripped .ko
|
731 KB (was 770 KB) | not measured | 2026-10-04 |
M:Kernel module size, C:Night (2026-10-03, 20:39)
|
| libimp size (code + data) | 626,032 B (~0.6 MB) | not measured | 2026-10-04 | M:libimp size (code + data) |
| MemFree with streams running | 1.9 → ~9.7 MB (after the frame pool was turned off) | not measured | 2026-10-04 before noon → after noon | C:Noon (2026-10-04, 11:40 - 12:15) |
| MemFree (device test) | 1.9–2.8 MB of 37.7 MB | not measured | 2026-10-03 | M:Video memory (rmem) / MemFree |
| ispmem | 8 → 6 MB | not measured | 2026-10-04 | C:Afternoon (2026-10-04, 14:40) |
| Streamer CPU | 5–9 % with 2 streams at 25 fps (17 % momentary with 1 stream) | not measured | 2026-10-04 | M:CPU load (documented figures) |
| Encoder CPU at 1200 kbit/s | 8.3 → 5.5 % (super-frame fix) | not measured | 2026-10-03 evening |
M:Rate-control mode (CBR/VBR/FixQP/Capped*/SMART), B:1. Encoder / rate control ("CPU 8.3 to 5.5 %") |
| Bitrate at 1200 kbit/s | 450 → 822 kbit/s, re-encodes 800 → 0 | not measured | 2026-10-03 evening |
M:Rate-control mode (CBR/VBR/FixQP/Capped*/SMART), B:1. Encoder / rate control
|
| Bitrate, CBR targets | 2500 → 3872 kbit/s, 400 → 352 kbit/s | not measured | 2026-10-04 | M:Rate-control mode |
| CBR overshoot of the old controller | +55 % at 2500 kbit/s | not measured | before the OEM-style controller | B:1. Encoder / rate control |
| MemFree gain from the pool change | 1.9 → ~9.7 MB | not measured | 2026-10-04 noon |
C:Noon (2026-10-04, 11:40 - 12:15), RD:Where it is better than the vendor stack
|
| RSS, threads, time to first image, snapshot latency, system CPU | not measured | not measured | — | — |
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, stripped .ko
|
452 KB (was 805 KB; the matrix cell gives was 760 KB, another baseline) | 616 KB | size work of 2026-10-03/04 |
CH:vs, M:Kernel module size (452 KB since all-17; an older figure of 494 KB from the first size step is superseded) |
| libimp size (code + data) | ~0.5 MB | ~1.0 MB | 2026-10-03/04 | CH:vs |
| Kernel module RAM | unchanged by the size work | not measured | 2026-10-04 | M:Kernel module size |
| Free video memory (rmem) with main+sub+MJPEG | 2.76 MB | ≈1.2 MB | 2026-10-04 |
M:Summary ("more free video memory on T21 (2.76 MB instead of ~1.2 MB)"), M:Video memory (rmem) / MemFree
|
| rmem peak | 18.4 of 23.5 MB | not measured | 2026-10-04 | C:Noon (2026-10-04, 11:40 - 12:15) |
| Streamer CPU | 15.5 % (17.5 % before the optimisation) | not measured | 2026-10-03 night → 2026-10-04 |
C:Night (2026-10-04, 00:00) ("T21 17.5 → 15.5 %") |
| ISP firmware process CPU | −10 % | not measured | 2026-10-03 evening | M:CPU load (documented figures) |
| AWB instruction count | 0.95x the vendor's, output bit-identical (was 1.41x) | reference | 2026-10-03 evening | M:CPU load (documented figures) |
| Hardware JPEG | 37 ms/job, snapshots 0.05–0.18 s | not measured | 2026-10-03 | M:JPEG / MJPEG / snapshot |
| Rate control at 1200 kbit/s | eprc: CBR 1326, VBR 1096, SMART 1071 kbit/s | not measured | 2026-10-03 | M:Rate-control mode |
| Rate control at 1200 kbit/s (complete port) | CBR 1305, VBR 1042, SMART 1090 kbit/s | not measured | 2026-10-03 | M:Rate-control mode |
Kernel ISP module, lsmod in-memory (cam-J) |
647,232 B | 615,744 B | day, 2026-10-05, older streamer build, not a same-version A/B |
L6, L7
|
| MemFree (cam-J) | 3.4 MB (after flashing the open stack) | 2.0 MB | day, 2026-10-05, older streamer build, not a same-version A/B |
L6, L7
|
| Streamer CPU (cam-J) | not measured (open) | 14.3 % | day, 2026-10-05, older streamer build | L6 |
| System CPU busy (cam-J) | not measured (open) | 36.4 % | day, 2026-10-05, older streamer build | L6 |
| Streamer RSS / threads (cam-J) | not measured (open) | 5.1 MB / 27 | day, 2026-10-05, older streamer build | L6 |
| Time to first image (cam-J) | not measured (open) | 2.38 s | day, 2026-10-05, older streamer build | L6 |
| Snapshot latency avg / min / max (cam-J) | not measured (open) | 0.46 / 0.17 / 1.13 s | day, 2026-10-05, older streamer build | L6 |
| Bitrate ch0 / ch1 (cam-J) | not measured (open) | 2792 / 441 kbit/s | day, 2026-10-05, older streamer build | L6 |
| Snapshots (cam-J) | 30/30 | not measured | after flashing the open stack, 2026-10-05 | L7 |
| Open-stack RSS, threads, time to first image, snapshot latency, CPU, system CPU | not measured | — | — | — |
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, stripped .ko
|
622 KB (was 1,047 KB, originally 1,607 KB) | 857 KB | 2026-10-03/04 |
CH:vs, M:Kernel module size
|
| libimp size (code + data) | 726 KB in the matrix (the changelog table rounds to ~0.6 MB) | ~1.26 MB | 2026-10-03/04, native encoder, no helixd |
CH:vs, M:libimp size
|
| Vendor helper libraries | none (no helixd, no vendor libimp) | helixd + vendor libimp | 2026-10-03/04 |
C:Night (2026-10-03, 20:39), M:Helper libraries
|
| Reference-frame sharing saving | ~1.5 MB video memory at 1080p (three sources) / ~1.4 MB (C:) |
ring mode used by default up to 1080p | measured on cam-B |
M:Reference-frame sharing (BUF_SHARE_CFG), B:5. Reference buffer sharing, RD:Where it is better than the vendor stack, C:Afternoon (2026-10-03) ("Saves ~1.4 MB video memory") |
| Streamer CPU | ~6–7 % for 2 streams at 25 fps | not measured | 2026-10-04 | M:CPU load (documented figures) |
| Hardware JPEG | 29 ms/job, q75 size matches libjpeg | not measured | 2026-10-03 | M:JPEG / MJPEG / snapshot |
| Long-run decode result | 2 h 34, 231,668 frames, 0 decode errors | not measured | 2026-10-04 | M:H.264 |
| Rate control at 1200 kbit/s | eprc: SMART 1141, CBR 1253, VBR 1255 kbit/s | not measured | 2026-10-03 | M:Rate-control mode |
| eprc macroblock RC deviations | 0 against the vendor (emulator) | reference | T23 and T21 | B:1. Encoder / rate control |
| IVS v2 extra CPU cost | +175 µs per 25 fps input frame (+0.4 % of a core); 1.2 ms per analysed 640×360 frame | vendor move: 1.0 ms per analysed frame | 2026-10-04 | B:4.1 Motion v2 (on by default, beyond vendor) |
| Module reload / kill -9 | 10× stop/start incl. kill -9 and 10× module reload, 0 oops |
vendor oopses on reload (T21), leaks 252 KB/cycle (T31) | 2026-10-02…04 |
B:6. Robustness (open-tx-isp and OpenIMP), M:Reload / error handling (rmmod, stop/start)
|
| MemFree, RSS, threads, time to first image, snapshot latency, system CPU | not measured | not measured | — | — |
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, stripped .ko
|
711 KB | 829 KB | 2026-10-03/04 |
CH:vs, M:Kernel module size
|
| libimp size (code + data) | ~0.57 MB | ~1.05 MB | 2026-10-03/04 | CH:vs |
| Video memory (rmem) | 36 MB (was 50 MB) | not measured | 2026-10-04 | C:Afternoon (2026-10-04, 14:40) |
| MemFree drift per module reload | 460 → 45 KB per cycle | not measured | 2026-10-02, branch t31-robust-2
|
C:Robustness: better than the vendor driver (2026-10-02); M:Reload / error handling (rmmod, stop/start) ("residual drift ~45 KB/cycle") |
| Streamer CPU | 7.9 % (was 8.7 %) | not measured | 2026-10-03/04 CPU work | C:Night (2026-10-04, 00:00) |
| Rotation CPU cost | 9 ms/frame at 15 fps (1280×704 → 704×1280) | software rotation (32×32 tiles), no CPU figure published | measured on cam-A |
M:Rotation 90°/270°, CH:vs ("Correct picture; 9 ms/frame at 15 fps") |
| Hardware JPEG CPU, 1 snapshot/s | 17 % (was 70 % with software JPEG) | not measured | cam-A |
B:3. JPEG / snapshot ("about 70 % to 17 % timps CPU at 1 snapshot/s") |
| OSD CPU cost | timps about 8 % CPU with the OSD drawn by the IPU | not measured | cam-A | B:6. Robustness (open-tx-isp and OpenIMP) |
| IVS CPU on the sub-stream | ~85 % less IVS CPU than with the vendor libimp | reference | 2026-10-04 | M:IVS / motion detection |
| Long-run decode result | 2 h 53, 260,648 frames, 1030/1030 snapshots, 0 errors | not measured | 2026-10-04 | M:H.264 |
| Rate control at 1200 / 3000 kbit/s | CBR 1210 / 2973 kbit/s (legacy controller 1511 / 3786) | not measured | 2026-10-03 | M:Rate-control mode |
| Rate control at 1200 kbit/s | VBR 1163, CappedVBR 1177, CappedQuality 1174 kbit/s | not measured | 2026-10-03 | M:Rate-control mode |
| MemFree, RSS, threads, time to first image, snapshot latency, system CPU | not measured | not measured | — | — |
| Metric | Open | Vendor | Condition / date | Source |
|---|---|---|---|---|
Kernel ISP module, stripped .ko
|
731,488 B | not measured | 2026-10-04 |
M:Kernel module size ("vendor size not measured") |
| libimp size (code + data) | 465,728 B (~0.47 MB) | not measured | 2026-10-04 | M:libimp size (code + data) |
| rmem | 26 MB (30 MB → 24 MB → 26 MB) | not measured | current image, rootfs rev7 |
M:Video memory (rmem) / MemFree ("rmem 26 MB in the current image (was 30)"), C:Late night (2026-10-03, 22:30) (24 MB), C:Afternoon (2026-10-04, 14:40) (rev6 with rmem 26M) |
| MemFree idle | 7.8 MB | not measured | 2026-10-03 night | C:Late night (2026-10-03, 22:30) |
| MemFree minimum under stress | 2.6 MB (3 streams + 2 snapshot loops, 5 min, no OOM, no reboot) | not measured | 2026-10-03 night |
C:Late night (2026-10-03, 22:30), M:Video memory
|
| Streamer CPU | ~10–12 % with the open libimp | ~27 % with the vendor libimp | momentary values, 2026-10-04 |
M:CPU load (documented figures), B:4. IVS / motion
|
| Memory under three parallel streams | OOM at 30 MB rmem; 26 MB in the test image works | not measured | current image |
RD:Status (T41), M:Video memory (rmem) / MemFree
|
| Module reload / kill -9 | 10/10 rmmod/insmod cycles, refcnt 0, 0 oops; kill -9 recovers 3/3 |
not measured | rev2 image | B:6. Robustness (open-tx-isp and OpenIMP) |
| Stress result, 5 min (3 RTSP clients + snapshots) | 0 VPU/AVPU errors, main stream High@5.1 | not measured | 2026-10-04 |
M:Long-term stability / hangs, M:Kernel soc_vpu / Helix hardening
|
| Bitrate at 400 / 1200 / 3000 kbit/s targets | 518 / 1195 / 2777 kbit/s | not measured | 2026-10-04 | M:Rate-control mode |
| RSS, threads, time to first image, snapshot latency, system CPU | not measured | not measured | — | — |
-
L5(cam-I, T20, vendor, 2026-10-05) andL6(cam-J, T21, vendor, 2026-10-05) were taken with an older streamer build than the open-stack runs. That older build barely encodes without a viewer, so the cam-I CPU value (0.3 % streamer, 3.0 % system) is not valid and is not quoted as a vendor CPU figure. The cam-J vendor row (14.3 % CPU, 36.4 % system) was taken with a viewer but is also not a same-version A/B; it is a baseline only. TheMemFree,lsmodand bitrate values are quoted and marked. -
lsmodsize vs.kofile size.L1–L5report thelsmodin-memory size;CH:vsandM:report stripped.kofile sizes. They are different quantities and are labelled as such above. Do not compare across the two. -
cam-C 2026-10-04 night A/B predates three changes:
isp_mmap_pool_kb=0(+8 MB on T20), the module size reduction (−140 KB, only the recovered firmware unit kept at-O0), and the later day-mode run. The CPU/RSS/latency comparison is still valid (both images are from the same revision), theMemFreecomparison is not current. -
Day vs night.
L1/L2are night;L3is day without an RTSP client. The snapshot latency and CPU differ (0.198 s vs 0.336 s) mainly because no client is attached inL3. Do not readL3as an improvement. -
Different streamer revisions across the campaign. Only
L1/L2come from one congruent pair (same timps revision, same scene, same lighting). Every other table cell is a single-stack measurement and must not be turned into a ratio. -
No systematic vendor comparison exists for T10, T21, T23, T31, T41. The vendor
column of those tables is mostly "not measured". The one full same-version A/B pair in the campaign
is T20 (
L1/L2); T21 has the cam-J vendor baseline of 2026-10-05 (older streamer build); the second-best-sourced comparison is the T20 day figure against a vendor value recorded earlier (C:Early morning (2026-10-05, 02:30): "MemFree 54.9 MB (vendor measured earlier 52.3 MB)"). -
T41 day/night, AE/AWB quality, audio and the temper effect are untested
(
M:ISP core / sensor bring-up(T41 cell),C:Still open (2026-10-04)), so no performance claim should be derived from T41 beyond the rows above. -
T21 module size. The newest value is 452 KB (
CH:vs, since all-17, vendor 616 KB). 494 KB was an earlier figure of the first size step and is superseded. Thelsmodin-memory size of cam-J (647,232 B open, 615,744 B vendor) is a different quantity from the stripped.kosize and must not be compared with it. -
T20/T10 module size changed again after the campaign numbers were recorded.
The
-Osfirmware build of 2026-10-05 (T20 409 KB, T10 406 KB) is a branch, not device-tested; the measuredlsmodand.kovalues above are older builds. -
Snapshot latency sampling differs.
L3explicitly records "(10x)";L1,L2andL5give an average with min/max over the same short sample, so a single outlier moves the average.L1,L2andL4recordoops=0; onlyL4records the snapshot count (30/30).
| Missing cell | What would be needed |
|---|---|
| Vendor column for T10, T21, T23, T31, T41 | One A/B image pair per SoC (same camera, same scene, same timps revision) as in W:Testing. |
| Streamer RSS and thread count for T10, T21, T23, T31, T41 (open and vendor) | The same A/B runs, recording RSS/threads. |
| Time to first image and snapshot latency for T10, T21, T23, T31, T41 | Same runs; snapshot latency as "average of 10". |
| System CPU for T10, T21, T23, T31, T41 | Same runs. |
| MemFree for T21, T23, T31, T41 (and a current vendor value for T20) |
MemFree before and after stream start, both stacks, same revision. |
T20 night A/B repeated on the current next
|
A fresh image pair after isp_mmap_pool_kb=0 and the -Os firmware change, to replace the pre-fix MemFree row. |
| Per-SoC hardware-JPEG CPU (the "~95 %" figure is generic) | CPU per snapshot job per SoC, or jobs/s measured the same way on both stacks. |
| Per-SoC IVS CPU against the vendor IVS | T20/T23 IVS benchmark with the vendor algorithm (OPENIMP_MOTION_V2=0) and the vendor libimp. |
| Vendor rate-control numbers per SoC | Same target bitrates (CBR/VBR/SMART, 60 s each) with the vendor libimp. |
| Viewer count standardisation | Define a fixed viewer set (e.g. 1 RTSP main + 1 sub) for all A/B runs. |
| T41 CPU under identical conditions (10–12 % vs 27 % are "momentary") | A steady-state measurement with a fixed viewer set and a defined scene. |
T20/T10 -Os firmware module, device-tested |
Flash the 2026-10-05 harness-verified build and repeat the T20 A/B. |
| T21 same-version A/B (cam-J has only an older-build vendor baseline) | Re-measure the vendor stack with the current streamer build, same scene and viewer set. |
All figures are quoted from the sources listed in section 2: docs/OPEN_STACK_CHANGELOG.md,
docs/FEATURE_MATRIX.md, docs/OPENIMP_BEYOND_VENDOR.md and README.md from branch
origin/aperto of openimp; the wiki page Testing.md; and the raw measurement logs in
the raw measurement logs L1 to L7. Where a number appears in more than one source the changelog section
is given as the primary citation. Nothing on this page was estimated, extrapolated or
converted between units.