【君正-T41】外设采集h264流程

Step.1 System init 系统初始化

ret = IMP_ISP_Open()

//打开ISP模块

IMP_ISP_SetCameraInputMode(&mode)

//如果有多个sensor(最大支持三摄),设置多摄的模式(单摄请忽略)

IMP_ISP_AddSensor(IMPVI_MAIN, &sensor_info[*])

//添加sensor,在此操作之前sensor驱动已经添加到内核 (IMPVI_MAIN为主摄, IMPVI_SEC为次摄, IMPVI_THR为第三摄)

IMP_ISP_EnableSensor(IMPVI_MAIN, &sensor_info[*])

// 使能sensor, 现在sensor开始输出图像 (IMPVI_MAIN为主摄, IMPVI_SEC为次摄, IMPVI_THR为第三摄)

IMP_System_Init()

// 系统初始化

IMP_ISP_EnableTuning()

// 使能ISP tuning, 然后才能调用ISP调试接口

Step.2 FrameSource init Framesource初始化

IMP_FrameSource_CreateChn(chn[i].index, &chn[i].fs_chn_attr)

// 创建通道

MP_FrameSource_SetChnAttr(chn[i].index, &chn[i].fs_chn_attr)

// 设置通道的相关属性, 包括:图片宽度 图片高度 图片格式 通道的输出帧率 缓存buf数 裁剪和缩放属性

Step.3 Encoder init 编码初始化

IMP_Encoder_CreateGroup(chn[i].index)

//创建编码Group

IMP_Encoder_SetDefaultParam(IMPEncoderChnAttr *chnAttr, IMPEncoderProfile profile, IMPEncoderRcMode rcMode, uint16_t uWidth, uint16_t uHeight, uint32_t frmRateNum, uint32_t frmRateDen, uint32_t uGopLength, int uMaxSameSenceCnt, int iInitialQP, uint32_t uTargetBitRate);

设置编码chnnel默认的属性

IMP_Encoder_CreateChn(chnNum, &channel_attr)

//创建编码chnnel

IMP_Encoder_RegisterChn(chn[i].index, chnNum)

//注册编码Channel到Group

Step.4 Bind 绑定framesource和编码chnnel

IMP_System_Bind(&chn[i].framesource_chn, &chn[i].imp_encoder)

//绑定framesource和编码chnnel, 绑定成功即framesource产生的数据可以自动传送到编码chnnel

Step.5 Stream On 使能Framesource chnnel, 开始输出图像

IMP_FrameSource_EnableChn(chn[i].index)

//使能chnnel, chnnel开始输出图像

Stp.6 Get stream 获取码流

IMP_Encoder_StartRecvPic(chnNum)

//编码chnnel开始接受图像

IMP_Encoder_PollingStream(chnNum, 1000)

//对编码chnnel中码流进行polling

IMP_Encoder_GetStream(chnNum, &stream, 1)

//获取编码码流

save_stream(stream_fd, &stream)

//将结果保存到打开的文件描述符

IMP_Encoder_ReleaseStream(chnNum, &stream)

//释放编码码流, 与IMP_Encoder_GetStream成对使用

IMP_Encoder_StopRecvPic(chnNum)

//编码chnnel停止接受图像

Step.7 Stream Off 不使能Framesource chnnel, 停止输出图像

IMP_FrameSource_DisableChn(chn[i].index)

//不使能channel, channel停止输出图像

Step.8 UnBind 解绑Framesource和编码chnnel

IMP_System_UnBind(&chn[i].framesource_chn, &chn[i].imp_encoder)

//解绑framesource和编码chnnel

Step.9 Encoder exit 编码反初始化

IMP_Encoder_Query(chnNum, &chn_stat)

//查询编码chnnel状态

IMP_Encoder_UnRegisterChn(chnNum)

//如果已经注册了, 反注册编码chnnel到Group

IMP_Encoder_DestroyChn(chnNum)

//销毁编码chnnel

Step.11 System exit 系统 反 初始化

IMP_ISP_DisableTuning()

//不使能ISP tuning

IMP_System_Exit()

//系统反初始化

IMP_ISP_DisableSensor(IMPVI_MAIN, &sensor_info[*])

//不使能sensor, sensor停止输出图像 (IMPVI_MAIN为主摄, IMPVI_SEC为次摄, IMPVI_THR为第三摄)

IMP_ISP_DelSensor(IMPVI_MAIN, &sensor_info[*])

//删除sensor (IMPVI_MAIN为主摄, IMPVI_SEC为次摄, IMPVI_THR为第三摄)

IMP_ISP_Close()

//关闭ISP模块

相关推荐
AskHarries18 分钟前
使用 acme.sh 自动更新 SSL 证书的指南
后端
Chandler2442 分钟前
Go:反射
开发语言·后端·golang
pwzs1 小时前
深入浅出 MVCC:MySQL 并发背后的多版本世界
数据库·后端·mysql
盒子69101 小时前
go for 闭环问题【踩坑记录】
开发语言·后端·golang
刘大猫262 小时前
Arthas monitor(方法执行监控)
人工智能·后端·监控
追逐时光者2 小时前
MongoDB从入门到实战之MongoDB简介
后端·mongodb
Huazie3 小时前
在WSL2 Ubuntu中部署FastDFS服务的完整指南
服务器·后端·ubuntu
行者无疆xcc4 小时前
【Django】设置让局域网内的人访问
后端·python·django
嘵奇4 小时前
基于Spring Boot实现文件秒传的完整方案
java·spring boot·后端
Value_Think_Power4 小时前
azure 一个 pod 内有多个 container ,这些container 可以 共享一块磁盘吗
后端