以下处理流程为自己根据Hi3516av200的VENC 模块的整理,梳理了整个处理流程。

mainSAMPLE_VENC_NORMALP_CLASSIC//    /******************************************
step  1: init sys variable
******************************************/
SAMPLE_COMM_VI_GetSizeBySensor
SAMPLE_COMM_SYS_CalcPicVbBlkSize
SAMPLE_COMM_SYS_GetPicSize/******************************************
step 2: mpp system init.
******************************************/SAMPLE_COMM_SYS_InitHI_MPI_SYS_Exit();           //去初始化MPP 系统
HI_MPI_VB_Exit();           //去初始化MPP 视频缓存池
HI_MPI_VB_SetConf
//设置MPP 视频缓存池属性
HI_MPI_VB_Init              //初始化MPP 视频缓存池
HI_MPI_SYS_SetConf          //配置系统控制参数
HI_MPI_SYS_Init             //初始化MPP 系统///******************************************
step 3: start vi dev & chn to capture
******************************************/
SAMPLE_COMM_VI_StartVi
IsSensorInput   //判断是传统的还是现在的sensor
SAMPLE_COMM_VI_StartIspAndVi/******************************************
step 1: mipi configure
******************************************/
SAMPLE_COMM_VI_StartMIPI
SAMPLE_COMM_VI_SetMipiAttr  //操作sensor,对sensor做必要的初始化fd = open("/dev/hi_mipi", O_RDWR);/* 1.reset mipi */
ioctl(fd, HI_MIPI_RESET_MIPI, &stcomboDevAttr.devno);/* 2.reset sensor */
ioctl(fd, HI_MIPI_RESET_SENSOR, &stcomboDevAttr.devno);/* 3.set mipi attr */
if (ioctl(fd, HI_MIPI_SET_DEV_ATTR, &stcomboDevAttr))/* 4.unreset mipi */
ioctl(fd, HI_MIPI_UNRESET_MIPI, &stcomboDevAttr.devno);/* 5.unreset sensor */
ioctl(fd, HI_MIPI_UNRESET_SENSOR, &stcomboDevAttr.devno);/******************************************
step 2: configure sensor and ISP (include WDR mode).
note: you can jump over this step, if you do not use Hi3516A interal isp.
******************************************/
SAMPLE_COMM_ISP_Sensor_Regiter_callback  //注册sensor回调
SAMPLE_COMM_ISP_Init                    // 对ISP初始化HI_MPI_ISP_MemInit               //对ISP分配必要的内存HI_MPI_ISP_SetWDRMode           //设置宽动态模式GetIspPubAttrBySnsHI_MPI_ISP_SetPubAttr           //写入ISP单元内部,将来ISP会根据设置的参数进行图像处理HI_MPI_ISP_Init                 //ISP 系统初始化/******************************************
step 3: run isp thread
note: you can jump over this step, if you do not use Hi3516A interal isp.
******************************************/
SAMPLE_COMM_ISP_RunSAMPLE_COMM_ISP_RunSAMPLE_COMM_ISP_RunHI_MPI_ISP_Run/******************************************************
step 4 : config & start vicap dev
******************************************************/
SAMPLE_COMM_VI_StartDevSAMPLE_COMM_VI_GetDevAttrBySnsHI_MPI_ISP_GetWDRModeHI_MPI_VI_SetDevAttrHI_MPI_VI_SetWDRAttrHI_MPI_VI_EnableDev/******************************************************
* Step 5: config & start vicap chn (max 1)
******************************************************/
GetViCaprectBySns
SAMPLE_COMM_VI_StartChnHI_MPI_VI_EnableChn//******************************************
step 4: start vpss and vi bind vpss
******************************************/SAMPLE_COMM_SYS_GetPicSizeSAMPLE_COMM_VPSS_StartGroupHI_MPI_VPSS_CreateGrpHI_MPI_VPSS_StartGrpSAMPLE_COMM_VI_BindVpssSAMPLE_COMM_VI_Mode2ParamHI_MPI_SYS_BindSAMPLE_COMM_VPSS_EnableChnHI_MPI_VPSS_SetChnAttrHI_MPI_VPSS_SetChnModeHI_MPI_VPSS_EnableChn            /******************************************
step 5: start stream venc
******************************************/SAMPLE_COMM_VENC_GetGopAttrSAMPLE_COMM_VENC_StartSAMPLE_COMM_SYS_GetPicSize/******************************************step 1:  Create Venc Channel******************************************/HI_MPI_VENC_CreateChn/******************************************step 2:  Start Recv Venc Pictures******************************************/HI_MPI_VENC_StartRecvPic //开启编码通道接收输入图像SAMPLE_COMM_VENC_BindVpssHI_MPI_SYS_Bind  //数据源到数据接收者绑定接口//  /******************************************
step 6: stream venc process -- get stream, then save it to file.
******************************************/SAMPLE_COMM_VENC_StartGetStreamSAMPLE_COMM_VENC_GetVencStreamProc/******************************************
step 1:  check & prepare save-file & venc-fd
******************************************/
HI_MPI_VENC_GetChnAttr
SAMPLE_COMM_VENC_GetFilePostfix
fopen(aszFileName[i], "wb");
HI_MPI_VENC_GetFd
HI_MPI_VENC_GetStreamBufInfo/******************************************
step 2:  Start to get streams of each channel.
******************************************/select(maxfd + 1, &read_fds, NULL, NULL, &TimeoutVal);/*******************************************************step 2.1 : query how many packs in one-frame stream.*******************************************************/HI_MPI_VENC_Query/*******************************************************step 2.2 :suggest to check both u32CurPacks and u32LeftStreamFrames at the same time,for example:*******************************************************//*******************************************************step 2.3 : malloc corresponding number of pack nodes.*******************************************************//*******************************************************step 2.4 : call mpi to get one-frame stream*******************************************************/HI_MPI_VENC_GetStream/*******************************************************step 2.5 : save frame to file*******************************************************/SAMPLE_COMM_VENC_SaveFile  fwrite ((void *)u32SrcPhyAddr, pstStream->pstPack[i].u32Len - pstStream->pstPack[i].u32Offset, 1, pFd);fflush(pFd);/*******************************************************step 2.6 : release stream                    *******************************************************/HI_MPI_VENC_ReleaseStream/*******************************************************step 2.7 : free pack nodes*******************************************************/free(stStream.pstPack);/*******************************************************
* step 3 : close save-file
*******************************************************/
fclose(pFile[i]);  /******************************************
step 7: exit process
******************************************/SAMPLE_COMM_VENC_StopGetStreampthread_join

Hi3516的venc编码模块处理流程相关推荐

  1. Metasploit编码模块技巧

    Metasploit编码模块技巧 在Metasploit中,提供了大量的渗透测试模块.当用户使用某个模块实施渗透测试时,想要更新该模块内容,也可以使用edit命令技巧编辑该模块.如果想要编辑某个模块, ...

  2. I帧、B帧和P帧的特点和编码的基本流程

    I帧.B帧和P帧的特点: I帧:帧内编码帧 I帧特点: 1.它是一个全帧压缩编码帧.它将全帧图像信息进行JPEG压缩编码及传输; 2.解码时仅用I帧的数据就可重构完整图像; 3.I帧描述了图像背景和运 ...

  3. FPGA之VGA转HDMI之编码模块的编写

    VGA 图像信息到 HDMI 图像信息的转化需要对输入的 VGA 图像信息进行编码.并行串行转换.单端信号转差分信号.单沿采样转双沿采样. 其中,编码模块就是为了完成 VGA 图像数据 8b 转 10 ...

  4. 基于 移远 BC26 移柯BL620的NB模块调试流程

    NB模块连接网络顺序 移柯NBL260模块 NB卡: 联通   默认波特率 115200 //UDP 链接方式: AT //判断模组是否上电开机成功 AT+CIMI //读取 IMSI, 判断 SIM ...

  5. MP3文件格式与编码原理解码流程详解

    1 文件格式 MP3文件格式四部分,按顺序排列如下: ID3V2  包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量 Frame  音频帧序列 APEV2  包含了作者,作曲,专辑等 ...

  6. Cesium 材质模块开发流程——方式2

    为了规范开发思路和流程,使代码易于扩展和维护,现参考Cesium官方的材质系统设计材质模块开发流程.与方式1相比 这种较为灵活,但没有封装到sdk傻瓜.Cesium 材质模块开发流程--方式1_苹果园 ...

  7. webrtc 视频的采集,编码,发送流程详细分析(希望对底层深入了解的朋友有所帮助)

    ---------------------------------------------------------------------------------------------------- ...

  8. scrapy 模块功能流程--转

    scrapy工作流程和每个模块的具体作用 其流程可以描述如下: 爬虫中起始的url构造成request对象-->爬虫中间件-->引擎-->调度器 调度器把request-->引 ...

  9. SaltStack源码分析之:master端执行salt模块大致流程

    2019独角兽企业重金招聘Python工程师标准>>> ##JOB执行流程 先看下官网对于master端的工作流程的介绍: The Salt master works by alwa ...

最新文章

  1. tensorflow 线性回归 iris
  2. PyTorch基础(13)-- torch.nn.Unfold()方法
  3. flex弹性布局操练2
  4. LDAP命令介绍---import-ldif
  5. 关于豆瓣电台收费的思考
  6. IT项目管理工具探讨之_项目群管理
  7. Android雁翎刀之ImageView之定制头像
  8. oracle 定时器调用存储过程
  9. 【环境部署】基于FreeSSL生成免费SSL证书
  10. 小猿圈解读Go语言的前景
  11. 怎么查看php配置信息,Wampserver查看php配置信息
  12. 《一只特立独行的猪》摘抄笔记
  13. windows10无法使用内置管理员账户打开应用
  14. 电商企业营销案例方案:2019年618大促用红包推广引流
  15. 如何选择合适的RFID标签
  16. Redis 乱码解决与思考
  17. 微信公众号排版的使用
  18. wap精武堂源码php_Showgirl武装秀【精武堂】大奖等你拿
  19. Redis实现的布隆过滤器如何快速有效删除数据
  20. 全球经济寒冬将至?且看顶级资本大鳄的大数据分析

热门文章

  1. nginx ssl 漏洞 修复
  2. 百度文库会员什么时候便宜
  3. 二叉树前序遍历Java
  4. Unity_移动平台触控拖动摄像机
  5. kettle扩大运行内存
  6. javac错误:javac不是内部或外部命令 也不是可运行的程序 解决方法
  7. 学生学分信息管理系统-C语言
  8. 关于Google地图路线偏移的问题
  9. 基础语法(整型:uint、uint8、uint16、uint32、uint64、uintptr)
  10. OOM和StackOverFlow的区别