Open stack vs vendor stack: feature matrix

As of: 2026-10-25, RC2 (v2026.10.25-rc2 = OpenIMP next 7c30aa99 plus documentation, open-tx-isp next 1bf4549d plus documentation) (full history below)

Open stack = open-tx-isp (kernel driver) + OpenIMP (libimp) + timps. Vendor = tx-isp-*.ko + Ingenic libimp.

Release gates

Rules in docs/status/release.yaml. RC3: every vendor function a streamer calls works on every gate SoC. Release 1: RC3 green and the release image ran 14 days without a reset on at least 1 camera per SoC (0 unplanned reboots, 0 oops).

🟢 GREEN RC3

1787 of 1787 streamer-function cells work, 0 missing. Milestone RC3.

SoCstreamer functions that workprogressmissing
T10228/228
0
T20228/228
0
T21252/252
0
T23290/290
0
T31319/319
0
T40217/217
0
T41253/253
0

🔴 RED Release 1

Not started: the 14-day counter starts when RC3 is published and runs only on the image built from the RC3 tag. Image -, soak as of 2026-10-26 19:23. Stable days = since the later of: image first ran, last unplanned reboot, last oops (best camera per SoC). Milestone Release 1.

SoCcamerasstable daysprogressunplanned rebootsoops
T10–0.0/14
00
T20–0.0/14
00
T21–0.0/14
00
T23–0.0/14
00
T31–0.0/14
00
T40–0.0/14
00
T41–0.0/14
00
Reset events of the release image (0)
  • none

Priorities for streamers

Gaps in functions that timps, prudynt or raptor call, per SoC, sorted by the number of streamers (p prudynt, r raptor, t timps; † source only). Below the table: how much of the vendor API each area covers.

T10 no gap in a function a streamer calls
14 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss Encoder_Get/SetChnCrop
  • ❌ miss Encoder_Get/SetChnH264Demask
  • ❌ miss Encoder_Get/SetChnH264Denoise
  • ❌ miss Encoder_Get/SetChnH264FrmUsedMode
  • ❌ miss Encoder_Get/SetChnRcAttr
  • ❌ miss Encoder_PadFrame
  • ❌ miss Encoder_SetPadFrameAttr
  • ⚠ cache Encoder_Get/SetChangeRef
  • ⚠ cache Encoder_Get/SetChnDemask
  • ⚠ cache Encoder_Get/SetChnHSkip
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
  • ⚠ cache Encoder_Get/SetH264TransCfg
  • ⚠ cache Encoder_SetChnHSkipBlackEnhance
T20 no gap in a function a streamer calls
13 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss Encoder_Get/SetChnCrop
  • ❌ miss Encoder_Get/SetChnH264Demask
  • ❌ miss Encoder_Get/SetChnH264Denoise
  • ❌ miss Encoder_Get/SetChnH264FrmUsedMode
  • ❌ miss Encoder_Get/SetChnRcAttr
  • ❌ miss Encoder_PadFrame
  • ❌ miss Encoder_SetPadFrameAttr
  • ⚠ cache Encoder_Get/SetChangeRef
  • ⚠ cache Encoder_Get/SetChnDemask
  • ⚠ cache Encoder_Get/SetChnHSkip
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
  • ⚠ cache Encoder_SetChnHSkipBlackEnhance
T21 no gap in a function a streamer calls
7 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss Encoder_Get/SetChnCrop
  • ❌ miss Encoder_PadFrame
  • ❌ miss Encoder_SetChnRcTrigLevel
  • ❌ miss Encoder_SetPadFrameAttr
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
  • ⚠ cache Encoder_SetChnHSkipBlackEnhance
T23 no gap in a function a streamer calls
7 further gaps no streamer calls (lower priority)
  • ❌ err Decoder_*
  • ❌ err ISP_Tuning_Get/SetDrawBlock
  • ❌ err ISP_Tuning_SetWB_ALGO
  • ❌ err ISP_Tuning_SwitchBin
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
  • ⚠ cache Encoder_Get/Setframelossthd
  • ⚠ cache Encoder_SetMultiSectionMode
T30 no gap in a function a streamer calls 153 streamer-used functions unknown
153 streamer-used functions of unknown state (audit pending)
  • ? AI_Disable p† r† t
  • ? AI_DisableAgc p† r† t
  • ? AI_DisableChn p† r† t
  • ? AI_DisableHpf p† r† t
  • ? AI_DisableNs p† r† t
  • ? AI_Enable p† r† t
  • ? AI_EnableAgc p† r† t
  • ? AI_EnableChn p† r† t
  • ? AI_EnableHpf p† r† t
  • ? AI_EnableNs p† r† t
  • ? AI_Get/SetChnParam p† r† t
  • ? AI_Get/SetGain p† r† t
  • ? AI_Get/SetPubAttr p† r† t
  • ? AI_Get/SetVol p† r† t
  • ? AI_GetFrame p† r† t
  • ? AI_PollingFrame p† r† t
  • ? AI_ReleaseFrame p† r† t
  • ? Encoder_CreateChn p† r† t
  • ? Encoder_CreateGroup p† r† t
  • ? Encoder_DestroyChn p† r† t
  • ? Encoder_DestroyGroup p† r† t
  • ? Encoder_GetStream p† r† t
  • ? Encoder_PollingStream p† r† t
  • ? Encoder_RegisterChn p† r† t
  • ? Encoder_ReleaseStream p† r† t
  • ? Encoder_RequestIDR p† r† t
  • ? Encoder_StartRecvPic p† r† t
  • ? Encoder_StopRecvPic p† r† t
  • ? Encoder_UnRegisterChn p† r† t
  • ? FrameSource_CreateChn p† r† t
  • ? FrameSource_DestroyChn p† r† t
  • ? FrameSource_DisableChn p† r† t
  • ? FrameSource_EnableChn p† r† t
  • ? FrameSource_Get/SetChnAttr p† r† t
  • ? ISP_AddSensor p† r† t
  • ? ISP_Close p† r† t
  • ? ISP_DelSensor p† r† t
  • ? ISP_DisableSensor p† r† t
  • ? ISP_DisableTuning p† r† t
  • ? ISP_EnableSensor p† r† t
  • ? ISP_EnableTuning p† r† t
  • ? ISP_Open p† r† t
  • ? ISP_Tuning_Get/SetAeComp p† r† t
  • ? ISP_Tuning_Get/SetAntiFlickerAttr p† r† t
  • ? ISP_Tuning_Get/SetContrast p† r† t
  • ? ISP_Tuning_Get/SetHiLightDepress p† r† t
  • ? ISP_Tuning_Get/SetISPRunningMode p† r† t
  • ? ISP_Tuning_Get/SetMaxAgain p† r† t
  • ? ISP_Tuning_Get/SetMaxDgain p† r† t
  • ? ISP_Tuning_Get/SetSaturation p† r† t
  • ? ISP_Tuning_Get/SetWB p† r† t
  • ? ISP_Tuning_GetEVAttr p† r† t
  • ? ISP_Tuning_GetSensorFPS p† r† t
  • ? ISP_Tuning_GetTotalGain p† r† t
  • ? ISP_Tuning_SetBrightness p† r† t
  • ? ISP_Tuning_SetSensorFPS p† r† t
  • ? ISP_Tuning_SetSharpness p† r† t
  • ? ISP_Tuning_SetSinterStrength p† r† t
  • ? ISP_Tuning_SetTemperStrength p† r† t
  • ? IVS_DestroyChn p† r† t
  • ? IVS_DestroyGroup p† r† t
  • ? IVS_DestroyMoveInterface p† r† t
  • ? IVS_StopRecvPic p† r† t
  • ? IVS_UnRegisterChn p† r† t
  • ? OSD_CreateGroup p† r† t
  • ? OSD_CreateRgn p† r† t
  • ? OSD_DestroyGroup p† r† t
  • ? OSD_DestroyRgn p† r† t
  • ? OSD_Get/SetGrpRgnAttr p† r† t
  • ? OSD_Get/SetRgnAttr p† r† t
  • ? OSD_RegisterRgn p† r† t
  • ? OSD_SetPoolSize p† r† t
  • ? OSD_ShowRgn p† r† t
  • ? OSD_Start p† r† t
  • ? OSD_UnRegisterRgn p† r† t
  • ? System_Bind p† r† t
  • ? System_Exit p† r† t
  • ? System_GetVersion p† r† t
  • ? System_Init p† r† t
  • ? System_UnBind p† r† t
  • ? AO_SetVolMute p† r†
  • ? Encoder_FlushStream p† r†
  • ? Encoder_Get/SetChnAttrRcMode r† t
  • ? Encoder_Get/SetChnFrmRate p† r†
  • ? Encoder_GetChnAttr p† r†
  • ? Encoder_Query r† t
  • ? FrameSource_Get/SetChnFifoAttr p† r†
  • ? ISP_Tuning_Get/SetAeHist p† r†
  • ? ISP_Tuning_Get/SetAeWeight p† r†
  • ? ISP_Tuning_Get/SetAwbHist p† r†
  • ? ISP_Tuning_Get/SetAwbWeight p† r†
  • ? ISP_Tuning_Get/SetGamma p† r†
  • ? ISP_Tuning_Get/SetISPHflip p† t
  • ? ISP_Tuning_Get/SetISPVflip p† t
  • ? ISP_Tuning_GetBrightness p† r†
  • ? ISP_Tuning_GetExpr r† t
  • ? ISP_Tuning_GetSharpness p† r†
  • ? ISP_Tuning_SetISPBypass p† r†
  • ? IVS_CreateChn r† t
  • ? IVS_CreateGroup r† t
  • ? IVS_CreateMoveInterface r† t
  • ? IVS_Get/SetParam r† t
  • ? IVS_GetResult r† t
  • ? IVS_PollingResult r† t
  • ? IVS_RegisterChn r† t
  • ? IVS_ReleaseResult r† t
  • ? IVS_StartRecvPic r† t
  • ? OSD_UpdateRgnAttrData p† r†
  • ? SU_Base_GetVersion p† r†
  • ? System_GetCPUInfo p† r†
  • ? System_GetTimeStamp r† t
  • ? System_RebaseTimeStamp p† r†
  • ? AENC_* / ADEC_* r†
  • ? AI_DisableAecRefFrame r†
  • ? AI_EnableAecRefFrame r†
  • ? AI_GetFrameAndRef r†
  • ? AI_SetVolMute r†
  • ? AO_CacheSwitch r†
  • ? AO_DisableAgc r†
  • ? AO_DisableHpf r†
  • ? AO_EnableAgc r†
  • ? AO_EnableHpf r†
  • ? AO_PauseChn r†
  • ? AO_QueryChnStat r†
  • ? AO_ResumeChn r†
  • ? AO_Soft_Mute r†
  • ? AO_Soft_UNMute r†
  • ? Encoder_Get/SetMaxStreamCnt r†
  • ? Encoder_GetChnEncType r†
  • ? Encoder_GetFd r†
  • ? Encoder_SetGOPSize r†
  • ? FrameSource_GetTimedFrame r†
  • ? FrameSource_SnapFrame r†
  • ? ISP_Get/SetSensorRegister r†
  • ? ISP_Tuning_Awb_Get/SetRgbCoefft r†
  • ? ISP_Tuning_Get/SetAfHist r†
  • ? ISP_Tuning_Get/SetColorfxMode t
  • ? ISP_Tuning_Get/SetIntegrationTime t
  • ? ISP_Tuning_GetAFMetrices r†
  • ? ISP_Tuning_GetRawDRC p†
  • ? ISP_Tuning_GetWB_Statis r†
  • ? ISP_Tuning_SetRawDRC p†
  • ? ISP_Tuning_SetSceneMode t
  • ? ISP_Tuning_SetVideoDrop r†
  • ? ISP_Tuning_WaitFrame r†
  • ? IVS_CreateBaseMoveInterface r†
  • ? IVS_DestroyBaseMoveInterface r†
  • ? IVS_ReleaseData r†
  • ? OSD_SetRgnAttrWithTimestamp r†
  • ? OSD_Stop r†
  • ? System_GetBindbyDest r†
  • ? System_ReadReg32 r†
  • ? System_WriteReg32 r†
10 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss Encoder_Get/SetChnCrop
  • ❌ miss Encoder_PadFrame
  • ❌ miss Encoder_SetPadFrameAttr
  • ❌ miss ISP_Tuning_SetISPLDC
  • ⚠ cache Encoder_Get/SetChangeRef
  • ⚠ cache Encoder_Get/SetChnHSkip
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
  • ⚠ cache Encoder_SetChnHSkipBlackEnhance
  • ⚠ cache ISP_Tuning_SetTemperDnsCtl
T31 no gap in a function a streamer calls
2 further gaps no streamer calls (lower priority)
  • ❌ miss FB_*
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
T32 no OpenIMP build yet 178 vendor functions are called by a streamer (the first build has to provide them)
  • AI_Disable p† r† t†
  • AI_DisableAgc p† r† t†
  • AI_DisableChn p† r† t†
  • AI_DisableHpf p† r† t†
  • AI_DisableNs p† r† t†
  • AI_Enable p† r† t†
  • AI_EnableAgc p† r† t†
  • AI_EnableChn p† r† t†
  • AI_EnableHpf p† r† t†
  • AI_EnableNs p† r† t†
  • AI_Get/SetChnParam p† r† t†
  • AI_Get/SetGain p† r† t†
  • AI_Get/SetPubAttr p† r† t†
  • AI_Get/SetVol p† r† t†
  • AI_GetFrame p† r† t†
  • AI_PollingFrame p† r† t†
  • AI_ReleaseFrame p† r† t†
  • AO_Disable p† r† t†
  • AO_DisableChn p† r† t†
  • AO_Enable p† r† t†
  • AO_EnableChn p† r† t†
  • AO_FlushChnBuf p† r† t†
  • AO_Get/SetGain p† r† t†
  • AO_Get/SetPubAttr p† r† t†
  • AO_Get/SetVol p† r† t†
  • AO_SendFrame p† r† t†
  • Encoder_CreateChn p† r† t†
  • Encoder_CreateGroup p† r† t†
  • Encoder_DestroyChn p† r† t†
  • Encoder_DestroyGroup p† r† t†
  • Encoder_GetStream p† r† t†
  • Encoder_PollingStream p† r† t†
  • Encoder_RegisterChn p† r† t†
  • Encoder_ReleaseStream p† r† t†
  • Encoder_RequestIDR p† r† t†
  • Encoder_StartRecvPic p† r† t†
  • Encoder_StopRecvPic p† r† t†
  • Encoder_UnRegisterChn p† r† t†
  • FrameSource_CreateChn p† r† t†
  • FrameSource_DestroyChn p† r† t†

top 40 by number of streamers

T33 no OpenIMP build yet 178 vendor functions are called by a streamer (the first build has to provide them)
  • AI_Disable p† r† t†
  • AI_DisableAgc p† r† t†
  • AI_DisableChn p† r† t†
  • AI_DisableHpf p† r† t†
  • AI_DisableNs p† r† t†
  • AI_Enable p† r† t†
  • AI_EnableAgc p† r† t†
  • AI_EnableChn p† r† t†
  • AI_EnableHpf p† r† t†
  • AI_EnableNs p† r† t†
  • AI_Get/SetChnParam p† r† t†
  • AI_Get/SetGain p† r† t†
  • AI_Get/SetPubAttr p† r† t†
  • AI_Get/SetVol p† r† t†
  • AI_GetFrame p† r† t†
  • AI_PollingFrame p† r† t†
  • AI_ReleaseFrame p† r† t†
  • AO_Disable p† r† t†
  • AO_DisableChn p† r† t†
  • AO_Enable p† r† t†
  • AO_EnableChn p† r† t†
  • AO_FlushChnBuf p† r† t†
  • AO_Get/SetGain p† r† t†
  • AO_Get/SetPubAttr p† r† t†
  • AO_Get/SetVol p† r† t†
  • AO_SendFrame p† r† t†
  • Encoder_CreateChn p† r† t†
  • Encoder_CreateGroup p† r† t†
  • Encoder_DestroyChn p† r† t†
  • Encoder_DestroyGroup p† r† t†
  • Encoder_GetStream p† r† t†
  • Encoder_PollingStream p† r† t†
  • Encoder_RegisterChn p† r† t†
  • Encoder_ReleaseStream p† r† t†
  • Encoder_RequestIDR p† r† t†
  • Encoder_StartRecvPic p† r† t†
  • Encoder_StopRecvPic p† r† t†
  • Encoder_UnRegisterChn p† r† t†
  • FrameSource_CreateChn p† r† t†
  • FrameSource_DestroyChn p† r† t†

top 40 by number of streamers

T40 no gap in a function a streamer calls
6 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss EmuFrameSource_*
  • ❌ miss ISP_SetAeAlgoFunc
  • ❌ miss ISP_SetAwbAlgoFunc
  • ❌ miss SU_ADC_Init
  • ⚠ cache Encoder_Get/SetFisheyeEnableStatus
T41 no gap in a function a streamer calls
37 further gaps no streamer calls (lower priority)
  • ❌ miss Decoder_*
  • ❌ miss EmuFrameSource_*
  • ❌ miss Encoder_Get/SetChnSeiAttr
  • ❌ miss Encoder_Get/SetFisheyeEnableStatus
  • ❌ miss Encoder_SetAvpuBsSize
  • ❌ miss Encoder_SetFrameRelease
  • ❌ miss ISP_Get/SetCsccrMode
  • ❌ miss ISP_Get/SetInternalChnAttr
  • ❌ miss ISP_LDC_Get/SetAttr
  • ❌ miss ISP_LDC_INIT
  • ❌ miss ISP_RAW_RwControl
  • ❌ miss ISP_SET_GPIO_INIT_OR_FREE
  • ❌ miss ISP_SET_GPIO_STA
  • ❌ miss ISP_SetAeAlgoFunc
  • ❌ miss ISP_SetAwbAlgoFunc
  • ❌ miss ISP_SetVicDoneCbFunc
  • ❌ miss ISP_StartNightMode
  • ❌ miss ISP_Tuning_Get/SetDrawBlock
  • ❌ miss ISP_Tuning_Get/SetFaceAeWeiget
  • ❌ miss ISP_Tuning_GetAeBv
  • ❌ miss ISP_Tuning_GetAEFlickerFlag
  • ❌ miss ISP_Tuning_GetAFMetricesInfo
  • ❌ miss ISP_Tuning_GetAfStatistics
  • ❌ miss ISP_Tuning_GetFaceAeLuma
  • ❌ miss ISP_Tuning_SetTmoFaceae
  • ❌ miss ISP_WDR_OPEN
  • ❌ miss OSD_Get/SetRgnAttr_ISP
  • ❌ miss OSD_GetRegionLuma
  • ❌ miss SU_ADC_Init
  • ❌ err SU_Base_SetWkupMode
  • ❌ miss SU_Battery_GetCapacity
  • ❌ miss SU_Battery_GetEvent
  • ❌ miss SU_Battery_GetStatus
  • ❌ miss SU_Battery_GetVoltageUV
  • ⚠ cache Encoder_Get/SetChnRoiAttr
  • ⚠ cache Encoder_SetChnMapRoi
  • ⚠ cache ISP_Tuning_Get/SetAeConvergeStep

Long-term backlog

Separate from the streamer priorities: vendor functions that are missing, partial or of unknown state and that no streamer calls today, per SoC, grouped by area with the suggested action (implement / documented ENOTSUP / not applicable). For T32/T33 (no build yet) all vendor functions no streamer calls.

T10 — 18 functions no streamer calls today

Encoder (and decoder) (15)

implement (15): Decoder_*, Encoder_Get/SetChangeRef, Encoder_Get/SetChnCrop, Encoder_Get/SetChnDemask, Encoder_Get/SetChnH264Demask, Encoder_Get/SetChnH264Denoise, Encoder_Get/SetChnH264FrmUsedMode, Encoder_Get/SetChnHSkip, Encoder_Get/SetChnRcAttr, Encoder_Get/SetFisheyeEnableStatus, Encoder_Get/SetH264TransCfg, Encoder_PadFrame, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnRcTrigLevel, Encoder_SetPadFrameAttr

System / sysutils / log (3)

implement (3): Phys_to_Virt, Sp_Alloc, Virt_to_Phys

T20 — 17 functions no streamer calls today

Encoder (and decoder) (14)

implement (14): Decoder_*, Encoder_Get/SetChangeRef, Encoder_Get/SetChnCrop, Encoder_Get/SetChnDemask, Encoder_Get/SetChnH264Demask, Encoder_Get/SetChnH264Denoise, Encoder_Get/SetChnH264FrmUsedMode, Encoder_Get/SetChnHSkip, Encoder_Get/SetChnRcAttr, Encoder_Get/SetFisheyeEnableStatus, Encoder_PadFrame, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnRcTrigLevel, Encoder_SetPadFrameAttr

System / sysutils / log (3)

implement (3): Phys_to_Virt, Sp_Alloc, Virt_to_Phys

T21 — 10 functions no streamer calls today

Encoder (and decoder) (7)

implement (7): Decoder_*, Encoder_Get/SetChnCrop, Encoder_Get/SetFisheyeEnableStatus, Encoder_PadFrame, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnRcTrigLevel, Encoder_SetPadFrameAttr

System / sysutils / log (3)

implement (3): Phys_to_Virt, Sp_Alloc, Virt_to_Phys

T23 — 27 functions no streamer calls today

ISP tuning (2)

implement (2): ISP_Tuning_Get/SetDrawBlock, ISP_Tuning_SwitchBin

AE / AWB / AF (1)

implement (1): ISP_Tuning_SetWB_ALGO

Encoder (and decoder) (8)

implement (8): Decoder_*, Encoder_Get/SetFisheyeEnableStatus, Encoder_Get/Setframelossthd, Encoder_PadFrame, Encoder_SetChnRcTrigLevel, Encoder_SetMultiSectionMode, Encoder_SetPadFrameAttr, Encoder_SetRdBufShare

OSD (2)

implement (2): OSD_Alloc, OSD_UpdateRgnAttrData_ISP

System / sysutils / log (14)

implement (14): ISPOSD_Alloc, MemPool_GetById, MemPool_InitPool, Phys_to_Virt, PoolAlloc, PoolAlloc_Dump, PoolAlloc_Get_Attr, PoolAlloc_Set_Attr, PoolFlushCache, PoolFree, PoolPhys_to_Virt, PoolVirt_to_Phys, Sp_Alloc, Virt_to_Phys

T30 — 79 functions no streamer calls today

ISP tuning (4)

implement (4): ISP_Tuning_GetSceneMode, ISP_Tuning_SetFWFreeze, ISP_Tuning_SetISPLDC, ISP_Tuning_SetTemperDnsCtl

AE / AWB / AF (2)

implement (2): ISP_Tuning_AE_Get/SetROI, ISP_Tuning_SetExpr

Encoder (and decoder) (20)

implement (20): Decoder_*, Encoder_Get/SetChangeRef, Encoder_Get/SetChnColor2Grey, Encoder_Get/SetChnCrop, Encoder_Get/SetChnDenoise, Encoder_Get/SetChnHSkip, Encoder_Get/SetChnROI, Encoder_Get/SetFisheyeEnableStatus, Encoder_Get/SetH264TransCfg, Encoder_Get/SetH265TransCfg, Encoder_Get/SetJpegeQl, Encoder_Get/SetMbRC, Encoder_Get/SetQpgMode, Encoder_Get/SetSuperFrameCfg, Encoder_InsertUserData, Encoder_PadFrame, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnRcTrigLevel, Encoder_SetChnResizeMode, Encoder_SetPadFrameAttr

FrameSource (6)

implement (6): FrameSource_Get/SetDelay, FrameSource_Get/SetFrameDepth, FrameSource_Get/SetMaxDelay, FrameSource_GetFrame, FrameSource_ReleaseFrame, FrameSource_SetSource

Audio (12)

implement (12): AI_DisableAec, AI_EnableAec, AO_ClearChnBuf, AO_Disable, AO_DisableChn, AO_Enable, AO_EnableChn, AO_FlushChnBuf, AO_Get/SetGain, AO_Get/SetPubAttr, AO_Get/SetVol, AO_SendFrame

System / sysutils / log (35)

implement (31): Phys_to_Virt, Sp_Alloc, SU_ADC_DisableChn, SU_ADC_EnableChn, SU_ADC_Exit, SU_ADC_GetChnValue, SU_Base_DisableAlarm, SU_Base_EnableAlarm, SU_Base_Get/SetAlarm, SU_Base_Get/SetTime, SU_Base_GetDevID, SU_Base_GetModelNumber, SU_Base_PollingAlarm, SU_Base_Raw2SUTime, SU_Base_Reboot, SU_Base_Suspend, SU_Base_SUTime2Raw, SU_CIPHER_ConfigHandle, SU_CIPHER_CreateHandle, SU_CIPHER_Decrypt, SU_CIPHER_DestroyHandle, SU_CIPHER_Encrypt, SU_CIPHER_Exit, SU_CIPHER_Init, SU_Key_CloseEvent, SU_Key_DisableEvent, SU_Key_EnableEvent, SU_Key_OpenEvent, SU_Key_ReadEvent, SU_LED_Command, Virt_to_Phys

not applicable (4): SU_Battery_GetCapacity, SU_Battery_GetEvent, SU_Battery_GetStatus, SU_Battery_GetVoltageUV

T31 — 19 functions no streamer calls today

Encoder (and decoder) (2)

implement (2): Encoder_ClearPoolId, Encoder_Get/SetFisheyeEnableStatus

FrameSource (3)

implement (3): FB_*, FrameSource_ClearPoolId, FrameSource_SetFrameDepthCopyType

System / sysutils / log (14)

implement (14): MemPool_GetById, MemPool_InitPool, MemPool_Release, Phys_to_Virt, PoolAlloc, PoolAlloc_Dump, PoolAlloc_Get_Attr, PoolAlloc_Set_Attr, PoolFlushCache, PoolFree, PoolPhys_to_Virt, PoolVirt_to_Phys, Sp_Alloc, Virt_to_Phys

T32 — 316 functions no streamer calls today

ISP tuning (56)

implement (56): ISP_AddSensor_Free, ISP_AddSensor_Process, ISP_Get/SetCsccrMode, ISP_Get/SetInternalChnAttr, ISP_GET_DriverMode, ISP_GetFrameDropOnce, ISP_GPIOSwitchConfig, ISP_GPIOSwitchTrigger, ISP_HB_GetAttr, ISP_HB_SetAttr, ISP_LDC_Get/SetAttr, ISP_LDC_GetMode, ISP_LDC_INIT, ISP_LDC_OfflineCreateJob, ISP_LDC_OfflineCreateJobExt, ISP_LDC_OfflineDestroyJob, ISP_LDC_OfflineInit, ISP_LDC_OfflineSubmitTask, ISP_LDC_OfflineUpdateLutToJob, ISP_LDC_OnlineGetFunc, ISP_LDC_OnlineGetLut, ISP_LDC_OnlineGetLutBufMode, ISP_LDC_OnlineGetState, ISP_LDC_OnlineGetStrength, ISP_LDC_OnlineInit, ISP_LDC_OnlineSetLut, ISP_LDC_OnlineSetLutBufMode, ISP_LDC_OnlineSetState, ISP_LDC_OnlineSetStrength, ISP_LDC_SetMode, ISP_OneShotDisable, ISP_OneShotDropCnt, ISP_OneShotEnable, ISP_OneShotTick, ISP_OSD_Alloc, ISP_PM_GetMode, ISP_PM_SetMode, ISP_PM_SetOneByOneCallback, ISP_PM_WaitAllDone, ISP_SetCameraInputMode, ISP_SetFrameDropOnce, ISP_StartNightMode, ISP_Tuning_Get/SetDrawBlock, ISP_Tuning_Get/SetISPCSCAttr, ISP_Tuning_Get/SetModule_Ratio, ISP_Tuning_Get/SetStatisConfig, ISP_Tuning_Get/SetWdrOutputMode, ISP_Tuning_GetAutoZoom, ISP_Tuning_GetBcshRGBOffsetAttr, ISP_Tuning_GetMaskBlock, ISP_Tuning_GetMultiSensorEffect, ISP_Tuning_SetBcshRGBOffsetAttr, ISP_Tuning_SetMultiSensorEffect, ISP_Tuning_SetTmoFaceae, ISP_Tuning_WaitFrameDone, ISP_WDR_OPEN

AE / AWB / AF (27)

implement (27): ISP_SetAeAlgoFunc, ISP_SetAwbAlgoFunc, ISP_Tuning_Get/SetAeExpList, ISP_Tuning_Get/SetAeExprInfo, ISP_Tuning_Get/SetAwbAttr, ISP_Tuning_Get/SetAwbCtTrendOffset, ISP_Tuning_Get/SetFaceAe, ISP_Tuning_Get/SetFaceAeWeiget, ISP_Tuning_Get/SetFaceAwb, ISP_Tuning_GetAEFlickerFlag, ISP_Tuning_GetAeLightCompensation, ISP_Tuning_GetAeOnlyReadAttr, ISP_Tuning_GetAeStartAttr, ISP_Tuning_GetAeStatistics, ISP_Tuning_GetAeTargetAttr, ISP_Tuning_GetAFMetricesInfo, ISP_Tuning_GetAfStatistics, ISP_Tuning_GetAwbGlobalStatistics, ISP_Tuning_GetAwbOnlyReadAttr, ISP_Tuning_GetFaceAeLuma, ISP_Tuning_GetMultiSensorAeEffect, ISP_Tuning_GetMultiSensorAWBEffect, ISP_Tuning_SetAeLightCompensation, ISP_Tuning_SetAeStartAttr, ISP_Tuning_SetAeTargetAttr, ISP_Tuning_SetMultiSensorAeEffect, ISP_Tuning_SetMultiSensorAWBEffect

Encoder (and decoder) (73)

implement (73): Encoder_ClearPoolId, Encoder_Get/SetChangeRef, Encoder_Get/SetChnColor2Grey, Encoder_Get/SetChnCrop, Encoder_Get/SetChnDenoise, Encoder_Get/SetChnFrmUsedMode, Encoder_Get/SetChnHSkip, Encoder_Get/SetChnROI, Encoder_Get/SetFisheyeEnableStatus, Encoder_Get/SetGDRCfg, Encoder_Get/SetH264TransCfg, Encoder_Get/SetH265TransCfg, Encoder_Get/SetMbRC, Encoder_Get/SetQpgMode, Encoder_Get/SetSuperFrameCfg, Encoder_GetGOPSize, Encoder_GetH264Vui, Encoder_GetH265Vui, Encoder_GetJpegQp, Encoder_GetMotionQuality, Encoder_GetPskipCfg, Encoder_GetSrdCfg, Encoder_InputJpege, Encoder_InputJpege_Ex, Encoder_InsertUserData, Encoder_KernEnc_GetStatus, Encoder_KernEnc_GetStream, Encoder_KernEnc_Release, Encoder_KernEnc_Stop, Encoder_MappingTransform, Encoder_MultiProcessExit, Encoder_MultiProcessInit, Encoder_PadFrame, Encoder_RequestGDR, Encoder_RequestPskip, Encoder_SetAutoVui, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnMapRoi, Encoder_SetChnQpBoundsPerFrame, Encoder_SetChnQpgAI, Encoder_SetChnQpgAI_Yuv, Encoder_SetChnQpgAIEnable, Encoder_SetChnQpgAIEnable_Yuv, Encoder_SetChnRcTrigLevel, Encoder_SetChnResizeMode, Encoder_SetGOPSize, Encoder_SetH264Vui, Encoder_SetH265Vui, Encoder_SetIvpuBsSize, Encoder_SetJpegBsSize, Encoder_SetJpegMultiSectionMode, Encoder_SetJpegQp, Encoder_SetMotionQuality, Encoder_SetMotionQuality_Yuv, Encoder_SetMotionQualityEnable, Encoder_SetMotionQualityEnable_Yuv, Encoder_SetMultiSectionMode, Encoder_SetPadFrameAttr, Encoder_SetPskipCfg, Encoder_SetRdBufShare, Encoder_SetSrdCfg, Encoder_VbmAlloc, Encoder_VbmAlloc_Ex, Encoder_VbmFree, Encoder_VbmFree_Ex, Encoder_VbmP2V, Encoder_VbmV2P, Encoder_YuvEncode, Encoder_YuvEncode_Ex, Encoder_YuvExit, Encoder_YuvExit_Ex, Encoder_YuvInit, Encoder_YuvInit_Ex

FrameSource (25)

implement (25): FrameSource_ClearPoolId, FrameSource_CreateJoint, FrameSource_DequeueBuffer, FrameSource_DestroyJoint, FrameSource_ExternInject_CreateChn, FrameSource_ExternInject_DestroyChn, FrameSource_ExternInject_DisableChn, FrameSource_ExternInject_EnableChn, FrameSource_GetChnAttr_Expand, FrameSource_GetDirectMode, FrameSource_GetFrameEx, FrameSource_GetJointByHandler, FrameSource_PM_Resume, FrameSource_PM_Suspend, FrameSource_QueueBuffer, FrameSource_ReleaseFrameEx, FrameSource_SetChnAttr_Expand, FrameSource_SetDirectMode, FrameSource_SetFrameDepthCopyType, FrameSource_SetIvdcMemLine, FrameSource_SetJointBackground, FrameSource_SetYuvAlign, FrameSource_SnapRaw_End, FrameSource_SnapRaw_Start, FrameSource_UpdateChnLut

OSD (20)

implement (20): ISP_Tuning_Get/SetOSDAttr, ISP_Tuning_Get/SetOSDBlock, ISP_Tuning_GetOsdRgnAttr, OSD_Alloc, OSD_AttachToGroup, OSD_CreateRgn_ISP, OSD_DestroyRgn_ISP, OSD_DetachToGroup, OSD_Exit_ISP, OSD_Get/SetRgnAttr_ISP, OSD_GetRgnAttr_ISPPic, OSD_Init_ISP, OSD_RgnCreate_Query, OSD_RgnRegister_Query, OSD_SetGroupCallback, OSD_SetMosaic, OSD_SetPoolSize_ISP, OSD_SetRgnAttr_PicISP, OSD_ShowRgn_ISP, OSD_UpdateRgnAttrData_ISP

Audio (25)

implement (25): AI_DisableAlgo, AI_DisableDrcAndEq, AI_DisableGetRaw, AI_DisableHs, AI_DisableLpf, AI_EnableAlgo, AI_EnableDrcAndEq, AI_EnableGetRaw, AI_EnableHs, AI_EnableLpf, AI_Get/SetDigitalGain, AI_GetAlgoOrder, AI_GetFrameAndRaw, AI_SetAlgoOrder, AI_SetLpfCoFrequency, AO_DisableAlgo, AO_DisableDrcAndEq, AO_DisableNs, AO_EnableAlgo, AO_EnableDrcAndEq, AO_EnableNs, AO_Get/SetDigitalGain, AO_GetAlgoOrder, AO_SetAlgoOrder, Audio_Select_Codec

System / sysutils / log (90)

implement (90): alloc_init, alloc_unit, Buf_Alloc, Buf_CreatePool, Buf_DestroyPool, Buf_Free, Buf_Paddr2Vaddr, Buf_Vaddr2Paddr, create_units, destroy_units, DQbuffer, free_unit, ISPOSD_Alloc, MemPool_GetById, MemPool_InitPool, MemPool_Release, Phys_to_Virt, PoolAlloc, PoolAlloc_Dump, PoolAlloc_Get_Attr, PoolAlloc_Set_Attr, PoolFlushCache, PoolFree, PoolPhys_to_Virt, PoolVirt_to_Phys, Sp_Alloc, SU_ADC_DisableChn, SU_ADC_EnableChn, SU_ADC_Exit, SU_ADC_GetChnValue, SU_ADC_Init, SU_Base_CtlPwrDown, SU_Base_DisableAlarm, SU_Base_DisableAlarmTimeMs, SU_Base_EnableAlarm, SU_Base_EnableAlarmTimeMs, SU_Base_Get/SetAlarm, SU_Base_Get/SetTime, SU_Base_GetAlarmTimeMs, SU_Base_GetDevID, SU_Base_GetModelNumber, SU_Base_GetTimeMs, SU_Base_GetWakeupCount, SU_Base_GetWkupMode, SU_Base_PollingAlarm, SU_Base_Raw2SUTime, SU_Base_Reboot, SU_Base_SetAlarmTimeMs, SU_Base_SetWkupMode, SU_Base_Shutdown, SU_Base_Suspend, SU_Base_SUTime2Raw, SU_CIPHER_ConfigHandle, SU_CIPHER_CreateHandle, SU_CIPHER_Decrypt, SU_CIPHER_DES_Exit, SU_CIPHER_DES_Init, SU_CIPHER_DES_Test, SU_CIPHER_DestroyHandle, SU_CIPHER_Encrypt, SU_CIPHER_Exit, SU_CIPHER_Free_Buffer, SU_CIPHER_Init, SU_CIPHER_Malloc_Buffer, SU_Key_CloseEvent, SU_Key_DisableEvent, SU_Key_EnableEvent, SU_Key_OpenEvent, SU_Key_ReadEvent, SU_LED_Command, SU_PM_AddThreadListen, SU_PM_DeInit, SU_PM_DelThreadListen, SU_PM_DumpList, SU_PM_EventSend, SU_PM_Get_CPUOnlineNums, SU_PM_GetEvent, SU_PM_GetListenLockNums, SU_PM_Init, SU_PM_InitListenLock, SU_PM_ReleaseWakeLock, SU_PM_RequestWakeLock, SU_PM_Set_CPUOnline, SU_PM_Sleep, SU_PM_TheadSuspend, SU_PM_ThreadResume, SU_PM_WaitThreadSuspend, System_MemPoolFree, System_MemPoolRequest, Virt_to_Phys

T33 — 324 functions no streamer calls today

ISP tuning (59)

implement (59): ISP_AddSensor_Free, ISP_AddSensor_Process, ISP_Get/SetCsccrMode, ISP_Get/SetInternalChnAttr, ISP_GET_DriverMode, ISP_GetFrameDropOnce, ISP_GPIOSwitchConfig, ISP_GPIOSwitchTrigger, ISP_HB_GetAttr, ISP_HB_SetAttr, ISP_LDC_Get/SetAttr, ISP_LDC_GetMode, ISP_LDC_INIT, ISP_LDC_OfflineCreateJob, ISP_LDC_OfflineCreateJobExt, ISP_LDC_OfflineDestroyJob, ISP_LDC_OfflineInit, ISP_LDC_OfflineSubmitTask, ISP_LDC_OfflineUpdateLutToJob, ISP_LDC_OnlineGetFunc, ISP_LDC_OnlineGetLut, ISP_LDC_OnlineGetLutBufMode, ISP_LDC_OnlineGetState, ISP_LDC_OnlineGetStrength, ISP_LDC_OnlineInit, ISP_LDC_OnlineSetLut, ISP_LDC_OnlineSetLutBufMode, ISP_LDC_OnlineSetState, ISP_LDC_OnlineSetStrength, ISP_LDC_SetMode, ISP_OneShotDisable, ISP_OneShotDropCnt, ISP_OneShotEnable, ISP_OneShotTick, ISP_OSD_Alloc, ISP_PM_GetMode, ISP_PM_SetMode, ISP_PM_SetOneByOneCallback, ISP_PM_WaitAllDone, ISP_RawCaptureGuardBegin, ISP_RawCaptureGuardEnd, ISP_SetCameraInputMode, ISP_SetFrameDropOnce, ISP_StartNightMode, ISP_Tuning_Get/SetDrawBlock, ISP_Tuning_Get/SetISPCSCAttr, ISP_Tuning_Get/SetModule_Ratio, ISP_Tuning_Get/SetStatisConfig, ISP_Tuning_Get/SetWdrOutputMode, ISP_Tuning_GetAutoZoom, ISP_Tuning_GetBcshRGBOffsetAttr, ISP_Tuning_GetISPRunningModeWithFd, ISP_Tuning_GetMaskBlock, ISP_Tuning_GetMultiSensorEffect, ISP_Tuning_SetBcshRGBOffsetAttr, ISP_Tuning_SetMultiSensorEffect, ISP_Tuning_SetTmoFaceae, ISP_Tuning_WaitFrameDone, ISP_WDR_OPEN

AE / AWB / AF (27)

implement (27): ISP_SetAeAlgoFunc, ISP_SetAwbAlgoFunc, ISP_Tuning_Get/SetAeExpList, ISP_Tuning_Get/SetAeExprInfo, ISP_Tuning_Get/SetAwbAttr, ISP_Tuning_Get/SetAwbCtTrendOffset, ISP_Tuning_Get/SetFaceAe, ISP_Tuning_Get/SetFaceAeWeiget, ISP_Tuning_Get/SetFaceAwb, ISP_Tuning_GetAEFlickerFlag, ISP_Tuning_GetAeLightCompensation, ISP_Tuning_GetAeOnlyReadAttr, ISP_Tuning_GetAeStartAttr, ISP_Tuning_GetAeStatistics, ISP_Tuning_GetAeTargetAttr, ISP_Tuning_GetAFMetricesInfo, ISP_Tuning_GetAfStatistics, ISP_Tuning_GetAwbGlobalStatistics, ISP_Tuning_GetAwbOnlyReadAttr, ISP_Tuning_GetFaceAeLuma, ISP_Tuning_GetMultiSensorAeEffect, ISP_Tuning_GetMultiSensorAWBEffect, ISP_Tuning_SetAeLightCompensation, ISP_Tuning_SetAeStartAttr, ISP_Tuning_SetAeTargetAttr, ISP_Tuning_SetMultiSensorAeEffect, ISP_Tuning_SetMultiSensorAWBEffect

Encoder (and decoder) (78)

implement (78): Decoder_*, Encoder_ClearPoolId, Encoder_Get/SetChangeRef, Encoder_Get/SetChnColor2Grey, Encoder_Get/SetChnCrop, Encoder_Get/SetChnDenoise, Encoder_Get/SetChnFrmUsedMode, Encoder_Get/SetChnHSkip, Encoder_Get/SetChnROI, Encoder_Get/SetFisheyeEnableStatus, Encoder_Get/SetGDRCfg, Encoder_Get/SetH264TransCfg, Encoder_Get/SetH265TransCfg, Encoder_Get/SetMbRC, Encoder_Get/SetQpgMode, Encoder_Get/SetSuperFrameCfg, Encoder_GetChnRfcDropFrameLines, Encoder_GetChnRfcRatio, Encoder_GetGOPSize, Encoder_GetH264Vui, Encoder_GetH265Vui, Encoder_GetJpegQp, Encoder_GetMotionQuality, Encoder_GetPskipCfg, Encoder_GetSrdCfg, Encoder_InputJpege, Encoder_InputJpege_Ex, Encoder_InsertUserData, Encoder_KernEnc_GetStatus, Encoder_KernEnc_GetStream, Encoder_KernEnc_Release, Encoder_KernEnc_Stop, Encoder_MappingTransform, Encoder_MultiProcessExit, Encoder_MultiProcessInit, Encoder_PadFrame, Encoder_RequestGDR, Encoder_RequestPskip, Encoder_SetAutoVui, Encoder_SetChnHSkipBlackEnhance, Encoder_SetChnMapRoi, Encoder_SetChnQpBoundsPerFrame, Encoder_SetChnQpgAI, Encoder_SetChnQpgAI_Yuv, Encoder_SetChnQpgAIEnable, Encoder_SetChnQpgAIEnable_Yuv, Encoder_SetChnRcTrigLevel, Encoder_SetChnResizeMode, Encoder_SetChnRfcDropFrameLines, Encoder_SetChnRfcRatio, Encoder_SetGOPSize, Encoder_SetH264Vui, Encoder_SetH265Vui, Encoder_SetIvpuBsSize, Encoder_SetJpegBsSize, Encoder_SetJpegMultiSectionMode, Encoder_SetJpegQp, Encoder_SetMotionQuality, Encoder_SetMotionQuality_Yuv, Encoder_SetMotionQualityEnable, Encoder_SetMotionQualityEnable_Yuv, Encoder_SetMultiSectionMode, Encoder_SetPadFrameAttr, Encoder_SetPskipCfg, Encoder_SetRdBufShare, Encoder_SetSrdCfg, Encoder_VbmAlloc, Encoder_VbmAlloc_Ex, Encoder_VbmFree, Encoder_VbmFree_Ex, Encoder_VbmP2V, Encoder_VbmV2P, Encoder_YuvEncode, Encoder_YuvEncode_Ex, Encoder_YuvExit, Encoder_YuvExit_Ex, Encoder_YuvInit, Encoder_YuvInit_Ex

FrameSource (27)

implement (27): FrameSource_ClearPoolId, FrameSource_CreateChn_Ext, FrameSource_CreateJoint, FrameSource_DequeueBuffer, FrameSource_DestroyJoint, FrameSource_ExternInject_CreateChn, FrameSource_ExternInject_DestroyChn, FrameSource_ExternInject_DisableChn, FrameSource_ExternInject_EnableChn, FrameSource_GetChnAttr_Expand, FrameSource_GetDirectMode, FrameSource_GetFrameEx, FrameSource_GetJointByHandler, FrameSource_PM_Resume, FrameSource_PM_Suspend, FrameSource_QueueBuffer, FrameSource_ReleaseFrameEx, FrameSource_SetChnAttr_Expand, FrameSource_SetDirectMode, FrameSource_SetFrameDepthCopyType, FrameSource_SetIvdcMemLine, FrameSource_SetJointBackground, FrameSource_SetSubStreamOnlineMode, FrameSource_SetYuvAlign, FrameSource_SnapRaw_End, FrameSource_SnapRaw_Start, FrameSource_UpdateChnLut

OSD (20)

implement (20): ISP_Tuning_Get/SetOSDAttr, ISP_Tuning_Get/SetOSDBlock, ISP_Tuning_GetOsdRgnAttr, OSD_Alloc, OSD_AttachToGroup, OSD_CreateRgn_ISP, OSD_DestroyRgn_ISP, OSD_DetachToGroup, OSD_Exit_ISP, OSD_Get/SetRgnAttr_ISP, OSD_GetRgnAttr_ISPPic, OSD_Init_ISP, OSD_RgnCreate_Query, OSD_RgnRegister_Query, OSD_SetGroupCallback, OSD_SetMosaic, OSD_SetPoolSize_ISP, OSD_SetRgnAttr_PicISP, OSD_ShowRgn_ISP, OSD_UpdateRgnAttrData_ISP

Audio (25)

implement (25): AI_DisableAlgo, AI_DisableDrcAndEq, AI_DisableGetRaw, AI_DisableHs, AI_DisableLpf, AI_EnableAlgo, AI_EnableDrcAndEq, AI_EnableGetRaw, AI_EnableHs, AI_EnableLpf, AI_Get/SetDigitalGain, AI_GetAlgoOrder, AI_GetFrameAndRaw, AI_SetAlgoOrder, AI_SetLpfCoFrequency, AO_DisableAlgo, AO_DisableDrcAndEq, AO_DisableNs, AO_EnableAlgo, AO_EnableDrcAndEq, AO_EnableNs, AO_Get/SetDigitalGain, AO_GetAlgoOrder, AO_SetAlgoOrder, Audio_Select_Codec

System / sysutils / log (88)

implement (88): alloc_init, alloc_unit, Buf_Alloc, Buf_CreatePool, Buf_DestroyPool, Buf_Free, Buf_Paddr2Vaddr, Buf_Vaddr2Paddr, create_units, destroy_units, DQbuffer, free_unit, ISPOSD_Alloc, MemPool_GetById, MemPool_InitPool, MemPool_Release, Phys_to_Virt, PoolAlloc, PoolAlloc_Dump, PoolAlloc_Get_Attr, PoolAlloc_Set_Attr, PoolFlushCache, PoolFree, PoolPhys_to_Virt, PoolVirt_to_Phys, Sp_Alloc, SU_ADC_DisableChn, SU_ADC_EnableChn, SU_ADC_Exit, SU_ADC_GetChnValue, SU_ADC_Init, SU_Base_CtlPwrDown, SU_Base_DisableAlarm, SU_Base_DisableAlarmTimeMs, SU_Base_EnableAlarm, SU_Base_EnableAlarmTimeMs, SU_Base_Get/SetAlarm, SU_Base_Get/SetTime, SU_Base_GetAlarmTimeMs, SU_Base_GetDevID, SU_Base_GetModelNumber, SU_Base_GetTimeMs, SU_Base_GetWakeupCount, SU_Base_GetWkupMode, SU_Base_PollingAlarm, SU_Base_Raw2SUTime, SU_Base_Reboot, SU_Base_SetAlarmTimeMs, SU_Base_SetWkupMode, SU_Base_Shutdown, SU_Base_Suspend, SU_Base_SUTime2Raw, SU_CIPHER_ConfigHandle, SU_CIPHER_CreateHandle, SU_CIPHER_Decrypt, SU_CIPHER_DES_Exit, SU_CIPHER_DES_Init, SU_CIPHER_DES_Test, SU_CIPHER_DestroyHandle, SU_CIPHER_Encrypt, SU_CIPHER_Exit, SU_CIPHER_Init, SU_Key_CloseEvent, SU_Key_DisableEvent, SU_Key_EnableEvent, SU_Key_OpenEvent, SU_Key_ReadEvent, SU_LED_Command, SU_PM_AddThreadListen, SU_PM_DeInit, SU_PM_DelThreadListen, SU_PM_DumpList, SU_PM_EventSend, SU_PM_Get_CPUOnlineNums, SU_PM_GetEvent, SU_PM_GetListenLockNums, SU_PM_Init, SU_PM_InitListenLock, SU_PM_ReleaseWakeLock, SU_PM_RequestWakeLock, SU_PM_Set_CPUOnline, SU_PM_Sleep, SU_PM_TheadSuspend, SU_PM_ThreadResume, SU_PM_WaitThreadSuspend, System_MemPoolFree, System_MemPoolRequest, Virt_to_Phys

T40 — 32 functions no streamer calls today

AE / AWB / AF (2)

implement (2): ISP_SetAeAlgoFunc, ISP_SetAwbAlgoFunc

Encoder (and decoder) (2)

implement (2): Decoder_*, Encoder_Get/SetFisheyeEnableStatus

FrameSource (1)

implement (1): EmuFrameSource_*

OSD (1)

implement (1): OSD_Init_ISP

System / sysutils / log (26)

implement (26): SU_ADC_DisableChn, SU_ADC_EnableChn, SU_ADC_Exit, SU_ADC_GetChnValue, SU_ADC_Init, SU_Base_DisableAlarm, SU_Base_EnableAlarm, SU_Base_Get/SetAlarm, SU_Base_Get/SetTime, SU_Base_PollingAlarm, SU_Base_Reboot, SU_Base_Suspend, SU_CIPHER_ConfigHandle, SU_CIPHER_CreateHandle, SU_CIPHER_Decrypt, SU_CIPHER_DES_Exit, SU_CIPHER_DES_Init, SU_CIPHER_DES_Test, SU_CIPHER_DestroyHandle, SU_CIPHER_Encrypt, SU_CIPHER_Exit, SU_CIPHER_Init, SU_Key_DisableEvent, SU_Key_EnableEvent, SU_Key_ReadEvent, SU_LED_Command

T41 — 37 functions no streamer calls today

ISP tuning (12)

implement (12): ISP_Get/SetCsccrMode, ISP_Get/SetInternalChnAttr, ISP_LDC_Get/SetAttr, ISP_LDC_INIT, ISP_RAW_RwControl, ISP_SET_GPIO_INIT_OR_FREE, ISP_SET_GPIO_STA, ISP_SetVicDoneCbFunc, ISP_StartNightMode, ISP_Tuning_Get/SetDrawBlock, ISP_Tuning_SetTmoFaceae, ISP_WDR_OPEN

AE / AWB / AF (9)

implement (9): ISP_SetAeAlgoFunc, ISP_SetAwbAlgoFunc, ISP_Tuning_Get/SetAeConvergeStep, ISP_Tuning_Get/SetFaceAeWeiget, ISP_Tuning_GetAeBv, ISP_Tuning_GetAEFlickerFlag, ISP_Tuning_GetAFMetricesInfo, ISP_Tuning_GetAfStatistics, ISP_Tuning_GetFaceAeLuma

Encoder (and decoder) (7)

implement (7): Decoder_*, Encoder_Get/SetChnRoiAttr, Encoder_Get/SetChnSeiAttr, Encoder_Get/SetFisheyeEnableStatus, Encoder_SetAvpuBsSize, Encoder_SetChnMapRoi, Encoder_SetFrameRelease

FrameSource (1)

implement (1): EmuFrameSource_*

OSD (2)

implement (1): OSD_Get/SetRgnAttr_ISP

not applicable (1): OSD_GetRegionLuma

System / sysutils / log (6)

implement (2): SU_ADC_Init, SU_Base_SetWkupMode

not applicable (4): SU_Battery_GetCapacity, SU_Battery_GetEvent, SU_Battery_GetStatus, SU_Battery_GetVoltageUV

API coverage at a glance

Works (device-tested or vendor no-op) / functions that exist in the SoC's vendor API; functions the vendor API does not have are not counted. Click an area for the full function table.

AreaT10T20T21T23T30T31T32T33T40T41
ISP tuning67/67
67✅ 0🔧 0⚠ 0?
66/67
66✅ 1🔧 0⚠ 0?
64/66
64✅ 2🔧 0⚠ 0?
78/97
78✅ 16🔧 3⚠ 0?
0/67
0✅ 13🔧 2⚠ 52?
83/87
83✅ 4🔧 0⚠ 0?
0/113
no build
0/116
no build
60/71
60✅ 11🔧 0⚠ 0?
59/78
59✅ 3🔧 16⚠ 0?
AE / AWB / AF25/27
25✅ 2🔧 0⚠ 0?
27/27
27✅ 0🔧 0⚠ 0?
29/29
29✅ 0🔧 0⚠ 0?
48/51
48✅ 2🔧 1⚠ 0?
0/26
0✅ 4🔧 0⚠ 22?
47/49
47✅ 2🔧 0⚠ 0?
0/41
no build
0/41
no build
21/29
21✅ 6🔧 2⚠ 0?
28/39
28✅ 0🔧 11⚠ 0?
Encoder38/70
38✅ 0🔧 31⚠ 1?
40/70
40✅ 0🔧 29⚠ 1?
51/67
51✅ 0🔧 16⚠ 0?
72/90
72✅ 1🔧 13⚠ 4?
0/67
0✅ 3🔧 19⚠ 45?
42/45
42✅ 0🔧 2⚠ 1?
0/116
no build
0/128
no build
46/59
46✅ 3🔧 10⚠ 0?
48/74
48✅ 9🔧 17⚠ 0?
FrameSource18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
22/22
22✅ 0🔧 0⚠ 0?
0/19
0✅ 0🔧 0⚠ 19?
22/30
22✅ 1🔧 5⚠ 2?
0/47
no build
0/49
no build
22/33
22✅ 6🔧 5⚠ 0?
24/36
24✅ 7🔧 5⚠ 0?
OSD16/17
16✅ 1🔧 0⚠ 0?
16/17
16✅ 1🔧 0⚠ 0?
16/17
16✅ 1🔧 0⚠ 0?
36/42
36✅ 4🔧 0⚠ 2?
0/17
0✅ 1🔧 0⚠ 16?
16/17
16✅ 1🔧 0⚠ 0?
0/44
no build
0/44
no build
28/43
28✅ 14🔧 0⚠ 1?
26/42
26✅ 13🔧 3⚠ 0?
IVS18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
0/18
0✅ 0🔧 0⚠ 18?
18/18
18✅ 0🔧 0⚠ 0?
0/18
no build
0/18
no build
18/18
18✅ 0🔧 0⚠ 0?
18/18
18✅ 0🔧 0⚠ 0?
Audio68/68
68✅ 0🔧 0⚠ 0?
68/68
68✅ 0🔧 0⚠ 0?
70/70
70✅ 0🔧 0⚠ 0?
77/77
77✅ 0🔧 0⚠ 0?
0/90
0✅ 22🔧 0⚠ 68?
96/96
96✅ 0🔧 0⚠ 0?
0/127
no build
0/127
no build
99/99
99✅ 0🔧 0⚠ 0?
106/107
106✅ 1🔧 0⚠ 0?
System20/48
20✅ 25🔧 0⚠ 3?
20/48
20✅ 25🔧 0⚠ 3?
20/48
20✅ 25🔧 0⚠ 3?
21/60
21✅ 25🔧 0⚠ 14?
0/50
0✅ 1🔧 0⚠ 49?
22/64
22✅ 28🔧 0⚠ 14?
0/104
no build
0/102
no build
21/50
21✅ 1🔧 1⚠ 27?
19/55
19✅ 30🔧 6⚠ 0?
All areas270/333
270✅ 28🔧 31⚠ 4?
273/333
273✅ 27🔧 29⚠ 4?
286/333
286✅ 28🔧 16⚠ 3?
372/457
372✅ 48🔧 17⚠ 20?
0/354
0✅ 44🔧 21⚠ 289?
346/406
346✅ 36🔧 7⚠ 17?
0/610
no build
0/625
no build
315/402
315✅ 41🔧 18⚠ 28?
328/449
328✅ 63🔧 58⚠ 0?

Matrix

✅+ improved beyond vendor✅ supported⚠️ known defect / deviation🔧 in progress📋 planned❌ missing? unknown— hardware does not have itRC2 improved between RC1 and RC2new improved after the RC2 tag (in next, not released)changed cell changed, not improved🚧 in progress (issue)
Counts per SoC and RC1 comparison

44 of 45 features have a badge on at least one cell (RC1 = tag v2026.10.11-rc1, RC2 = tag v2026.10.25-rc2); 10 features have a cell changed since RC2

T10T20T21T23T30T31T32T33T40T41
✅+10102512090055
✅31311730033003334
⚠️0001010000
🔧00001204020
📋00000004500
❌00001010000
?000031031000
—4432120056
improved since RC1, in RC2 RC2000001003211
improved since RC2, only in next new0000600031
changed without improvement changed00015600616
total improved since RC1000061003412
SoC
Status
Tags
FeatureT10T20T21T23T30T31T32T33T40T41
ISP core and image pipeline
1✅✅✅✅🔧✅🔧 🚧📋✅changed✅changed
2✅+✅+✅+✅+🔧new✅+?📋✅+RC2✅+RC2
3✅+✅✅+✅?✅?📋✅RC2—
Exposure (AE)
4✅✅✅+✅?✅changed?📋✅RC2✅changed
5✅✅✅+✅?✅?📋✅RC2✅changed
6✅✅✅+✅🔧new✅?📋✅RC2✅changed
7✅✅✅✅🔧new✅?📋✅RC2✅changed
Colour and image quality
8✅✅✅+✅?✅changed?📋✅RC2✅changed
9✅✅✅+✅?✅?📋✅+new✅RC2
10✅✅✅✅+?✅?📋✅RC2✅changed
11✅✅✅✅?✅?📋✅RC2✅
12✅✅✅+✅🔧new✅?📋✅new✅changed
13✅✅✅✅?changed✅?📋✅RC2✅
14✅✅+✅+✅+?changed✅?📋✅RC2✅RC2
15✅✅+✅+✅+?changed✅?📋—✅+new
16✅+✅+✅+✅?changed✅changed?📋✅RC2✅RC2
17✅+✅+✅+✅?changed✅?📋—✅RC2
18✅+✅✅+✅?✅?📋——changed
19✅✅✅✅?✅?📋✅RC2✅
20✅✅✅✅🔧new✅RC2?📋✅RC2✅RC2
21———✅?✅?📋✅RC2✅RC2
Video encoder and streams
22✅✅✅✅+🔧✅🔧 🚧📋✅changed✅
23————❌✅?📋✅RC2✅
24✅✅✅+✅🔧✅🔧 🚧📋✅RC2✅changed
25✅✅✅✅🔧✅?📋✅changed✅
26✅+✅✅✅🔧✅changed?📋✅RC2✅changed
27✅✅✅✅?✅?📋✅RC2✅RC2
28✅✅✅✅?✅❌📋✅+changed✅
29✅✅+✅✅?✅+❌📋✅new✅changed
30✅✅✅+✅🔧✅🔧 🚧📋✅changed✅
Audio (documentation only, no tests)
31✅✅✅✅?✅❌📋✅RC2—
32✅✅✅✅?✅❌📋🔧RC2—
33✅✅✅✅?✅+❌📋🔧RC2—
Memory, size, load
34✅+✅+✅+✅+?✅+❌📋✅+RC2✅+changed
35✅✅✅+✅+?✅+?📋✅RC2✅changed
36✅✅✅+✅+?✅?📋✅RC2✅
37——✅+✅+?—?📋—changed—changed
38✅✅✅+✅?✅changed?📋✅RC2✅changed
Stability, helper libraries, telemetry
39✅+✅+✅+✅+?—?📋—✅
40—————✅+?📋✅RC2✅
41✅✅✅⚠️changed?⚠️changed?📋✅RC2✅RC2
42✅+✅+✅+✅+?✅+❌📋✅+RC2✅+
43✅✅✅+✅🔧new✅❌📋✅RC2✅
44✅+✅+✅+✅+?✅+❌📋✅RC2✅RC2
Region of interest
45✅✅✅+✅?✅+❌📋✅RC2✅+RC2

Columns T10..T41 (T30 and T40 added 2026-10-10): one status symbol per SoC (legend above). The number and the feature name link to the detail section below, which holds the full per-SoC text and the vendor-stack behaviour.

Matrix details

Per feature: the vendor-stack behaviour and the full per-SoC cell text (chronological test log, newest results win) are in the table above; additional text per feature follows here.

Video encoder and streams

22. H.264
24. JPEG / MJPEG / snapshot
28. OSD: text, bitmap, rectangle, line, cover
29. IVS / motion detection
30. Frame source / VBM pool

Stability, helper libraries, telemetry

45. Encoder ROI (region QP)

API coverage per function

As of 2026-10-26. One row per vendor function; click a function name for its note and evidence. Legend: ✅ works, device-tested · ✅+ works, device-tested, better than the vendor · ✅ rt API round trip on device, no visible effect expected · ✅ run works: called by the streamer on fleet cameras of this SoC that passed the fleet soak (not an individual device test; see the reference) · ✅ no-op vendor no-op, OpenIMP matches that · 🔧 host implemented, host tests only (no camera run yet) · 🔧 aud really connected per static audit, no device test tracked · 🔧 qemu API round trip in QEMU, no camera · ⚠ cache value only stored and read back, nothing applied · ⚠ stub returns 0 without any effect · ❌ err exported but fails or has a known defect · ❌ miss 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). A construction sign (🚧) marks work in progress (open GitHub issue labelled type:wip, docs/status/issues.json).

Rows
State
SoC
Area
States combine with SoC and area: a row shows if one selected SoC (all if none) has a selected state. Icons: ∅ no test case yet · ≈ test ran, result unclear · ↷ not run on this SoC.
ISP tuning — 160 rows (54 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
––––––📋📋–––
ISP_Bypass_Bind––––––––✅––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–❌ miss–
–––✅–✅📋📋✅ rt✅r†
–––✅–✅📋📋✅ rt✅r†
––––––📋📋–❌ miss–
––––––📋📋–✅ rtp†
✅ rt✅ rt✅ rt✅ rt?✅📋📋✅ rt✅r†
––––––📋📋–––
––––––📋📋✅–r†
––––––📋📋–––
ISP_GetRaw––––––––🔧 host ∅––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–❌ miss–
––––––📋📋–––
––––––📋📋–❌ miss–
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
–––––––––❌ miss–
–––––––📋–––
–––––––📋–––
–––🔧 aud ∅–🔧 aud ∅–––❌ miss–
–––🔧 aud ∅–🔧 aud ∅–––❌ miss–
–––🔧 aud ∅––📋📋🔧 host ∅––
––––––––✅ rt–r†
–––✅–✅–––––
––––––📋📋–––
ISP_SetPreDqtime––––––––🔧 host ∅––
ISP_SetScalerLv––––––––🔧 host ∅––
–––🔧 aud ∅–––––––
–––🔧 host ∅–––––––
–––––––––❌ miss–
––––––📋📋✅❌ miss–
–––🔧 aud ∅–––––––
✅ rt✅ rt✅✅ no-op🔧 qemu ↷✅ rt––––r†
–––✅–✅––––r†
–––✅–✅––––r†
✅ rt✅ rt✅✅ no-op🔧 qemu ↷✅ rt––––r†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅–✅––––p† r† t
–––✅–✅📋📋✅ rt✅p† r† t t†
–––🔧 aud ≈–🔧 aud ≈📋📋✅✅ rtr†
✅✅✅+–?–––––t
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅ rt–✅––––r†
–––✅–✅––––p† r† t
–––✅–✅––––r† t
–––❌ err––📋📋–❌ miss–
––✅✅–✅––––p† r† t
–––✅–✅––––r†
✅✅✅✅+?✅––––p† r†
––––––📋📋✅✅p† r†
✅✅✅✅?✅––––p† r† t
ISP_Tuning_Get/SetHLDCAttr––––––––🔧 host ∅––
–––✅ rt–✅ rt📋📋🔧 host ∅✅r† t t†
✅✅✅–?–––––t
––––––📋📋✅✅–
–––✅ rt–✅ rt––––r†
✅✅✅✅?✅ rt––––p† t
✅✅––🔧 host ↷––––––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅ rt––––p† t
–––✅ no-op–✅––✅–r†
✅✅✅✅?✅––––p† r† t
✅✅✅✅?✅––––p† r† t
––––––📋📋✅🔧 aud ≈–
––🔧 host ≈🔧 aud ≈–✅📋📋✅✅r†
✅ rt✅✅ rt✅?✅📋📋✅✅p† r† t t†
–––🔧 aud ≈–––––––
–––🔧 aud ≈–––––––
✅✅✅–🔧 qemu ↷–––––p†
––––––📋📋✅✅–
✅✅✅–🔧 qemu ↷–––––p†
–––––––––✅–
–––––✅ rt––––r†
✅✅––🔧 host ↷––––––
––––––📋📋✅✅ no-op–
–––✅––📋📋✅✅–
––––––📋📋–––
–––✅ no-op–✅––––r†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅––––p† r† t
–––✅–✅––✅✅r†
––––––––✅––
–––––––📋–––
–––🔧 host ∅––📋📋–🔧 host ∅–
––––––📋📋–––
✅✅✅–?–––––p†
✅✅✅–?––––––
–––✅–✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅––––p† r† t
–––––––––––
✅✅✅ no-op–🔧 host ↷––––––
–––✅ rt–✅📋📋✅ rt✅ rtp† r r†
––––––📋📋–––
✅✅✅+✅?✅📋📋✅✅p† r† t t†
✅✅✅–🔧 host ↷––––––
ISP_Tuning_SetFixedContraster––––––––🔧 host ∅––
✅ rt✅ rt✅ rt–?––––––
✅ rt✅ rt✅ rt✅ rt?✅ rt––✅ rt–p† r†
––––❌ miss––––––
✅ rt✅ rt✅ rt–🔧 qemu ↷––––––
–––🔧 host ∅––📋📋–✅r†
✅🔧 host ≈–––––––––
––––––📋📋–––
✅✅ rt✅ no-op–?–––––p†
–––✅ no-op–✅📋📋–✅ rtr†
✅✅✅ no-op–?–––––t
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅ no-op✅?✅📋📋✅✅p† r† t t†
✅✅ run✅✅?✅––––p† r† t
✅ rt✅ rt✅ rt–⚠ cache––––––
✅✅ run✅ run✅ run?✅ run––––p† r† t
––––––📋📋–❌ miss–
✅ rt✅ rt✅ rt✅ rt?✅ rt📋📋✅ rt✅ rtr†
–––❌ err––📋📋✅✅ rtp†
✅✅✅✅?✅––––r†
––––––📋📋🔧 host ∅✅–
–––––✅📋📋✅ rt✅r†
––––––📋📋✅✅r†
–––––✅–––––
––––––📋📋🔧 host ∅❌ miss–
AE / AWB / AF — 72 rows (23 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
–––🔧 aud ∅–🔧 aud ∅📋📋❌ miss❌ miss–
–––🔧 aud ∅–🔧 aud ∅📋📋❌ miss❌ miss–
✅ rt✅✅✅?✅––––p† r†
✅ rt✅ rt––🔧 host ↷––––––
✅✅✅✅?✅––✅✅r†
–––––––––––
–––✅–✅––––p† r†
✅✅–✅?✅––––p† r† t
–––––––––⚠ cache–
––––––📋📋🔧 host ≈✅ rt–
––––––📋📋✅✅–
✅✅✅✅?✅––––p† r†
––✅✅–✅––––p p† r†
––––––––✅✅–
––––––––✅––
🔧 host ≈✅✅–🔧 host ↷––––––
–––✅–✅––––r†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅––––r†
––✅✅–✅📋📋✅✅r†
––––––📋📋✅✅–
–––✅–✅––––r†
–––––––––✅–
–––✅–✅––––r†
––––––📋📋–✅–
✅✅✅✅ no-op?✅ no-op––––p† r†
✅✅✅✅ no-op?✅ no-op📋📋✅✅p† r†
–––✅–––––––
––––––📋📋🔧 host ≈✅–
––––––📋📋–❌ miss–
––––––📋📋🔧 host ∅––
✅ run✅✅✅?✅––––p† r† t
–––✅–✅––––p†
–––––––––✅–
–––––––––❌ miss–
ISP_Tuning_GetAEEvList–––––––––✅–
–––––––––✅–
––––––📋📋–❌ miss–
–––✅–✅––––p p† r†
––––––📋📋–––
––✅✅–✅––––p† r† t
––––––📋📋–––
––––––📋📋–––
–––✅–✅––––r†
––––––📋📋✅✅–
––––––📋📋–––
✅ no-op✅ no-op✅✅–✅––––p† r†
––✅✅?✅––––r†
––––––📋📋✅❌ miss–
––––––📋📋✅❌ miss–
–––✅–✅––––r†
–––✅–✅––––p† r r†
––––––📋📋✅✅–
––––––📋📋–––
––––––📋📋✅✅t t†
✅✅–✅–✅––––p† r† t
✅✅✅✅?✅––––r† t
––––––📋📋–❌ miss–
––––––📋📋–––
––––––📋📋–––
––✅✅–✅––––r†
✅✅✅✅?✅––––r†
–––✅ run–✅ run––––p† t
–––✅ rt–✅ rt––––r†
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
–––✅ rt–✅ rt––––r†
✅✅✅✅?✅––––r†
––––––📋📋–––
––––––📋📋–––
–––❌ err–✅–––––
Encoder (and decoder) — 131 rows (55 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
❌ miss❌ miss❌ miss❌ err❌ miss––📋❌ miss❌ miss–
–––––?📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r†
⚠ cache⚠ cache✅✅⚠ cache–📋📋–––
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?–📋📋––r†
❌ miss❌ miss❌ miss✅❌ miss–📋📋–––
⚠ cache⚠ cache–––––––––
✅✅✅✅?–📋📋––r†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅🔧 host ↷–📋📋–––
–––––✅––✅✅–
❌ miss❌ miss–––––––––
❌ miss❌ miss–––––––––
❌ miss❌ miss–––––––––
⚠ cache⚠ cache✅✅⚠ cache–📋📋–––
❌ miss❌ miss–––––––––
✅✅✅+✅?–📋📋––r†
––––––––✅⚠ cache–
––––––––🔧 host ∅❌ miss–
⚠ cache⚠ cache⚠ cache⚠ cache⚠ cache⚠ cache📋📋⚠ cache❌ miss–
–––⚠ cache–––––––
–––✅––📋📋–––
⚠ cache✅✅✅?–📋📋––r†
––✅ no-op✅ no-op?–📋📋––r†
✅✅✅✅?––––✅–
✅✅✅✅?✅📋📋✅✅r†
✅ no-op✅✅✅?–📋📋––r†
–––✅–✅📋📋✅✅r†
––✅ no-op✅?–📋📋––r†
–––––✅––✅✅–
✅✅✅✅?–📋📋––r†
✅✅✅✅?✅📋📋✅✅p† r†
–––––✅––––t
––✅✅?✅📋📋✅✅r†
–––––✅––––r†
–––✅–––––––
–––––––📋–––
–––––––📋–––
––✅✅?✅📋📋✅✅r†
✅✅✅✅🔧 host ↷–📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋–✅t
––––––📋📋–🔧 host ↷–
✅✅✅✅?–📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
❌ miss❌ miss❌ miss?❌ miss–📋📋–––
––✅🔧 aud ∅–✅––✅🔧 aud ∅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
––––––📋📋–––
–––––––––🔧 host ↷–
–––––––––❌ miss–
–––––––––✅–
–––––✅––✅✅p† r†
–––––✅📋📋✅✅t t†
–––––✅–––––
–––––✅––✅✅–
⚠ cache⚠ cache⚠ cache✅⚠ cache–📋📋–––
–––✅–––––––
––––––📋📋🔧 host ↷⚠ cache–
–––✅––📋📋–✅r†
–––––✅–––––
–––––✅📋📋✅✅t t†
––––––📋📋–✅–
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
–––––✅––––t
??❌ miss??–📋📋–––
––––?✅📋📋✅✅–
–––––––📋–––
–––––––📋–––
–––––✅📋📋✅✅t t†
–––––✅ no-op––✅ no-op❌ miss–
✅✅✅✅?–📋📋––r†
––––––📋📋–––
––––––📋📋–––
––––––📋📋–🔧 host ↷–
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
–––⚠ cache––📋📋–––
❌ miss❌ miss❌ miss?❌ miss–📋📋–––
––––––📋📋–––
–––?––📋📋–––
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋✅✅t
––––––📋📋–🔧 host ↷–
–––✅––📋📋✅✅t
––––––📋📋–🔧 host ↷–
–––✅––📋📋✅✅–
–––✅––📋📋✅✅t
–––✅––📋📋✅✅t
––––––📋📋–🔧 host ↷–
–––✅––📋📋✅✅t
––––––📋📋–🔧 host ↷–
–––✅–––––––
–––✅––📋📋✅✅t
––––––📋📋–🔧 host ↷–
–––✅––––––t
–––✅–––––––
FrameSource — 48 rows (18 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
––––––––❌ miss❌ miss–
–––––❌ miss–––––
–––––✅–––––
–––––?📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––––––📋–––
––––––📋📋–––
––––––📋📋🔧 host ↷🔧 host ↷–
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋🔧 host ↷🔧 host ↷–
––––––📋📋🔧 host ↷🔧 host ↷–
––––––📋📋🔧 host ↷🔧 host ↷–
––––––📋📋🔧 host ↷🔧 host ↷–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅📋📋✅✅r†
–––✅–––––––
✅✅✅✅?✅📋📋✅✅p p† r r† t
––––––📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅r†
–––✅–✅📋📋–✅r†
––––––📋📋–––
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅r r† t
––––––📋📋✅✅–
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅r†
––––––📋📋–––
––––––📋📋–––
––––––📋📋🔧 host ↷🔧 host ↷–
✅✅✅✅?✅📋📋✅✅r r† t
––––––📋📋✅✅–
––––––📋📋–––
–––––✅––––t
––––––📋📋–––
–––––?📋📋–––
––––––📋📋–––
––––––📋📋–––
––––?🔧 aud ↷–––––
–––––––📋–––
––––––📋📋–🔧 aud ↷–
✅✅✅✅?✅📋📋✅✅r†
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
OSD — 43 rows (19 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
ISP_Get/SetDrawAttr––––––––🔧 host ∅––
ISP_Get/SetOSDAttr––––––––🔧 host ∅––
ISP_Get/SetSingleOSDAttr––––––––✅––
–––✅––📋📋✅✅r†
–––✅––📋📋✅✅r†
–––✅––📋📋–🔧 host ∅–
–––✅––📋📋–🔧 host ∅–
–––✅––📋📋✅🔧 host ∅–
–––✅––📋📋✅✅r†
–––✅––📋📋✅✅r†
–––✅––📋📋✅✅r†
–––?––📋📋–––
🔧 host ↷🔧 host ↷🔧 host ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷📋📋🔧 host ↷✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋🔧 host ∅🔧 aud ∅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋🔧 host ∅🔧 aud ∅–
––––––📋📋–––
–––✅––📋📋🔧 host ∅🔧 host ∅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––🔧 aud ↷––📋📋🔧 host ↷❌ miss–
–––––––––❌ miss–
–––✅––📋📋🔧 host ∅🔧 aud ∅–
–––✅––📋📋?🔧 aud ∅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋✅✅–
–––✅––📋📋✅✅–
––––––📋📋✅✅–
–––✅––📋📋✅✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋🔧 host ∅🔧 host ∅–
–––🔧 aud ∅––📋📋🔧 host ∅🔧 aud ∅–
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋🔧 host ∅🔧 aud ∅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r†
–––?––📋📋–––
IVS — 17 rows (17 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
Audio — 79 rows (45 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
–––––––––––
✅✅✅✅?✅📋📋✅✅r†
–––––––––––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅ rt✅ rt✅ rt✅ rt?✅ rt📋📋✅ rt✅ rtr† t t†
✅ rt✅ rt✅ rt✅ rt?✅ rt📋📋✅ rt✅ rtr†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋–✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
––––––📋📋–✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋✅✅–
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅ rt✅ rtr† t t†
✅ rt✅ rt✅ rt✅ rt?✅ rt📋📋✅ rt✅ rtr†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋–✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
––––––📋📋–✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅––📋📋✅✅–
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
––✅––✅––––t
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋✅✅–
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
––––––📋📋–✅–
✅ rt✅ rt✅ rt✅ rt?✅ rt📋📋✅ rt✅ rtr†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––✅–✅📋📋✅✅r†
–––––✅–––––
––––––📋📋–––
–––✅–✅📋📋✅✅p† r†
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅r†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr† t t†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
–––✅––📋📋–✅ rt–
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
––––––📋📋–––
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
––––––📋📋–––
✅✅✅✅?✅📋📋✅ rt✅ rtp† r† t t†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
–––✅––📋📋–✅ rt–
✅✅✅✅?✅📋📋✅ rt✅ rtp† r† t t†
––––––📋📋–––
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
––––––📋📋–––
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
––––––📋📋✅ rt✅ rt–
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r† t t†
––––––📋📋–––
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
✅✅✅✅?✅📋📋✅ rt✅ rtp† r† t t†
––––––📋📋–––
–––✅–✅ rt📋📋✅ rt✅ rtp† r†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtp† r†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
✅ rt✅ rt✅ rt✅?✅ rt📋📋✅ rt✅ rtr†
––––––📋📋–🔧 host ↷–
––––🔧 aud ↷✅ rt📋📋✅ rt✅ rtr†
––––🔧 aud ↷–📋📋✅ rt✅ rtr†
System / sysutils / log — 108 rows (64 with a gap or unknown state)
Vendor functionT10T20T21T23T30T31T32T33T40T41Used by
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
–––?––📋📋–––
✅✅✅✅–✅––✅✅–
✅✅✅✅–✅––✅✅–
–––?–?📋📋–––
–––?–?📋📋–––
–––––?📋📋–––
??????📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
–––?–?📋📋–––
??????📋📋–––
🔧 aud ∅🔧 aud ∅🔧 aud ∅🔧 aud ∅?🔧 aud ∅📋📋?🔧 aud ∅–
🔧 aud ∅🔧 aud ∅🔧 aud ∅🔧 aud ∅?🔧 aud ∅📋📋?🔧 aud ∅–
🔧 aud ∅🔧 aud ∅🔧 aud ∅🔧 aud ∅?🔧 aud ∅📋📋?🔧 aud ∅–
🔧 aud ∅🔧 aud ∅🔧 aud ∅🔧 aud ∅?🔧 aud ∅📋📋?🔧 aud ∅–
––––––📋📋❌ miss❌ miss–
––––––📋📋–––
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋📋–––
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋📋–––
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅–
✅✅✅✅?✅📋📋✅✅–
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r†
––––––📋📋–––
––––––📋📋–––
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
✅✅✅✅?✅📋📋✅✅–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋📋–––
––––––📋📋–❌ err–
🔧 host ↷🔧 host ↷🔧 host ↷🔧 host ↷🔧 host ↷🔧 host ↷📋📋🔧 host ↷🔧 host ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
✅✅✅✅?✅📋📋✅✅–
––––?––––❌ miss–
––––?––––❌ miss–
––––?––––❌ miss–
––––?––––❌ miss–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
–––––🔧 aud ↷📋📋?🔧 aud ↷–
–––––🔧 aud ↷📋📋?🔧 aud ↷–
–––––🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋––––
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋––––
✅✅✅✅?✅📋📋✅🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
✅✅✅✅?✅📋📋✅🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
🔧 aud ↷🔧 aud ↷🔧 aud ↷🔧 aud ↷?🔧 aud ↷📋📋?🔧 aud ↷–
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
––––––📋📋–––
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅📋📋✅✅r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅p† r† t t†
–––––✅📋📋–––
–––✅–✅📋📋✅✅–
✅✅✅✅?✅📋📋✅✅r†
✅✅✅✅?✅📋📋✅✅p† r†
✅✅✅✅?✅📋📋✅✅p† r† t t†
✅✅✅✅?✅📋📋✅✅r†
??????📋📋–––
History of the function audit and notes

As of: 2026-10-10 (re-audit against agg-34; the cells below were set on 2026-10-06 from the release-candidate test day and changed since only where noted). The cells were updated from the release-candidate test day: every row/SoC whose apitest call passed on a camera of that SoC (T20, T21, T23, T31) is now **dev**; the cells changed by hand (vendor no-ops, functions that became real, functions that were fixed) are listed in the notes of the row. T10 and T41 cells were not re-measured (T10 mirrors T20 and was not re-tested; T41 is not part of the release).

State of the work: OpenIMP claude/agg-34 (2a1b1cd), open-tx-isp claude/agg-34 (b15ef235). Re-audit 2026-10-10: every row with a cache/stub/error/missing/? cell on T10/T20/T21/T23/T31 was checked against the exported symbols of the agg-34 libimp.so builds (T10 uses the T20 build) and the agg-34 source; the only function that became real since agg-27 is IMP_Log_Set_Option (now host on T10/T20/T21/T23/T31), the other gap rows are unchanged (still cache-only/error by design or not exported); ISP_Tuning_Get/SetFrontCrop T31 is now dev (night of 2026-10-10). The T41 column and the T41 count row were not touched (other agents work on T41). The counts are recomputed by a local helper script (parses the full lists; not in the repo). Source of the function list and of the base classes: the audit NOT_CONNECTED_2026-10-05.md (OpenIMP/open-tx-isp agg-24, built libimp.so/libsysutils.so, vendor header sets: T10/T20 331 functions, T21 330, T23 704 incl. _Sec/MultiCamera_ variants, T31 405, T41 445). Rows are ALL vendor IMP_*/SU_* functions of the audit (Get/Set pairs share a row). Per area the first table shows only rows with at least one gap (cache-only, stub, error, missing, ?); the collapsible full list below it shows every row.

Gap work 2026-10-10 (branch claude/gaps-t23-t31, T23 and T31 only): the vendor libimp/libsysutils of every build (8 T23, 28 T31) were checked for the gap functions. Not exported by any vendor build, so now n.a. instead of missing: T23 OSD_GetRegionLuma, SU_Battery_* (T23, T31), T31 ISP_Tuning_SetDPStrength, Decoder_*, EmuFrameSource_*, ADEC_ReleaseDecoder, AENC_ReleaseEncoder (declared in some headers only). Vendor no-op matched: T23 Encoder_Get/SetH265TransCfg (drops the value, Get zero-fills; device-tested), T31 Encoder_SetFrameRelease. Implemented: T31 ISP_SetFixedContraster (attr pointer as control 0x8000102 like the vendor; host test, device-tested; T23 now dev too). Remaining gaps are class c (T23 driver has no handler for the controls of ISP_Tuning_SwitchBin, AwbSync, SetWB_ALGO, Get/SetOSDAttr, Get/SetOSDBlock, Get/SetDrawBlock) or class d (fisheye flag, frame-loss threshold, multi-section mode, FB_*, SU_Base_Shutdown); see the notes of the rows.

Gap work 2026-10-10 (branch claude/gaps-t23-t31-b, T23 and T31, host work only, device test pending; driver side in open-tx-isp claude/gaps-t23-t31-drv, which is not in agg-36 (held back until its T23 SwitchBin is reworked), so the T23 class c cells keep their previous state; vendor libimp T23 1.3.0 and T31 1.1.6 disassembly, stock tx-isp-t23.ko in the emulator): class a (vendor behaviour matched): T23 ISP_Tuning_AwbSync (not exported by libimp 1.3.0; the stock kernel rejects the control too; now n.a.). Class b (OpenIMP): none, the T23 entry points already pass all controls to the driver. Class c (open-tx-isp, emulator-identical where the stock code could be run): T23 ISP_Tuning_Get/SetDrawBlock, Get/SetOSDAttr, Get/SetOSDBlock (stored on the stock mscaler object, no image effect yet, as the mask blocks), ISP_Tuning_SwitchBin (tisp_switch_bin rewritten around the IQ loader), ISP_Tuning_SetWB_ALGO (accepted as stock, stub: the open AWB has no threshold window to switch); T31 ISP_SetFixedContraster (the driver handler now calls tisp_set_bcsh_fixed_contrast). Class d (not worth it): T23 and T31 Encoder_Get/SetFisheyeEnableStatus, T23 Encoder_Get/Setframelossthd and SetMultiSectionMode (T31 1.1.6 exports neither), T31 FB_* (only the 1.1.5-zrt display builds export them), SU_Base_Shutdown (libsysutils, vendor-identical). Counts: T23 gaps 15 to 7, T31 8 to 8 (SetFixedContraster was not counted as a gap; its cell is host now).

Gap work 2026-10-10 (branch claude/gaps-t1x, T10/T20/T21, vendor export check only, host-only, no device session): the 4 vendor libimp builds per SoC (T10 3.9.0/3.12.0, T20 3.9.0/3.12.0, T21 1.0.33) and their libsysutils were checked with nm. Exported by none, so now n.a.: ISP_Tuning_SaveAllParam (T10/T20/T21), ADEC_ReleaseDecoder/AENC_ReleaseEncoder (T10/T20), SU_Battery_* (T10/T20/T21). Gaps in functions: T10 28 to 21, T20 27 to 20, T21 14 to 9. Everything else stays open; the vendor libimp does export ChangeRef, FrmUsedMode, GOPSize, HSkipBlackEnhance, OSD_AttachToGroup, Decoder_* (T21), and the T10/T20 H264 variants, WDRAttr, ISPHVflip, MeshShadingScale, AntiFogAttr, DPStrength (T10/T20), so these are classes b/c and not yet worked (low priority: no streamer uses them).

Gap work 2026-10-10 (branch claude/gaps-t1x-impl, T10/T20/T21, vendor disassembly of libimp T21 1.0.33 and T10/T20 3.12.0, device-tested): the 3.12.0 libimp of T10 and T20 is one and the same binary. Per function: **(a/b) done**: Encoder_Get/SetChnFrmUsedMode (T10/T20/T21; stored like the vendor, also before CreateChn), Encoder_GetGOPSize (T10/T20/T21; idle channel answers 0 on T21, -1 on T20), ISP_Tuning_SetDPStrength (T10/T20, T21 now device-tested), ISP_Tuning_Get/SetISPHVflip and Get/SetWDRAttr (T10/T20; the WDR switch is the V4L2 control 0x98e912 with the vendor's mode cache, the HV flip uses the ISP flip pair because the open T20 driver does not serve the vendor's module-control word), OSD_AttachToGroup (T10/T20/T21; system_attach() splice, host test). **Stored, effect only in the closed vendor encoder (cache, classes c/d)**: Encoder_Get/SetChangeRef, SetChnHSkipBlackEnhance, Get/SetFisheyeEnableStatus (T10/T20/T21, vendor return codes and idle/created rules matched), Get/SetChnDemask and Get/SetChnHSkip (T10/T20). **Not worth it / not possible**: Decoder_* (class d: no decoder in the open stack, no user), ChnH264Demask/Denoise/FrmUsedMode and ChnRcAttr (class d: exported only by the 3.9.0 libimp, an older ABI generation than OpenIMP implements), SetAntiFogAttr T10/T20 (class c: the antifog Iridix preset path of the open driver hung cameras), SetMeshShadingScale (class c: the vendor writes an ISP register through a userspace mapping, no driver control), SU_Base_Shutdown (class d, unchanged). Device results with the apitest (agg-34 plus these changes, libimp from /tmp, streamer restarted, config md5 unchanged, 0 oopses): T20 148 PASS / 0 FAIL / 2 N/A / 2 SKIP, T21 155 / 0 / 2 / 2, T10 147 / 1 / 2 / 2 (the one FAIL is the pre-existing SetSuperFrameCfg read-back on T10). Gaps by row: T10 21 to 15, T20 20 to 14, T21 8 to 5.

Gap work 2026-10-10 (branch claude/gaps-t30, T30, host and build only, no T30 camera; vendor libimp 1.0.5 disassembled and compared with T21 1.0.33 and T31 1.1.6): the T30 build now exports 317 of the 334 vendor names (was 271; export check of build-t30.sh, audio 68 of 68). No streamer (timps, prudynt, raptor RVD) imports any of the 63 names that were missing (prudynt has one commented-out IMP_Encoder_SetFisheyeEnableStatus call), so no streamer-used T30 function was open. Per function: **(a/b) done, host-tested**: Encoder_Get/SetChnFrmUsedMode, Encoder_GetGOPSize, ISP_Tuning_SetDPStrength, SetAntiFogAttr, Get/SetAeStrategy, Awb_Get/SetCwfShift, Get/SetWDRAttr and Get/SetISPHVflip (the T30 libimp has the same code as T20/T21 for these; the ISP calls use the same tuning controls with a fake-ioctl host test, whether the open T30 driver serves each control is not checked), OSD_AttachToGroup (same wrapper as T21); the 21 DMIC_* functions by compiling the T31 implementation into the T30 build (the T30 libimp disassembles like T31 apart from buffer sizing; the T30 oss2 audio driver has the same DMIC ioctls; one microphone per device on T30; host test with a fake /dev/dsp; the AEC calls are compared, not run). **Stored only (cache)**: Encoder_Get/SetChangeRef, SetChnHSkipBlackEnhance, Get/SetFisheyeEnableStatus, Get/SetChnHSkip (the IDR period is not handed to the T30 encoder) and ISP_Tuning_SetTemperDnsCtl; three more vendor exports that have no matrix row are exported the same way (Encoder_SetPoolSize, Encoder_SetChnRcTrigLevel, ISP_Tuning_SetAFThreshold). **Wishlist (c, needs a T30 device or driver work)**: Decoder_* (8; Helix/Radix decoding), Encoder_Get/SetChnCrop (the vendor crops in 16-pixel units inside its encoder; the SPS-level crop of the Helix path needs a device check), ISP_Tuning_SetISPLDC (an LDC ioctl sequence on the ISP node). **Not worth it (d)**: Encoder_Enable/DisableAllNCUDenoise (register access of T30-class chips), Encoder_PadFrame and SetPadFrameAttr (external frame injection), Encoder_Get/SetRencFirstFrameMult (parameter of the closed re-encode controller, no default known); these 8 names are not matrix rows. Found on the way: the T21 build returns the stored value for GetChangeRef of a created channel, while the same vendor code (T21 1.0.33, T30 1.0.5) fails there with "unsupport to change ref channel", and the T21 Get/SetChnHSkip refuse an idle channel that the vendor accepts (reported, not changed for T21). T30 gaps: 54 to 19 (11 missing, 8 cache-only), 13 functions host and 22 aud, 0 streamer-used gaps.

Gap work 2026-10-10 (branch claude/gaps-t1x-c, T10/T20/T21, vendor disassembly, host tests only, the cameras were in a soak): three vendor deviations fixed. **T21 GetChangeRef** on a created channel returned the stored value; the vendor (T21 1.0.33 0x48d90, T30 1.0.5 identical; T10/T20 3.12.0 0x4b220 read the value) logs "unsupport to change ref channel" and returns -1, now matched. **T21 Get/SetChnHSkip** rejected an idle channel; the vendor (0x478f0/0x47ba0) stores without the maxHSkipType check (Set) and answers all zero (Get), now matched; T10/T20 stay -1 on an idle channel as their vendor. **T10/T20 Get/SetChnDenoise** read dnType back as 0 because the T20 build also defines PLATFORM_T21; T10/T20 now keep type and QPs like the 3.12.0 vendor (no two-pass encode, cell stays cache). Remaining gap rows re-checked against the disassembly: all are classes c/d (closed vendor encoder, driver control missing, 3.9.0-only names, vendor-equal defect), none is a cheap a/b item; T10 SetMbRC is a matched no-op (the vendor T10 controller has no macroblock part).

Not re-measured in this update: T10 (not re-tested on the open stack), T41 (its fixes live in claude/release-t41, not in the release), the _Sec and MultiCamera_ variants of T23 (the apitest exercises the base function), and every function the apitest skips on purpose. T10 uses the T20 userspace build (and the T20 SDK tuning code in the driver), so its cells mirror T20 unless the note says otherwise. T30 and T40 are tabled since 2026-10-10 (see the T30/T40 paragraph below).

T30/T40 columns (added 2026-10-10, host/build evidence only; no T30 camera, T40 device results only from the cam-K run of 2026-10-10). Vendor function lists: T30 = the export list of the vendor libimp 1.0.5 (fixture tests/t30/fixtures/t30_vendor_1.0.5_imp_exports.txt, 334 names; headers timps/include/T30/1.0.5/zh); T40 = the vendor headers 1.3.1 (timps/include/T40/1.3.1/en; the T40 board runs vendor libimp 1.3.0). Open side: nm -D of build/t30/libimp.so built from next (ed7bd82, 594,232 B; build-t30.sh export check: 271 of 334 vendor exports, audio 68 of 68; after the gap work of 2026-10-10 on claude/gaps-t30: 317 of 334, audio 68 of 68) and of the T40 libimp.so built from claude/t40-t41-api (9035e30, 375,752 B). Cell rules: n.a. = not in that vendor list; miss = in the vendor list but not exported; err = exported as an ENOTSUP shim (T40, src/t40/openimp_p3_compat.c: all OSD, IVS, DMIC, ISP-OSD, CCM, gamma, mask, module control, sensor attr and SnapFrame calls; the T40 contributor's gate in docs/T40_STATUS.md says the same: P4 surfaces not used by the gate return ENOTSUP); host = covered by a host test of the shared code (T40: the camera-input trio in tests/t40, the ISP control and FrameSource delay/I2D calls in tests/t41, which build the shared src/t40 code with -DPLATFORM_T41); ? = exported, behaviour not audited and not run on a camera. Nothing is dev on T30 (host or aud cells only come from the gap work of 2026-10-10, host tests and disassembly comparisons); the T40 dev cells come from the cam-K run of 2026-10-10; SU_* cells are ? (libsysutils is not part of the libimp build). A ? on T30/T40 does not by itself move a row into the gap lists and the ► mark counts only cache/stub/err/miss on T30/T40. Used-by for T40: timps is binary-verified (nm of the T40 timpsd), the prudynt/raptor entries are the per-row source-derived ones (†) and were not re-derived for T40. Earlier finding (export coverage only): the only function raptor needed on T40 and OpenIMP lacked was SetCameraInputMode/SetCameraInputSelect; they are now implemented (9035e30, host test only, no camera) and show as host. Counted as ENOTSUP shims the streamer-used T40 gaps are many more (see below), so that earlier finding does not hold at the behaviour level. 15 vendor functions that had no row yet were added (T40: ISP_Bypass_Bind, ISP_GetCameraInputMode, ISP_SetCameraInputSelect, ISP_Get/SetDrawAttr, ISP_Get/SetOSDAttr, ISP_Get/SetSingleOSDAttr, ISP_GetRaw, ISP_SetPreDqtime, ISP_SetScalerLv, ISP_Tuning_Get/SetAeSpeed, Get/SetFaceAwb, Get/SetHLDCAttr, GetISPBypass, SetFixedContraster; T30: ISP_Tuning_SetISPLDC). Not tabled: names that the vendor T30 1.0.5 libimp exports without a header (24 names, for example IMP_Alloc*, undistort and pad-frame calls), SU_ADC_Init and the IMP_LOG_* macros.

History (update log, long notes)

As of: 2026-10-25, RC2 (v2026.10.25-rc2 = OpenIMP next 7c30aa99 plus documentation, open-tx-isp next 1bf4549d plus documentation; this code runs on all 19 test cameras as image agg46 since 2026-10-25; the soak of 2026-10-24/25 on the T40/T41 cameras was clean); before that 2026-10-24, evening (T40 reload/quality/cells/CSC/night merges, T41 RC parameters rounds 3-4 and colour check, T31 front crop; OpenIMP next f55f620f, open-tx-isp next e5030fd4; soak of this state running); before that 2026-10-24, third pass (T41 defog fix and default on, NR/DPC/module size/CPU load/buffer sharing/RC parameters; OpenIMP next 518df91, open-tx-isp next 091e1fa2); before that 2026-10-24, second pass (T41 reload/WDR/crop/telemetry/ROI/DPC, T40 AE/AWB/day-night from the merged quality branch, T31 MXU2 AWB); before that 2026-10-24 (T40/T41/T31 updated from the A/B runs against the vendor stack and the merges since 2026-10-19, see the first Summary entry; T40/T41 columns re-evaluated row by row against the newest device evidence, see the first Summary entry; T40/T41 I2D, JPEG pitch, OSD after I2D, T40 PTS and device tests: see the #20-#29 entries marked 2026-10-19), before that 2026-10-12 (T40 night branch, see the first update below), 2026-10-11 aggregate agg-36 after RC1 (OpenIMP and open-tx-isp claude/agg-36; build and host tests, no soak yet; device results only where a cell says so). Before that: RC1 v2026.10.11-rc1: openimp fe9307c (agg-35 687a68e4 + docs), open-tx-isp 191be6c5 (agg-35 6e464ac7 + docs); overnight soak clean. Detail: 2026-10-10 evening (release candidate agg-35, see the update paragraph in the summary; before that agg-34: OpenIMP agg-34 2a1b1cd and open-tx-isp agg-34 b15ef235 on top of next, mandatory device tests of the night 2026-10-09/10 included; the per-cell details below are a chronological test log, newest results win). Camera mapping of the older sections: cam-A = T31, cam-B = T23, cam-C = T20, cam-D = T21, cam-E = T10, cam-F = T41; cam-G and cam-H are further T23 cameras (other sensors) that run the same stack. The agg-32 soak has its own letters (see the changelog). Addendum 2026-10-10 afternoon: front crop vs flip, AeComp T20/T31, agg-34.1 (T31 WDR statistics ring, regression fix, T21/T23/T20/T10 not affected), T41 experimental notes; T20/T21 encoder ROI QA flake is timing only (ROI applies at the next IDR).

Branch names in brackets (claude/...) and the tags [-all-N] are historic: those branches were merged into next and deleted. Where a cell says "not yet in an aggregate", "device test pending" or "opt-in", check the summary below and the defaults table in OPENIMP_BEYOND_VENDOR.md first.

See also: the section "API coverage per function" below (generated: vendor IMP/SU functions per SoC, what works, what is open, what the streamers need); OPENIMP_BEYOND_VENDOR.md (integration notes for streamer authors on everything marked beyond vendor).

Summary

  • RC2 (v2026.10.25-rc2, 2026-10-25; OpenIMP next 7c30aa99, open-tx-isp next 1bf4549d, plus documentation): changes against RC1 (v2026.10.11-rc1): OpenIMP 278 and open-tx-isp 634 commits; the rendered matrix marks every cell that is new or better than at RC1 (badge "RC2", filter "only changes since RC1", count per SoC). This pass: T40 #3 boot guard ✅ (dry run), #42 libalog/libsysutils ✅+ (not needed by OpenIMP), #32 AO and #33 AEC 🔧 "not RC2-relevant, sound tests pending" (no "?" left in the T40 column), #41 long-term stability ✅ for T40 and T41 on the overnight soak of 2026-10-24/25 (.32, .34, .184 clean; log audit/logs1024/soak-agg4z.log); T31 #41 stays ⚠️ (.33 hang on the old agg43 image; .29 multi-day run until 2026-10-29). Known RC2 limitations (kept ⚠️): T40 #9 manual CCM has only a small effect, T40 #12 sharpness is 4-5 % below the vendor, T40 #29 pans not re-tested. Release note: RELEASE_NOTES_RC2.md.
  • Test pattern (beyond vendor, 2026-10-19): synthetic test picture modes 1-4 (pattern, moving, motion test, sensor pattern) with runtime API, control socket and host evaluation tools; per-SoC status table, usage and limits in TESTPATTERN.md.
  • Update 2026-10-25, evening (T30 in QEMU, open-tx-isp next): the T30 image (thingino qemu_t30x, sc4236 model) boots in our QEMU; six driver/t30 bugs fixed (isp-m0 proc read oops, sensor module export, calibration control oops, AE IRQ after sensor rmmod, reload soft lockup, unknown-sensor release oops). T30 #2 reload ? -> 🔧 (10 cycles clean in QEMU); #6, #7, #12, #20, #43 ? -> 🔧 (controls reach the driver in QEMU, partly implemented). No T30 camera: no device result, frames-to-encoder not run. Details: open-tx-isp CHANGELOG.
  • Update 2026-10-25, after RC2 (OpenIMP next c524c3a0, open-tx-isp next 136e8b99): T41 #15 defog ✅ -> ✅+ (strength API beyond vendor, device-tested on .32). T40 #29 motion ⚠️ -> ✅ (8/8 pans on agg46, 0 false results); T40 #9 CCM ⚠️ -> ✅+ (vendor applies only R->R of a manual CCM, open the full matrix); T40 #12 BCSH/sharpness ⚠️ -> ✅ (OEM rounding fix + DMSC day follow, day colour after night fixed, open-tx-isp 6d63667b); T40 counts now 5 ✅+ / 33 ✅ / 0 ⚠️. T41 rate control (#26, symbol unchanged ✅): FixQP now uses the vendor dynamic lambda for H.264 and H.265 (P sizes vendor-equal, OpenIMP 9ca0c894/e95ade0f), and H.265 FixQP streams decode again (PPS cu_qp_delta_enabled_flag 1 like the vendor). T23 test pattern mode 5 (ISP middle, OpenIMP 4ce343bd + open-tx-isp mdns_ref_hold 7970b5dc) and OpenIMP_TestPattern_Supported (c5fedf2a): see TESTPATTERN.md / 2 🔧 (#32/#33, no sound test) / 5 —. open-tx-isp next f18148ff: T40 SetISPRunningMode no longer reports a false error. T40: AE/AWB now also follow a sub-stream-only consumer (open-tx-isp 7458b67e, device-tested on .184; #10 stays ✅). T31: t31_mxu2_cpm text only. Counts T41 before 4 ✅+ / 34 ✅ / 1 ⚠️ / 6 —, now 5 ✅+ / 33 ✅ / 1 ⚠️ / 6 —.
  • Update 2026-10-24, evening (basis: OpenIMP next f55f620f, open-tx-isp next e5030fd4; the fleet soak of exactly this state runs until 2026-10-25 10:00, #41 stays ⚠️ for T31/T40/T41 until it is evaluated): merged since the third pass: open-tx-isp T40 reload/unload fixes, framechan release after a dead client, tuning-control oops fixes (SetModuleControl, SetMask, SetWdrOutputMode, CCM/CSC/Gamma getters, SetScalerLv), AE EV fan-out, AE caps and AeTargetComp, DRC/Sinter/Temper ratios, CSC to BCSH, DMSC night follow, module size, T31 front-crop upscale and AWB IRQ stack, ISP IRQ quiesce before request_irq on T31/T23/T21 (QEMU finding, compiled only on T23/T21); OpenIMP T40 encoder query/telemetry, AI volume/gain, SetDefaultParam, T41 RC parameters rounds 3-4 (read-back, I-model scale, SC_PREVENTION gate), buffer sharing, versioned telemetry. T40: #2 reload ⚠️ -> ✅+ (30/30 cycles, the vendor module oopses on rmmod), #5 AE compensation 🔧 -> ✅ (HLC/BLC strength still no effect), #6 limits/FPS 🔧 -> ✅, #10 day/night ⚠️ -> ✅ (DMSC follows the night bank: dark+IR p50 8 against vendor 11, before 25), #13 mirror/flip 🔧 -> ✅ like vendor (the vendor ignores the sensor flip on the sc830ai too), #14 WDR/ADR/DRC 🔧 -> ✅ (DRC ratio visible; ADR bypass small effect, noted), #16 NR 🔧 -> ✅ (Temper ratio = vendor formula), #19 privacy mask 🔧 -> ✅ (ch0 on the open driver), #20 crop/scaler/CSC ⚠️ -> ✅ like vendor (same CSC registers, no ch0 change on either stack), #27 RC parameters ? -> ✅ (default-parameter comparison, user decision), #31 audio input ? -> ✅ (microphone; #32/#33 need no sound test for RC2), #35 module size ⚠️ -> ✅ (accepted: 404 KB against 230 KB xz because of lifted chains, duplicate paths and diagnostics), #43 getters 🔧 -> ✅, #44 telemetry 🔧 -> ✅; #9 CCM/LSC 🔧 -> ⚠️ (LSC and GetGamma work, CCM set/read-back works but its picture effect is small), #12 stays ⚠️ (open picture softer: day edge energy 5.5 against 6.8). T41: #27 RC parameters ⚠️ -> ✅ (user decision: scene-change recovery is faster than the vendor's); colour/CCM/AWB are vendor parity by chart measurement (cells unchanged). T31: #20 front crop ⚠️ -> ✅ (enlarging up to 2.0x by default, device-tested on a T31L; beyond 2.0x refused, the MSCA hangs there), #41 stays ⚠️ (the 10-17 reboot analysed, mitigation merged, unproven). Function tables: T40 SetScalerLv, Get/SetCCMAttr, Get/SetISPCSCAttr, GetGammaAttr, Get/SetModuleControl, Get/SetWdrOutputMode, Module_Ratio, AeExprInfo and Get/SetSensorFPS host -> dev (T40 dev 118 -> 134, host 112 -> 96; gaps unchanged at 56). Open for T40: #29 motion pans are device-proven on the merged code of 2026-10-19 (8/8) but not re-run on the final build, cell stays ⚠️; #3 and #42 unknown, #32/#33 without sound test. Counts T40 before: 2 ✅+ / 16 ✅ / 7 ⚠️ / 9 🔧 / 5 — / 6 ?, now 3 ✅+ / 29 ✅ / 4 ⚠️ / 0 🔧 / 5 — / 4 ?. Counts T41 before: 4 ✅+ / 33 ✅ / 2 ⚠️ / 6 —, now 4 ✅+ / 34 ✅ / 1 ⚠️ / 6 —. Counts T31 before: 9 ✅+ / 32 ✅ / 2 ⚠️ / 2 —, now 9 ✅+ / 33 ✅ / 1 ⚠️ / 2 —.
  • Update 2026-10-24, third pass (basis: OpenIMP next 518df91, open-tx-isp next 091e1fa2): merged since the second pass: open-tx-isp T41 defog root-cause fix and defog default on, T41 size switches, T41 live crop envelope, T40 quality, T31 MXU2 AWB default; OpenIMP T41 RC parameters like the vendor libimp, ROI under FixQP, encoder telemetry, DPC tool. T41: #15 defog 🔧 -> ✅ (diamond lattice fixed: the translated chain read its tables from the wrong rodata image; defog registers equal the vendor dump, defog now on by default; the strength sweep was not tested), #16 NR ⚠️ -> ✅ (the night softness was the missing defog, NR itself has lower noise than the vendor and no detail loss), #17 DPC ⚠️ -> ✅ (true-dark test: DPC on removes all hot pixels, 332 peaks remain with the module bypassed; default = ratio 128 = vendor), #35 module size ⚠️ -> ✅ (836 KB against the vendor 778 KB, accepted for RC2: the +7 % are functions the vendor module lacks), #38 CPU load ⚠️ -> ✅ (the /proc/stat system column hides the vendor kernel-thread time on these NO_HZ_FULL kernels; spinner method: the open stack leaves about 4 % more CPU free), #37 buffer sharing ? -> — (the vendor has no reference-frame sharing on T40/T41; SetAvpuBsShare and the vendor stream-slot default are in an unmerged branch, pending), #27 RC parameters stays ⚠️ (APIs vendor-equal now, IP/PB delta and the other stored-only parameters under RE). T40 #37 ? -> — (same finding). Open stability issue: .34 rebooted twice under 1080p + 360p at 25 fps 8000 kbit/s and .32 once during load tests; cause not found, #41 stays ⚠️, investigation running. T40 quality follow-ups (sharpness, night) and T41 #27 are running. Counts T41 before: 4 ✅+ / 28 ✅ / 6 ⚠️ / 1 🔧 / 0 ❌ / 5 — / 1 ?, now 4 ✅+ / 33 ✅ / 2 ⚠️ / 0 🔧 / 0 ❌ / 6 — / 0 ?. Counts T40 before: 2 ✅+ / 16 ✅ / 7 ⚠️ / 9 🔧 / 4 — / 7 ?, now 2 ✅+ / 16 ✅ / 7 ⚠️ / 9 🔧 / 5 — / 6 ?. Counts T31 unchanged at 9 ✅+ / 32 ✅ / 2 ⚠️ / 2 —.
  • Update 2026-10-24, second pass (RC2 agent results; basis: OpenIMP next 958f7f3, open-tx-isp next 9730342f): claude/t40-quality is now merged into open-tx-isp next (the "not merged" remarks of the entry below about it, T31 MXU2 AWB and T41 diagnostics are overtaken; defog strength is unchanged). T41: #2 reload ⚠️ -> ✅+ (49 cycles in one boot on .34, no oops, no leak; the vendor leaks a page per stream start and keeps a stale i2c client), #14 WDR/ADR/DRC 🔧 -> ✅ (DRC strength effect measured, WDR is flag-only on a linear sensor like the vendor), #20 front crop ⚠️ -> ✅ (live crop ch0 1920x1080 and ch1 up to 1280x720 on the device, driver envelope default now 1920x1080; the SetScalerLv curve levels show no visible effect at 4.5:1 and have no vendor A/B), #44 telemetry ⚠️ -> ✅ (Encoder_Query real values plus beyond-vendor OpenIMP_Encoder_GetTelemetry), #45 ROI ⚠️ -> ✅+ (works under FixQP, where the vendor shows no effect; all "no effect under FixQP" statements removed), #17 DPC 🔧 -> ⚠️ (effect measured: DPC on halves the isolated peaks; default against ratio 128 still undecided, a re-test in a dark slot is running). T40 (Eufy .184, A/B with the vendor stack, merged claude/t40-quality): #4 AE ⚠️ -> ✅ (day luma 119 against 122, light step settles in under 1 s, dark-step luma 124 against 105), #8 AWB ⚠️ -> ✅ (R/G 0.98, B/G 1.00 against 1.00 / 1.02, grey deviation 16 / 13 % against 12 / 11 %), #10 day/night 🔧 -> ⚠️ (switching measured; forced night luma -16 %, black level p1 17 against 7), #12 BCSH stays ⚠️ (sharpness -28 %), #16 NR stays 🔧 (strength effect not measured), #2 stays ⚠️ (rmmod of the open module has hung the SoC; no reload test since 2026-10-13). Only the module build was tested on the camera; the image build and a soak are still to come. T31: the AWB statistics sweeps run through the MXU2 vector unit by default (t31_awb_impl=2, selected after a load-time self-test, bit-exact, device-tested on a T31X .21 and a T31L .29, about 2.4 times faster sweeps; t31_awb_impl=0/1 switch it off); notes in #8 and #38, symbols unchanged. Counts T41 before: 2 ✅+ / 25 ✅ / 9 ⚠️ / 3 🔧 / 0 ❌ / 5 — / 1 ?, now 4 ✅+ / 28 ✅ / 6 ⚠️ / 1 🔧 / 0 ❌ / 5 — / 1 ?. Counts T40 before: 2 ✅+ / 14 ✅ / 8 ⚠️ / 10 🔧 / 4 — / 7 ?, now 2 ✅+ / 16 ✅ / 7 ⚠️ / 9 🔧 / 4 — / 7 ?. Counts T31 unchanged at 9 ✅+ / 32 ✅ / 2 ⚠️ / 2 —.
  • Update 2026-10-24 (T40/T41/T31 re-evaluated against the A/B runs with the vendor stack and the merges since 2026-10-19; basis: OpenIMP next 567eebd, open-tx-isp next 2c29ce79): merged into next since 2026-10-19: T41 EV-unit fix in the per-frame tone worker (gamma/CCM/BCSH/ADR/TMO, brightness and saturation at the vendor level), reduced ISP IRQ mask, MXU3 TMO map (tmo_map_impl=2) by default, defog default off (diamond artefacts), night/day bank applied from the AE statistics IRQ when idle and after the first AE exposure (automatic night and automatic return to day work); T31 isp_memopt=1 stripe fix (vendor-equal MDNS patch) and the AE minimum EV step; T40 bind oops fix (antiflicker SET smashed the caller's saved register in s_ctrl), IQ bin path from the sensor name. Not merged (local branches only, the cells stay as they were): T40 image quality claude/t40-quality (AWB/day colours at the vendor level, night picture and sharpness still open), T31 MXU2 AWB claude/t31-mxu2-stats (CPM-gated, self-test passed on one camera, no timing figures yet), T41 diagnostics claude/t41-gaps, T4x defog strength claude/t4x-defog-strength. T41 (A/B on .32 gc5603 and .34 sc5336, agg4x, one run per stack, deltas below 5 % are noise): day luma/saturation/contrast/edges, colour temperature, AE settling (31-34 s against 33-34 s), automatic night after 7-8 s and automatic return to day are at the vendor level or better (the vendor stack does not return to day by itself on .32), night noise better on .32; ISP interrupts 25-45 % below the vendor, timpsd RSS 35-45 % below. Cells changed: #10 day/night ⚠️ -> ✅, #15 defog ❌ -> 🔧 (chain runs, effect measured at ratio 255, default off, strength API not merged), #38 CPU load ✅+ -> ⚠️ (system CPU on .32 7.6 % against 2.2 %). Still not like the vendor: night edge energy -35 % on .32, night noise +19 % and lower-cabinet grey balance on .34, ISP module +31 % (746 against 568 kB), first snapshot after idle too dark on .34, a forced day mode leaves the AWB at 5000 K, t41_isr_framedown is inert in the native build. Counts T41: 3 ✅+ / 24 ✅ / 9 ⚠️ / 2 🔧 / 1 ❌ / 5 — / 1 ? before, now 2 ✅+ / 25 ✅ / 9 ⚠️ / 3 🔧 / 0 ❌ / 5 — / 1 ?. T40 (Eufy .184, A/B with the vendor stack): the image of next with the default enable_core_ops_cb=0 is clearly worse than the vendor (orange cast because the vendor AWB is never triggered, day luma -12 %, AE 5-10 times slower, forced night picture -69 %, soft picture -45 % edge energy); claude/t40-quality brings day colour, day luma and AE speed to the vendor level but is not merged and night/sharpness stay open, so the AE/AWB/BCSH/day-night cells stay ⚠️/🔧. Changed: #36 MemFree ? -> ✅ (38.7 against 39.3 MB). #35 numbers updated (2173 against 764 kB). Counts T40: 2 ✅+ / 13 ✅ / 8 ⚠️ / 10 🔧 / 4 — / 8 ? before, now 2 ✅+ / 14 ✅ / 8 ⚠️ / 10 🔧 / 4 — / 7 ?. T31 (notes only, no symbol changes): memopt=1 stripes gone, AE minimum EV step, fleet CPU 8 % against 18 % with the vendor libimp, 22 h and 18 h soaks clean; counts unchanged at 9 ✅+ / 32 ✅ / 2 ⚠️ / 2 —.
  • Update 2026-10-19 (T40/T41 column audit, docs only): all 45 rows of the T40 and T41 columns were re-evaluated against the newest device evidence (open-tx-isp and OpenIMP next, audit notes of 2026-10-17..19); older T40/T41 paragraphs below are history, the cells and the detail bullets of #1-#45 are current. T40 (Eufy T40XP / sc830ai, open driver tx_isp_t40; the H.265, mask and first-run results of 2026-10-10/11 come from the vendor ISP driver and say so): 2 ✅+, 13 ✅, 8 ⚠️, 10 🔧, 4 —, 8 ?, 0 ❌ (before: 1 / 7 / 2 / 7 / 6 / 19 / 3). Newly device-proven on the open driver: anti-flicker, vendor AE per frame with the sensor limits (20 fps under timps), AutoZoom/crop, I2D rotation, ch1 sub-stream, H.264 300 s regression, restart cycles, JPEG, OSD, capped rate control, PTS. T40 AWB (gray-world default, ct_detect behind t40_awb_ctd) and the per-frame AE (needs enable_core_ops_cb=1, gain 4-5x above the vendor) are ⚠️; #26 and #29 (rate control, motion) are owned by the T40 CBR/motion re-measurement and were not touched. T41 (Vanhua .32 gc5603, Cinnado .34 sc5336): 3 ✅+, 24 ✅, 9 ⚠️, 2 🔧, 1 ❌, 5 —, 1 ? (before: 3 / 27 / 4 / 0 / 6 / 4 / 1). The T41 "not supported" cells were checked against the driver: CCM, gamma, CSC and module control are implemented and device-tested (✅), DPC and DRC ratio exist in the driver without a device measurement (🔧), crop/AutoZoom works (⚠️), defog is still refused (❌), scene/colour effects do not exist in the vendor T41 library (—). Corrections the other way: module size (#35, T40 3015 KB and T41 1004 KB against 980/779 KB vendor), module reload (#2 T41, heap bug), day/night (#10 T41, night bank not swapped), ROI under FixQP (#45 T41), stability (#41). The table-versus-detail inconsistencies (rows 10, 12, 13, 19, 20, 41, 44) are resolved; the generator reports none.
  • Update 2026-10-15 (agg-39 candidates, device-tested on their branches, aggregate claude/agg39 built and host-tested, no soak yet): T41 ISP_Tuning_WaitFrameDone returns -1/ETIMEDOUT when no frame arrives (deviation from the vendor, which returns 0), runs outside the library lock (a parallel GetBrightness took up to 1780 ms before, now < 0.1 ms) and logs no syslog line for timeouts; frames are counted while frame source channel 0 runs, so timps without a client makes every wait time out (cam-F, 2026-10-14) [claude/t41-wfd-timeout]. T40 PollingStream returns within its deadline without frames (Eufy T40, 35 results as before) [claude/t40-poll-timeout]. T21: sensor exposure/gain written only on change in open-tx-isp, i2c IRQs 50–51/s → 0–2/s, picture unchanged (cam-D, 2026-10-14) [open-tx-isp claude/t21-i2c-cache]; libimp Helix per-frame path back to -Os, no CPU difference (cam-D, 2026-10-14) [claude/t21-os-revert]; OPENIMP_EPRC_MBRC=1 device-tested on cam-D (2026-10-15): macroblock QP spread like the vendor, P-frames within scene drift, default still off in next [claude/t21-mbrc-default, not in agg39]. The T21 "CBR substream overshoot" was a measurement artefact (whole pull incl. audio; video track 528 kbit/s at 512).
  • Update 2026-10-12 (agg-38, build and host tests, no soak): OpenIMP claude/agg-38 = agg-37 + claude/awbstats/awbzone, claude/t31-rc-collapse, claude/oimp-thread-names, claude/t21-cpu-fix, claude/t40-night, claude/t41-isp-handlers, claude/funcsearch-run4; T40 ISP_StartNightMode and ISP_Bypass_Bind dev from the Eufy T40 run of claude/funcsearch-run5 (same requests as the merged code). The cells of the branch updates below are merged; progress table recounted.
  • Update 2026-10-12 (claude/awbstats, device-tested on the Eufy T40 and the T41, not in an aggregate): ISP_Tuning_GetAwbStatistics is dev on T40 and T41: vendor ABI and semantics verified (2700-byte block of three 15x15 u32 planes, zone means of the raw pre-WB R, G, B statistics), 0 only with a block that holds statistics (T41 open driver -EAGAIN unless fresh; all-zero block -1), new symbol OpenIMP_Cap_AwbStatistics; T40 gives the same numbers as the vendor libimp on the same scene. Needs the open-tx-isp claude/awbstats driver on T41. Used by timps 1.10.2 (night colour trigger).
  • Update 2026-10-12 (claude/awbzone, device-tested on T31 and T23, not in an aggregate): ISP_Tuning_GetAwbZone is dev on T23 and T31 with the vendor block and scaling (truncated zone means of the AWB statistics, stock Tiziano_awb_fpga), returns 0 only with fresh statistics (open driver -EAGAIN otherwise) and exports OpenIMP_Cap_AwbZone; T40/T41 stay n.a. (no vendor GetAwbZone, per-zone AWB statistics are GetAwbStatistics). Needs the open-tx-isp claude/awbzone driver. Used by timps 1.10.2 (night colour trigger).
  • Update 2026-10-12 (T40 night, claude/t40-night, host only, no camera): fixes of the Eufy T40XP FAILs of 2026-10-11 from the vendor 1.3.1 disassembly: GetHVFlip and GetBcshHue answer the vendor cache, GetISPRunningMode reads the payload word, Encoder_Query vendor fields; the HVFLIP/hue/running-mode picture checks of 2026-10-11 measured stale frames (devtest fixed). New on T40 (host): Encoder_Get/SetChnSeiAttr (SEI in front of the slice), ISP_Get/SetDrawAttr, ISP_StartNightMode, OSD_SetGroupCallback, OSD_Get/SetRgnAttr_ISP, AI/AO_Get/SetDigitalGain; Encoder_SetFrameRelease stores the ratio (no-op as on T31). Also ISP_WDR_OPEN, ISP_Bypass_Bind, ISP_GetRaw (host). Device test script for the next run: tests/t40/devtest phases 4, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000. T40 gaps 72 -> 56.
  • Update 2026-10-11 (T41 ISP handlers, branch claude/t41-isp-handlers in OpenIMP and open-tx-isp, host tests and module build only, not in an aggregate): T41 ISP_Tuning_Get/SetAwbConvergeStep, Get/SetAwbCtTrendOffset, GetAeEvList/GetAEEvList, GetAeAtList, Get/SetTmoCurve, Get/SetStatisConfig, WaitFrameDone and GetHVFlip (the 1.0.1 name of GetHVFLIP) are host (exported with the vendor 1.2.6 control numbers, routed in the open driver). Get/SetAeConvergeStep is cache: stored in the AE parameters like the vendor, but only the recovered vendor AE reads it; the default open AE keeps its own step. Still miss: GetAeBv and GetAEFlickerFlag (vendor-AE internal state the open AE does not keep). StatisConfig stores the AE histogram thresholds and the AF part only (no AF on the test board), the AWB part moves the AWB zone grid. T41 gaps 147 (was 160). Device run 2026-10-12 (cam-F, T41/gc5603, vendor-free open stack with the branch module and libimp, streamer running; the gaps number is unchanged): dev for Get/SetAwbConvergeStep, Get/SetAwbCtTrendOffset, GetAeEvList/GetAEEvList, GetAeAtList, Get/SetStatisConfig (a geometry change of the AWB grid while streaming gives -EBUSY, an unchanged geometry 0, the stored record stays unchanged after a refused set) and GetHVFlip: libimp calls (imptest) and raw /dev/isp-m0 requests (isptest/t41c) read back what was set, bad arguments give -EINVAL/-EFAULT, 0 kernel errors. Get/SetAeConvergeStep stays cache (set value read back; only the recovered vendor AE uses it). Still host, NOT proven: Get/SetTmoCurve get/set/bad-argument paths pass, but the mean luma did not change with a curve scaled to 60 % (the TMO map is not running in this configuration, t41_tmo_frames=0), so no visible effect; WaitFrameDone returns 0 but its frame counter does not advance while streaming (it moves only for the first frames after a stream start), so every wait runs into its timeout; to be fixed in the driver. Set AwbCtTrendOffset changed the mean U by less than 1 level in a dim scene (inconclusive for the colour effect, to be repeated in daylight).
  • Update 2026-10-11 (agg-37, build and host tests, no soak): OpenIMP claude/agg-37 = agg-36 + size work, T10/T20 SetAntiFogAttr/SetMeshShadingScale, T40 HEVC FixQP and 4K drain, the function-finder branches (T40 ISP controls, T40 Fisheye, T40 ROI and MapRoi opt-in, T41 ISPBypass, make export-check/release-check). Corrections: T41 Encoder_Get/SetChnRoiAttr and SetChnMapRoi are cache, not host (the table is written behind OPENIMP_T41_ROI=1, but the T41 AVPU ignores it); T23 Decoder_* is err (the decoder ran in the OEM Helix worker, which is off by default since agg-37). Also in agg-37: T10/T20 SetChnRcTrigLevel and the T41 run-time bit-rate retarget (claude/agg37-rc-live), SU_Base_Shutdown exported by OpenIMP on every SoC (reboot by default, host). Gap counts (progress table): T10 33 (was 34), T20 31 (was 32), T21 15 (was 16), T23 21 (was 14), T31 7 (was 8), T41 160 (was 158).
  • Update 2026-10-11 (function finder, make export-check): the T41 cells of FrameSource_Get/SetDelay, Get/SetMaxDelay, Get/SetI2dAttr, GetTimedFrame, Get/SetChnFifoAttr and of ISP_Tuning_Get/SetModuleControl, Get/SetAutoZoom, Get/SetMaskBlock, SetScalerLv were stale (error/cache): the T41 build exports real code (vendor 1.2.6 semantics; the kernel side of AutoZoom/MaskBlock/ScalerLv needs the open driver handlers). Corrected to host (implemented, not run on a camera). Encoder_Get/SetChnCrop is exported by the vendor libimp of T10/T20/T21 but not by OpenIMP: cells corrected from n.a. to missing (T10/T20/T21 function count +2). T40: 11 OSD rows (OSD_AttachToGroup, RgnCreate_Query, RgnRegister_Query, SetMosaic, and the *_ISP calls behind the device-tested ISP-OSD) were missing in the cell but are exported by the T40 build: corrected to host (T40 progress-table gaps 85 -> 74). New check: make export-check compares the exports of each built libimp.so with the vendor export lists (tools/export-check/) and with the IMP_ names used by streamer sources.
  • Update 2026-10-11 (agg-36, after RC1; build and host tests of the aggregate, no soak): T40 rate control, AVPU command lists and H.265 (device-tested on their branch), T40 ISP-drawn OSD, Get/SetMask and SwitchBin (device-tested), T40 BCSH getters from the vendor cache (host), T41 SwitchBin, AutoZoom, SetMaskBlock, SetScalerLv (host and module build), SetbufshareChn as the vendor (T31/T40/T41), log level OPENIMP_LOG_LEVEL, IVS post order, T30 gap work (317 of 334 exports), T10/T20/T21 and T23 vendor return codes. The T23 driver rows of the second T23/T31 gap pass stay as before (that driver branch is held back). The T40 open items below about CBR, H.265, GetBrightness, the pixel format and P1_INNER are fixed in agg-36. Gap counts after this update (progress table): T23 14 (was 15), T30 19 (was 54), T40 109 (was 120), T41 177 (was 179); T10 32, T20 30, T21 14, T31 8 unchanged.
  • Update 2026-10-10 evening (agg-35: OpenIMP 687a68e4, open-tx-isp 6e464ac7, built 2026-10-10; soaked 2026-10-10 18:04 to 2026-10-11 08:00 on 10 cameras: clean (0 oopses, 0 unexplained reboots, 0 streamer restarts, VA-API 54/54). RC1 = this code plus docs; features that exist only in later branches (agg-36) are not in this matrix.
  • T40, first OpenIMP device run (cam-K, T40XP, vendor kernel driver tx_isp_t40, vendor libimp 1.3.0, OpenIMP via LD_LIBRARY_PATH, 2026-10-10; every result is OpenIMP vs vendor): PASS/dev: AddSensor/EnableSensor; FrameSource ch0 3840x2160 and ch1 640x360 with GetFrame (timestamps monotonic, non-zero); H.264 on ch0 and ch1 (10 s, clean strict decode); OSD PIC and COVER (OpenIMP draws COVER on NV12, the vendor library fails with "COVER cannot support this format"); IVS move (20 s); FrameSource_SnapFrame; JPEG on ch1 (software JPEG since 257ba9d); ISP GetSensorAttr, Gamma get, CCM get, ModuleControl get, AeScenceAttr get/set; GetCameraInputMode. Fixed during the run: the stream timestamp was 0 (a5d9b03); JPEG was a grey placeholder (257ba9d).
  • T40 open (re-checked on the open stack 2026-10-19, Eufy .184): the CBR deficit is gone (see row 26: mean within 2 % of the target with real content); GetBrightness works (128 default, 100 after SetBrightness(100)); the pixel-format word is 0 as in the vendor library; P1_INNER writes nothing to stderr; still open: the frame size is 16-line aligned (353280 B for 640x360, vendor 345600 B). H.265: see its row. JPEG at 4K not tested (out of memory in the test process, 60 MB RAM). Vendor note: GetAeExpList hung the vendor kernel driver; the magenta cast seen with timps stopped was the IR cut left open, not the library. Only the functions above are dev; the rest of T40 stays host or ?. The combined Get/Set rows of Gamma, CCM and ModuleControl are host (Get dev, Set host), since only the Get is device-tested.
  • T41 audio and driver controls: AI_SetVolMute, AO_SetVolMute, AO_Soft_Mute/AO_Soft_UNMute are a software mute as in the vendor library (the vendor uses no ioctl); API-level test only (rc 0, invalid argument -1), host in the tables, because the T41 test board has no audio hardware (no microphone, no speaker). The driver controls FrameDrop, SensorRegister, ISP_WDR_ENABLE/_GET and AfWeight are device-tested (claude/t41-driver-gaps, in agg-35). Get/SetWdrOutputMode has no stock handler in the driver (explained, counted as vendor no-op). AutoZoom, SetMaskBlock and SetScalerLv stay deferred: live MSCA reprogramming carries a hang risk.
  • Audio on T10, T20, T21, T23, T31 (AEC device test 2026-10-10): audio output (IMP_AO enable/SendFrame, playback of a known signal at several volumes, SetVol) played a signal that was recorded back; audio input (IMP_AI enable/GetFrame, SetVol/SetGain, mono 16 kHz) recorded it; EnableAec returns 0. The AO/AI rows and the single-call cells are dev for these five SoCs; the combined Get/Set volume and gain rows stay as they were (host where they were aud). T21: a microphone gain above 0 drives the noise floor up (hardware, open and vendor stack alike). T41: no audio hardware on the test board, the T41 AI, AO and AEC rows are — (the earlier T41 microphone figures were the noise floor of an unconnected input).
  • Gap counts after this update (progress table): T40 120 gaps (was 171; 74 by row), T41 179 gaps (was 187; 123 by row).

T30 and T40 columns (added 2026-10-10) were added from host/build evidence only (no T30 camera; the T40 cells were host evidence until the cam-K run of 2026-10-10). T40: first OpenIMP device run done on cam-K (2026-10-10, T40XP, vendor kernel driver, vendor libimp 1.3.0 side by side; headers are 1.3.1). In the function tables T30 has 347 vendor functions with 19 gaps (after the gap work of 2026-10-10: 11 missing exports, 8 stored only; before: 54, all missing exports) and T40 has 398 with 120 gaps after the cam-K run (92 missing, 28 error: DMIC, ISP-OSD, mask and the open items below; OSD, IVS, CCM, gamma, sensor attr and SnapFrame are implemented since agg-35); the other T30/T40 cells are ? (exported, not audited, not run), host or (T30) aud.

Release candidate agg-34 (2026-10-09 evening, device results of the night 2026-10-09/10 added)

  • Final agg-34 after the review fixes (S1 T31 front crop survives the ISP session, S2 T31 zoom only with a scaled main stream, S3 Helix absolute ROI no longer worse than the slice QP): OpenIMP 2a1b1cd, open-tx-isp b15ef235 (test images with these on all 10 test cameras since 2026-10-09 night). The first state of the candidate was:
  • State: OpenIMP agg-34 (838f8147) = agg-32 (8980cae) + the encoder ROI clamp (fec3e69, 8545fb9) + the reviewed DeepSeek patches (11abe42 and 17 patches); open-tx-isp agg-34 (da9baf1e) = agg-32 (3cf9bdac) + front-crop fixes for T31, T23, T20 and T10 (d940ba20 to 10bac52f, 164225e5) + T20 isp-m0 reports the reachable analog gain cap (da9baf1e). The first release still covers T10, T20, T21, T23 and T31; T41 is experimental and not part of it.
  • Soak of agg-32 (2026-10-07 16:07 to 2026-10-09 11:31, 43.4 h, stopped early by the user): 0 unplanned reboots, 0 oopses, 0 guard trips, 0 snapshot failures and no memory trend on the cameras without user interaction. The only reboots were a planned OTA and two crashes from enabling a front crop on T31 (fixed in agg-34, see below). The numeric picture check found the T20 day/night regression, the T10 black frame in the dark and the T41 channel-1 colour/exposure problem (known issues below).
  • Encoder ROI (region QP): T31 has an ROI that the vendor library does not have (IMP_Encoder_SetChnRoiAttr through the AVPU QP table, beyond vendor): device-tested, delta -10 gives 2.7x the bit rate, a relative -20 becomes -19 (clamped), 0 decoder errors in 20 VA-API checks; the night run of 2026-10-10 went through 20 phases (deltas, absolute QPs, clamp, off/on) with the stream valid in VA-API and in strict ffmpeg (-err_detect). Known deviation: under FixQP 42 a window of absolute 5 or relative -25 drives the P-frames to QP about 14 almost frame-wide (bit rate about x4, stream stays valid). T10/T20/T21 apply SetChnROI on the Helix/NVPU: device-tested (T21 by default, beyond vendor); T20/T10 absolute ROI re-tested on 2026-10-10: valid H.264, no inversion (fix S3). All ROI paths now keep the stream valid H.264: every mb_qp_delta lies in -25..+25 (a relative -26 or an absolute QP far from the picture QP produced broken pictures in hardware decoders such as VA-API, VLC and browsers), picture QP plus delta stays inside the rate control's min/max QP. T23: regions on the native Helix encoder, device-tested on 2026-10-10 (QP map shows the window, streams valid in VA-API and strict ffmpeg). T40/T41: on by default since 2026-10-18 (T40 FixQP and CBR, T41 CBR/VBR only; no effect under FixQP on T41). Rules and numbers: docs/ROI.md, docs/OPENIMP_BEYOND_VENDOR.md.
  • Front crop: T10/T20/T21/T23 device-tested on 2026-10-09 after the fixes (T23: crop off unlocks the window, a window that does not fit is dropped instead of hanging the MSCA, the lock is released with the ISP session, module parameter fcrop_upscale_pct; T20/T10: a window set before stream-on is kept while no downscaled channel is open, is applied at stream on and survives substream restarts (device-tested 2026-10-10); the release of the window at tuning-session close is not verified). T31: the crash is fixed (the kernel refuses a window the MSCA would have to upscale with -EINVAL; scaler steps and latch are written; module parameter fcrop_upscale_pct); device-tested on 2026-10-10: a valid window zooms both streams (proven), too-small windows are rejected without a hang, and the window survives a restart and a flip.
  • DeepSeek patches (17, reviewed, plus one corrected): struct sizes and layouts of the vendor ABI (T40/T41 encoder stream, channel attributes, frame info, sensor info, OSD attributes), encoder group bounds (6 like the vendor on T20/T21/T30/T31/T41, 8 kept on T23/T40), T31 IVS channel 64, OSD_SetPoolSize(0), GetDefaultBinPath, idempotent IVS group create/destroy, polling-stream guards. Host tests and make check are green on all SoCs and the cross-builds pass; the combined agg-34 ran on the test cameras in the night 2026-10-09/10 (mandatory tests passed, streamer smoke on 9 cameras 50 of 50 without a PollingStream spin); not yet checked separately on cameras: OSD groups, IVS, T31 SnapFrame offsets and the T41 OSD size.
  • T20 day/night: the driver reported an analog gain cap of 158 in isp-m0 while the AE stops at 128, so a streamer waiting for the cap never saw it reached and stayed in Day mode in the dark. isp-m0 now reports the smaller of the two: device-tested on T20 on 2026-10-10 (maximum analog gain 128). The streamer needs its matching change (timps 5bc4eff) for the switch to work; day/night with both is not yet confirmed. On T10 (jxh42) isp-m0 still reports 144 at boot (128 once it is set explicitly): open finding.
  • Streamer smoke test on 9 cameras (night 2026-10-09/10): 50 of 50 checks passed, no PollingStream spin (the streamer CPU stayed normal at stream restarts).

Known issues (agg-34)

  • T41 sub-channel (ch1): green or flat frames at each day/night switch and the exposure of channel 1 does not follow channel 0 (channel 0 is fine). T41 is experimental and not part of the first release.
  • T20 day/night needs the open-tx-isp fix (da9baf1e) and the streamer change (timps 5bc4eff); with agg-32 alone both T20 cameras stayed in Day mode in the dark. Not yet confirmed on a camera with both.
  • T10 analog gain cap: isp-m0 of the jxh42 camera reports a maximum analog gain of 144 at boot (128 once set explicitly); T20 reports 128 (fixed). Open.
  • ROI under FixQP: with FixQP 42 an absolute 5 or relative -25 window lowers the P-frames to QP about 14 almost frame-wide (bit rate about x4); the stream is valid, but a streamer should not offer the extremes on a fixed-QP stream.
  • T20/T10 front crop: the release of the window at tuning-session close is not verified.
  • T10: the soak saw a few rounds where the camera switched to Day in the dark and delivered a black frame (3 events in 44 h).
  • 720p main stream shows only the top-left corner when the streamer reads /proc/jz/sensor/sensor0/* before the sensor is started (streamer side; seen on T21 and T20).
  • Streamer ROI limit: the library keeps ROI streams valid H.264 from agg-34 on (a relative QP of -26 used to break Intel VA-API, VLC, Firefox and Edge from the ROI row on); a streamer that offers -26 should offer -25 as its lowest value.

Release candidate agg-27/agg-28 (2026-10-06 evening; the apitest figures below are from that day)

  • State: OpenIMP agg-27 (affb8ff) and open-tx-isp agg-28 (79b754b4). Release plan: next goes to aperto (fast-forward) after the long soak, tagged vYYYY.MM.DD. The first release covers T20, T21, T23 and T31; T10 is part of it but was not re-tested on the open stack today (its cells mirror T20 and were not re-measured); T41 is not part of the first release (experimental, see below).
  • Device results of the day (apitest, one call per vendor function; the camera streamer was stopped, the release libimp and the release-candidate modules were loaded from RAM): T20 on two cameras 212 PASS / 0 FAIL / 17 N/A / 30 SKIP, T21 on two cameras 228 PASS / 0 FAIL, T23 304 PASS / 4 FAIL (the four AF getters, off by default in that run; with the new default source_af=1 they pass on a second T23 camera), T31 274 PASS / 1 FAIL (see known issues). N/A means the node or API does not exist on the board or in the vendor library (no RTC/ADC node, SU battery functions not exported, T20 GetAeZone, T23 GetBlcAttr), SKIP means the call is deliberately not exercised (writes hardware registers, reboot, cipher). 0 kernel oopses on every camera.
  • What the code level "dev" means in the function tables below: the call passed apitest or imgfx on a camera of that SoC on 2026-10-06 (or an earlier documented device test). Cells of T10 were not touched by this run. The imgfx colour run of the release candidate was made in the dark (night mode), so its colour verdicts are not used; the colour image functions have to be repeated in daylight.
  • New since the last matrix: GetFrame/SnapFrame wait up to 2 s like the vendor library on T20/T21/T23/T31 and the T20 capture no longer stalls (apps that call SetFrameDepth get frames); Encoder_GetFd (pipe plus pump thread); a JPEG channel feeds itself from the frame source when its video channel is not polled; two IVS groups; InsertUserData SEI; PollingModuleStream honours the channel bitmap; T20 encoder ROI and chroma QP offset; T21 SetBrightness acts and SEPIA works (both beyond vendor); T31 SetFrameDrop with the stock semantics; T23 release defaults (stock-like start/stop set, STREAMOFF drain wait), VBM pool parking and MSCA scratch buffer, AF statistics on by default, 19 ISP getters.
  • Vendor no-ops that are matched, not "fixed": T21 SetAntiFogAttr and SetSceneMode (the OEM kernel accepts and ignores them), T20/T10 GetAeZone (the stock module does not serve the control), T23 GetBlcAttr/SetScalerLv (no handler in the stock module). T23 H.265 stays refused: there is no HEVC hardware (n.a.).

Known issues of the agg-27 candidate (older; superseded where agg-34 says so)

  • T23 crop hang: the pipeline stops after a FrameSource crop change (hard hang, found with the crop test); under investigation. It is a release blocker. Fixed in agg-34 (open-tx-isp 25b1d8c7, 164225e5; device-tested on T23, retest on the release image pending).
  • T31 H.264 stalled after the JPEG channel was torn down: fixed: two threads polled the same encoder channel at once (AL_Codec_Encode_Process concurrently); IMP_Encoder_PollingStream now serialises per channel (openimp claude/release-fix27 5c2ccef), apitest on T31 FAIL 0 with the fix; goes into the next candidate (agg-29).
  • T41 is not part of the first release: MSCA channel 1 scaling registers are staged only (a downscale above 4:1 gives garbage, buffers with index 1 and above show a band), a restart of the output hangs the SoC (watchdog reboot at 1280x720 / 1440x810 on channel 1), 38 tuning IDs are still missing (gamma, CCM, CSC, module control, auto zoom, manual exposure, DRC, DPC, defog ratio, mask, scaler level), flip is not reset on restore, the FIFO delay of the frame source is missing. The T41 branches claude/release-t41 (OpenIMP) and claude/t41-ch1-fix (driver) are not merged. T41 apitest on that branch: 255 PASS / 12 FAIL.
  • T21: the IPU needs about 2 s after a wake before the OSD blend takes effect; the first snapshot is withheld until the overlay is confirmed (beyond vendor), the cause is not found. The OSD in the live stream after a wake is checked after the candidate tests.
  • T23: the sporadic Helix encode error (errno 5): 0 errors in 6 days on cam-B since the 0102 fix (syslog: 342, 32, 37 and 419 errors on 10-01..10-04, then 0 from 10-05 to 10-10); provisionally closed, still observed; no real WDR, as before.

What is complete

  • All five original test cameras (cam-A T31, cam-B T23, cam-C T20, cam-D T21, cam-E T10) run fully on the open kernel driver, OpenIMP and timps from flashed images; cam-F (T41) runs the same stack from the aperto full OTA image; no Ingenic/neo helper libraries any more, and on T23 no helixd and no vendor libimp either.
  • Core functions are backed by evidence: H.264 on all six SoCs (soaks up to 2 h 53 without errors), HEVC on T31, hardware JPEG/MJPEG, second stream, OSD (text, bitmap, rectangle, line), real motion detection, day/night, flip.
  • Beyond the vendor: reload/stop robustness (0 oops in 10 cycles each), smaller libimp (~0.5–0.6 MB instead of 1.0–1.3 MB), more free video memory on T21 (2.76 MB instead of ~1.2 MB), T31 module smaller than vendor, T21 controls and noise reduction take effect (the vendor ignores them), T31 AEC with −18 dB echo, reference-frame sharing on T21/T23 (~1.5 MB less video memory, on by default).

Open items from 2026-10-04 (still valid unless the release-candidate section above says otherwise)

  • T23: the frequent Helix frame drops had a fixed cause (a residual interrupt treated as an error by the bounded-wait kernel patch; 60 min with 0 errors after the fix); the sporadic single encode error (errno 5): 0 errors in 6 days on cam-B since the 0102 fix (syslog: 342, 32, 37 and 419 errors on 10-01..10-04, then 0 from 10-05 to 10-10); provisionally closed, still observed. The root cause of the cold-start snapshot 503 on a second channel (stale MSCA FIFOs) is fixed in the driver (msca_fifo_rearm, 260 cold-start cycles without a failure) and awaits its soak before it enters next. Real WDR is missing (dynamic ADR is lifted, no WDR sensor mode).
  • T41 (cam-F): runs the fully open stack with H.264 (main stream High 1080p ok) and H.265; AE compensation, gain/exposure caps and 2D noise reduction work through OpenIMP; DRC, DPC, defog, WDR, CCM, gamma, HLC and BLC are not supported on T41 (the driver says so). Open: crop, temper effect, ioctl hardening awaits its device test, live flip (timps does not call SetHVFLIP live), night column noise of the gc5603 (ISP), short IVS gaps (~1.2 s), OOM with three parallel streams and 30 MB rmem (26 MB works in the current image; the kernel command line needs an environment-partition image), AddSensor EBUSY after an OOM kill; day/night, AE/AWB quality, audio untested.
  • T10 (cam-E): AE/AWB quality and image controls only partly documented.
  • T21: a 4th module reload in one boot crashed once (under investigation); ae_it_max_us acts, which is beyond the vendor and kept by decision.
  • Rate control: T10/T20 run the OEM-style controller for CBR/VBR (SMART is mapped to VBR); T10/T20/T21 accept QP steps, staticTime/changePos/qualityLvl without all of them acting on every path; T31 CBR writes no filler NAL.
  • AEC: only T31 is device-tested (T23 implemented, device test open; no speaker tests on the shared test cameras). Audio output only on T31.
  • Not yet exposed by timps (static caps; on T41 AE compensation and sinter are wired, the gain/exposure caps follow): DPC strength, defog/Iridix floor, DRC strength and the scene/colour effects; the timps side is decided by the timps maintainers.
  • T30 has no device in the test campaign (it builds against a real kernel; not device-verified here); T40 has one camera (cam-K) since 2026-10-10.
  • Opt-in and not device-tested: OPENIMP_EPRC_QP_DOWN1, OPENIMP_T23_HELIX_BSF. OPENIMP_EPRC_MBRC (ported, 0 oracle deviations): T21 device-tested 2026-10-15 on cam-D (macroblock QP spread like the vendor), T23 device test (docs/T23_EPRC.md) not finished; opt-in.

Defaults in next that older cells may still call opt-in or pending: T20/T10 OEM rate controller on, T10 super-frame fix on, T20 I-aware P budget on for CBR, T21 vendor-identical eprc on, T31 Allegro RC core on, reference sharing on T21/T23 on, motion detection v2 on (OPENIMP_MOTION_V2=0 = vendor algorithm), T23 vendor AE as default (source_ae_oem=1), isp_mmap_pool_kb=0 on T10/T20 (+8 MB free RAM), rmem peak logging and shortfall hints.

State on 2026-10-04: all test cameras run full OTA images built from thingino aperto (Lu-Fi forks pinned to open-tx-isp next 40cc77ec and OpenIMP next db760431) since 2026-10-04 17:39-17:47, with timps v1.9.31 and the kernel VPU/rmem patches as merged upstream; cam-F (T41) rootfs rev7 with rmem 26M. A 24 h soak has run since 17:50 (5 h so far: 0 streamer restarts, 0 encoder/VPU errors, 0 oops); the first release tag follows after it.

Not adopted: OSD edge flush, reference sharing on T10/T20/T31 (not in that SoC's encoder; the vendor has none either).

Legend

✅ supported works, matches vendor behaviour, tested or backed by the changelog✅+ improved beyond vendor more robust, leaner or more functional than the vendor stack⚠️ known defect / deviation runs, but with a known defect or a deviation from the vendor🔧 in progress branch is running or a test is pending📋 planned deliberately scheduled, not started yet (mostly low priority)❌ missing not implemented— hardware does not have it not applicable? unknown not documented in the sources, deliberately not guessed[-all-13]: historic tag (tested before the later aggregates); everything so tagged is contained in next

T30/T40 columns added 2026-10-10. Evidence basis: host and build evidence only. There is no T30 camera in the lab, so no T30 cell is better than 🔧 (code present, or a live result documented by the T30 contributor in docs/T30_STATUS.md, not repeated by us) and nothing is ✅. T40 cells rest on the branch claude/t40-t41-api (merged into agg-35, not yet in next) and, since 2026-10-10, on the cam-K device run: host tests, the cross-build and the exported symbols of its libimp.so, plus the T40 contributor's live gate in docs/T40_STATUS.md (2026-07-30, stock tx_isp_t40 driver). T40: first OpenIMP device run on cam-K (2026-10-10): T40XP board, vendor kernel driver tx_isp_t40, vendor libimp 1.3.0, OpenIMP loaded via LD_LIBRARY_PATH; every T40 result is OpenIMP versus the vendor library; the cells that run as dev are exactly the functions listed in the update paragraph at the top. The rest stays host or ?. ? = nothing documented or only an exported symbol without a test; — on T40 = the call does not exist in the T40 1.3.1 vendor headers. Camera letters: none for T30 (no camera); cam-K = T40 (T40XP). The function tables below hold the per-call detail.

Generated from docs/status/ and docs/api_evidence.json by tools/gen_feature_matrix_html.py; do not edit by hand.