This document catalogs all IMP (Ingenic Media Platform) API functions and headers used by the prudynt-t project.
imp/imp_system.h- System initialization, binding, versioningimp/imp_isp.h- Image Signal Processor controlimp/imp_framesource.h- Frame source channel managementimp/imp_encoder.h- Video encodingimp/imp_audio.h- Audio input/output/encoding/decodingimp/imp_osd.h- On-Screen Displayimp/imp_ivs.h- Intelligent Video System (motion detection)imp/imp_ivs_move.h- IVS motion detection interfaceimp/imp_common.h- Common definitions
sysutils/su_base.h- Base sysutils functions
IMP_System_Init()- Initialize the systemIMP_System_Exit()- Cleanup and exitIMP_System_Bind(IMPCell *srcCell, IMPCell *dstCell)- Bind two cellsIMP_System_UnBind(IMPCell *srcCell, IMPCell *dstCell)- Unbind two cellsIMP_System_GetVersion(IMPVersion *pstVersion)- Get library versionIMP_System_GetCPUInfo()- Get CPU information stringIMP_System_GetTimeStamp()- Get current timestampIMP_System_RebaseTimeStamp(uint64_t basets)- Rebase timestamp
IMP_ISP_Open()- Open ISPIMP_ISP_Close()- Close ISPIMP_ISP_AddSensor(IMPSensorInfo *pinfo)- Add sensor (T21/T23/T31)IMP_ISP_AddSensor(IMPVI vi, IMPSensorInfo *pinfo)- Add sensor (T40/T41)IMP_ISP_DelSensor(IMPSensorInfo *pinfo)- Delete sensor (T21/T23/T31)IMP_ISP_DelSensor(IMPVI vi, IMPSensorInfo *pinfo)- Delete sensor (T40/T41)IMP_ISP_EnableSensor()- Enable sensor (T21/T23/T31)IMP_ISP_EnableSensor(IMPVI vi, IMPSensorInfo *pinfo)- Enable sensor (T40/T41)IMP_ISP_DisableSensor()- Disable sensor (T21/T23/T31)IMP_ISP_DisableSensor(IMPVI vi)- Disable sensor (T40/T41)IMP_ISP_EnableTuning()- Enable ISP tuningIMP_ISP_DisableTuning()- Disable ISP tuning
IMP_ISP_Tuning_SetSensorFPS(uint32_t fps_num, uint32_t fps_den)- Set sensor FPSIMP_ISP_Tuning_GetSensorFPS(uint32_t *fps_num, uint32_t *fps_den)- Get sensor FPSIMP_ISP_Tuning_SetAntiFlickerAttr(IMPISPAntiflickerAttr attr)- Set anti-flickerIMP_ISP_Tuning_SetISPRunningMode(IMPISPRunningMode mode)- Set running mode (day/night)IMP_ISP_Tuning_GetISPRunningMode(IMPISPRunningMode *pmode)- Get running modeIMP_ISP_Tuning_SetISPBypass(IMPISPTuningOpsMode enable)- Bypass ISPIMP_ISP_Tuning_SetISPHflip(IMPISPTuningOpsMode mode)- Horizontal flipIMP_ISP_Tuning_SetISPVflip(IMPISPTuningOpsMode mode)- Vertical flipIMP_ISP_Tuning_SetBrightness(unsigned char bright)- Set brightnessIMP_ISP_Tuning_SetContrast(unsigned char contrast)- Set contrastIMP_ISP_Tuning_SetSharpness(unsigned char sharpness)- Set sharpnessIMP_ISP_Tuning_SetSaturation(unsigned char sat)- Set saturationIMP_ISP_Tuning_SetAeComp(int comp)- Set AE compensationIMP_ISP_Tuning_SetMaxAgain(uint32_t gain)- Set max analog gainIMP_ISP_Tuning_SetMaxDgain(uint32_t gain)- Set max digital gainIMP_ISP_Tuning_SetBacklightComp(uint32_t strength)- Set backlight compensationIMP_ISP_Tuning_SetDPC_Strength(uint32_t ratio)- Set DPC strengthIMP_ISP_Tuning_SetDRC_Strength(uint32_t ratio)- Set DRC strengthIMP_ISP_Tuning_SetHiLightDepress(uint32_t strength)- Set highlight depressIMP_ISP_Tuning_SetTemperStrength(uint32_t ratio)- Set temporal denoise strengthIMP_ISP_Tuning_SetSinterStrength(uint32_t ratio)- Set spatial denoise strengthIMP_ISP_Tuning_SetBcshHue(unsigned char hue)- Set hueIMP_ISP_Tuning_SetDefog_Strength(uint32_t strength)- Set defog strengthIMP_ISP_Tuning_SetWB(IMPISPWB *wb)- Set white balanceIMP_ISP_Tuning_GetWB(IMPISPWB *wb)- Get white balance
IMP_FrameSource_CreateChn(int chnNum, IMPFSChnAttr *chn_attr)- Create channelIMP_FrameSource_DestroyChn(int chnNum)- Destroy channelIMP_FrameSource_EnableChn(int chnNum)- Enable channelIMP_FrameSource_DisableChn(int chnNum)- Disable channelIMP_FrameSource_SetChnAttr(int chnNum, IMPFSChnAttr *chn_attr)- Set channel attributesIMP_FrameSource_GetChnAttr(int chnNum, IMPFSChnAttr *chn_attr)- Get channel attributesIMP_FrameSource_SetChnFifoAttr(int chnNum, IMPFSChnFifoAttr *attr)- Set FIFO attributesIMP_FrameSource_GetChnFifoAttr(int chnNum, IMPFSChnFifoAttr *attr)- Get FIFO attributesIMP_FrameSource_SetFrameDepth(int chnNum, int depth)- Set frame depthIMP_FrameSource_SetChnRotate(int chnNum, int rotation, int height, int width)- Set rotation (T31 only)
IMP_Encoder_CreateGroup(int encGroup)- Create encoder groupIMP_Encoder_DestroyGroup(int encGroup)- Destroy encoder groupIMP_Encoder_CreateChn(int encChn, IMPEncoderChnAttr *attr)- Create encoder channelIMP_Encoder_DestroyChn(int encChn)- Destroy encoder channelIMP_Encoder_RegisterChn(int encGroup, int encChn)- Register channel to groupIMP_Encoder_UnRegisterChn(int encChn)- Unregister channelIMP_Encoder_StartRecvPic(int encChn)- Start receiving picturesIMP_Encoder_StopRecvPic(int encChn)- Stop receiving picturesIMP_Encoder_GetStream(int encChn, IMPEncoderStream *stream, bool block)- Get encoded streamIMP_Encoder_ReleaseStream(int encChn, IMPEncoderStream *stream)- Release streamIMP_Encoder_PollingStream(int encChn, uint32_t timeoutMsec)- Poll for streamIMP_Encoder_Query(int encChn, IMPEncoderChnStat *stat)- Query channel statusIMP_Encoder_RequestIDR(int encChn)- Request IDR frameIMP_Encoder_FlushStream(int encChn)- Flush streamIMP_Encoder_SetDefaultParam(IMPEncoderChnAttr *attr, ...)- Set default parametersIMP_Encoder_GetChnAttr(int encChn, IMPEncoderChnAttr *attr)- Get channel attributesIMP_Encoder_SetJpegeQl(int encChn, IMPEncoderJpegeQl *attr)- Set JPEG qualityIMP_Encoder_SetbufshareChn(int srcChn, int dstChn)- Set buffer sharing (T31/T40/T41)IMP_Encoder_SetFisheyeEnableStatus(int encChn, int enable)- Enable fisheye (T31)
IMP_AI_Enable(int audioDevId)- Enable audio deviceIMP_AI_Disable(int audioDevId)- Disable audio deviceIMP_AI_SetPubAttr(int audioDevId, IMPAudioIOAttr *attr)- Set public attributesIMP_AI_GetPubAttr(int audioDevId, IMPAudioIOAttr *attr)- Get public attributesIMP_AI_EnableChn(int audioDevId, int aiChn)- Enable channelIMP_AI_DisableChn(int audioDevId, int aiChn)- Disable channelIMP_AI_SetChnParam(int audioDevId, int aiChn, IMPAudioIChnParam *attr)- Set channel paramsIMP_AI_GetChnParam(int audioDevId, int aiChn, IMPAudioIChnParam *attr)- Get channel paramsIMP_AI_SetVol(int audioDevId, int aiChn, int vol)- Set volumeIMP_AI_GetVol(int audioDevId, int aiChn, int *vol)- Get volumeIMP_AI_SetGain(int audioDevId, int aiChn, int gain)- Set gainIMP_AI_GetGain(int audioDevId, int aiChn, int *gain)- Get gainIMP_AI_SetAlcGain(int audioDevId, int aiChn, int gain)- Set ALC gain (T21/T31/C100)IMP_AI_PollingFrame(int audioDevId, int aiChn, uint32_t timeoutMs)- Poll for frameIMP_AI_GetFrame(int audioDevId, int aiChn, IMPAudioFrame *frame, IMPBlock block)- Get frameIMP_AI_ReleaseFrame(int audioDevId, int aiChn, IMPAudioFrame *frame)- Release frameIMP_AI_EnableNs(IMPAudioIOAttr *attr, int level)- Enable noise suppressionIMP_AI_DisableNs()- Disable noise suppressionIMP_AI_EnableHpf()- Enable high-pass filterIMP_AI_DisableHpf()- Disable high-pass filterIMP_AI_EnableAgc(IMPAudioIOAttr *attr, IMPAudioAgcConfig config)- Enable AGCIMP_AI_DisableAgc()- Disable AGC
IMP_AENC_RegisterEncoder(int *handle, IMPAudioEncEncoder *encoder)- Register encoderIMP_AENC_UnRegisterEncoder(int *handle)- Unregister encoderIMP_AENC_CreateChn(int aeChn, IMPAudioEncChnAttr *attr)- Create channelIMP_AENC_DestroyChn(int aeChn)- Destroy channelIMP_AENC_SendFrame(int aeChn, IMPAudioFrame *frame)- Send frameIMP_AENC_PollingStream(int aeChn, uint32_t timeoutMs)- Poll for streamIMP_AENC_GetStream(int aeChn, IMPAudioStream *stream, IMPBlock block)- Get streamIMP_AENC_ReleaseStream(int aeChn, IMPAudioStream *stream)- Release stream
IMP_ADEC_RegisterDecoder(int *handle, IMPAudioDecDecoder *decoder)- Register decoderIMP_ADEC_UnRegisterDecoder(int *handle)- Unregister decoderIMP_ADEC_CreateChn(int adChn, IMPAudioDecChnAttr *attr)- Create channelIMP_ADEC_DestroyChn(int adChn)- Destroy channelIMP_ADEC_SendStream(int adChn, IMPAudioStream *stream, IMPBlock block)- Send streamIMP_ADEC_GetStream(int adChn, IMPAudioStream *stream, IMPBlock block)- Get streamIMP_ADEC_ReleaseStream(int adChn, IMPAudioStream *stream)- Release stream
IMP_OSD_SetPoolSize(int size)- Set OSD pool sizeIMP_OSD_CreateGroup(int grpNum)- Create OSD groupIMP_OSD_DestroyGroup(int grpNum)- Destroy OSD groupIMP_OSD_CreateRgn(IMPRgnHandle handle, IMPOSDRgnAttr *prAttr)- Create regionIMP_OSD_DestroyRgn(IMPRgnHandle handle)- Destroy regionIMP_OSD_RegisterRgn(IMPRgnHandle handle, int grpNum, IMPOSDGrpRgnAttr *pgrAttr)- Register regionIMP_OSD_UnRegisterRgn(IMPRgnHandle handle, int grpNum)- Unregister regionIMP_OSD_SetRgnAttr(IMPRgnHandle handle, IMPOSDRgnAttr *prAttr)- Set region attributesIMP_OSD_GetRgnAttr(IMPRgnHandle handle, IMPOSDRgnAttr *prAttr)- Get region attributesIMP_OSD_SetGrpRgnAttr(IMPRgnHandle handle, int grpNum, IMPOSDGrpRgnAttr *pgrAttr)- Set group region attrIMP_OSD_GetGrpRgnAttr(IMPRgnHandle handle, int grpNum, IMPOSDGrpRgnAttr *pgrAttr)- Get group region attrIMP_OSD_UpdateRgnAttrData(IMPRgnHandle handle, IMPOSDRgnAttrData *prAttrData)- Update region dataIMP_OSD_ShowRgn(IMPRgnHandle handle, int grpNum, int showFlag)- Show/hide regionIMP_OSD_Start(int grpNum)- Start OSD groupIMP_OSD_Stop(int grpNum)- Stop OSD group
IMP_IVS_CreateGroup(int grpNum)- Create IVS groupIMP_IVS_DestroyGroup(int grpNum)- Destroy IVS groupIMP_IVS_CreateChn(int chnNum, IMPIVSInterface *handler)- Create IVS channelIMP_IVS_DestroyChn(int chnNum)- Destroy IVS channelIMP_IVS_RegisterChn(int grpNum, int chnNum)- Register channel to groupIMP_IVS_UnRegisterChn(int chnNum)- Unregister channelIMP_IVS_StartRecvPic(int chnNum)- Start receiving picturesIMP_IVS_StopRecvPic(int chnNum)- Stop receiving picturesIMP_IVS_PollingResult(int chnNum, int timeoutMs)- Poll for resultIMP_IVS_GetResult(int chnNum, void **result)- Get resultIMP_IVS_ReleaseResult(int chnNum, void *result)- Release resultIMP_IVS_CreateMoveInterface(IMPIVSInterface **interface, ...)- Create move interface (imp_ivs_move.h)IMP_IVS_DestroyMoveInterface(IMPIVSInterface *interface)- Destroy move interface
SU_Base_GetVersion(SUVersion *version)- Get sysutils version
Based on usage, we need to define these structures:
IMPCell- Device/Group/Output cell for bindingIMPVersion- Version informationIMPSensorInfo- Sensor configurationIMPFSChnAttr- Frame source channel attributesIMPFSChnFifoAttr- Frame source FIFO attributesIMPEncoderChnAttr/IMPEncoderCHNAttr- Encoder channel attributesIMPEncoderStream- Encoded stream dataIMPEncoderChnStat/IMPEncoderCHNStat- Encoder channel statisticsIMPEncoderJpegeQl- JPEG quality settingsIMPAudioIOAttr- Audio I/O attributesIMPAudioIChnParam- Audio input channel parametersIMPAudioFrame- Audio frame dataIMPAudioStream- Audio stream dataIMPAudioEncChnAttr- Audio encoder channel attributesIMPAudioDecChnAttr- Audio decoder channel attributesIMPAudioEncEncoder- Audio encoder callbacksIMPAudioDecDecoder- Audio decoder callbacksIMPAudioAgcConfig- AGC configurationIMPOSDRgnAttr- OSD region attributesIMPOSDGrpRgnAttr- OSD group region attributesIMPOSDRgnAttrData- OSD region dataIMPIVSInterface- IVS interfaceIMPISPWB- White balance settingsIMPISPAntiflickerAttr- Anti-flicker attributesSUVersion- Sysutils version
IMPBlock- BLOCK / NOBLOCKIMPISPRunningMode- IMPISP_RUNNING_MODE_DAY / IMPISP_RUNNING_MODE_NIGHTIMPISPTuningOpsMode- IMPISP_TUNING_OPS_MODE_ENABLE / IMPISP_TUNING_OPS_MODE_DISABLEIMPAudioPalyloadType- PT_PCM, PT_G711A, PT_G711U, PT_G726, etc.IMP_ENC_PROFILE_*- H264/H265/JPEG profilesIMP_ENC_RC_MODE_*- FIXQP, CBR, VBR, CAPPED_VBR, CAPPED_QUALITYPIX_FMT_*- Pixel formats (NV12, etc.)FS_PHY_CHANNEL- Frame source channel typeDEV_ID_FS,DEV_ID_ENC,DEV_ID_OSD- Device IDsTX_SENSOR_CONTROL_INTERFACE_I2C- Sensor control interfaceIMPVI_MAIN- Video input (T40/T41)
The code handles multiple platforms:
- T21 - Older platform
- T23 - Has audio hardware quirks
- T31 - Most common, supports rotation
- C100 - Similar to T31
- T40/T41 - Newer platforms with different sensor API (IMPVI parameter)
Platform differences affect:
- Sensor add/enable/disable API signatures
- Availability of certain features (rotation, buffer sharing, AGC)
- Structure naming (IMPEncoderCHNAttr vs IMPEncoderChnAttr)