Repository navigation
Picture Quality T23 sc2336p
- SoC T23N, sensor SmartSens SC2336P (1920x1080), kernel 3.10.14, uClibc, PTZ camera.
-
Open: open-tx-isp a6157440 (
direct_mode=0 isp_memopt=1) + OpenIMP 45314f31, timps (OpenIMP flavour). -
Vendor: Ingenic
tx-isp-t23.ko(H20241028a, same parameters) + sensor module from the same SDK source without the open-stack registry hook (data_interface=1 shvflip=1) + Ingenic libimp 1.3.0 (uclibc), timpsUSE_OPENIMP=0. Runtime load after a reboot, nothing flashed. - Same camera, same PTZ home position, same light (indoor, dark, IR, night mode), captures 2 minutes apart.

Sensor test pattern (0x4501 bit 3), column profile (H.264):
| Stack | Profile |
|---|---|
| vendor | 255 255 255 255 249 242 233 224 216 206 197 188 179 170 159 148 134 119 94 5 0 ... |
| open | 255 255 255 255 250 242 233 225 215 206 197 188 179 169 159 148 134 119 93 5 0 ... |
The open ISP reproduces the vendor's ramp within +-1 code value.
Scene (night/IR, monochrome):
| Metric | vendor JPEG | open JPEG | vendor H.264 | open H.264 |
|---|---|---|---|---|
| mean Y | 110.4 | 104.7 | 110.7 | 127.5 (*) |
| Y p1..p99 | 20..255 | 15..255 | 20..255 | 60..255 (*) |
| sharpness (Laplacian variance) | 606 | 631 | 583 | 484 (*) |
| noise (flat blocks) | 0.52 | 0.44 | 0.51 | 0.20 (*) |
(*) open H.264 frame taken ~60 s after start while AE was still moving; the JPEG taken a few seconds earlier is the better comparison.
Format markers:
| vendor | open | |
|---|---|---|
| JPEG | no JFIF APP0 segment; decoders assume full range, BT.601 | JFIF APP0, full range, BT.601 |
| H.264 VUI | no video_signal_type (unspecified = limited) | same |
- Tone curve on the sensor pattern: identical to the vendor.
- Scene: brightness within 5 %, sharpness and noise equal (JPEG).
- Only format difference: open JPEGs carry a JFIF header, vendor JPEGs do not. Both decode the same.
- Daylight colour comparison still to do (camera sees a dark room).
The frame source hands a synthetic NV12 pattern (grey ramps, 32 px checkerboard 16/235, eight colour bars) to the encoders (OpenIMP OPENIMP_TEST_PATTERN=1, test hook, off by default). The stream is decoded on the host and compared with the ideal picture. The vendor libimp has no frame injection, so only the open side is measured.
.
| Stream | PSNR Y | PSNR U/V | SSIM Y | bar colour error | checker 16/235 |
|---|---|---|---|---|---|
| H.264 1920x1080 | 53.4 | 73.7/73.7 | 0.9969 | 0 | 15.9/234.9 |
| H.264 640x360 | 52.5 | 68.9/68.9 | 0.9962 | 0 | 15.9/234.9 |
| H.264 320x240 | 51.3 | 65.1/64.0 | 0.9953 | 0 | 15.9/234.9 |
| JPEG 1280x720 | 54.6 | 58.9/55.9 | 0.9972 | -1 at U/V 16/34 | exact |
| JPEG 640x360 | 55.4 | 53.1/52.0 | 0.9979 | -1 same | exact |
| JPEG 320x240 / 320x180 | 53.5 / 51.7 | 48.7/48.3 / 43.0/46.0 | 0.9967 / 0.9961 | -1 same | exact |
H.264 has no VUI (decoder default range). Findings: a second H.264 channel at 1280x720 next to 1920x1080 fails on the rmem budget (rmem allocation of 1921 KB failed, error is reported cleanly); H.264 at 320x180 fails after the IDR (P-frame job timeout, VPU core reset) - also without the pattern, so independent of this test; 320x240 works.
Open Ingenic camera stack: open-tx-isp