识别二维码是在vpss通道使用海思提供的API接口HI_MPI_VPSS_SetDepth、HI_MPI_VPSS_GetChnFrame来获得图像,并进行二维码识别(这里的二维码是wifi二维码,用于板子和wifi连接的)总体流程如下:
在海思进行mpp初始化等一系列初始化之后,在vpss通道获得yuv数据,并调用zbar接口对获得的图形数据进行解析,如果捕捉到含有wifi图片并能成功的进行解析,并将解析到的wifi信息的ssid和psk更新到wifi的配置文件当中(我这里是板端/etc/wpa.conf),然后调用wifi启动命令,就能成功的实现扫描链接wifi的功能。

1.在实现这个功能的过程中,我开始是在vpss的后面获得图像并直接进行二维码解析,连接wifi,认为板子会继续venc编码,并能得到码流,rtmp推流,但实际情况是并不能推流,会发生报错
,但是吧扫描连接wifi函数屏蔽掉就可以推流
解决办法:在板子上电第一步先进行初始化,包括mpp初始化,相机初始化,isp初始化,vpss初始化,vi与vpss的绑定,然后vpss获得图像,并进行二维码的识别解析,之后连接wifi


注意:这里对海思进行初始化,是为了启动相机,获取相机数据,来进行二维码识别连接wifi的,一旦连接了wifi,一定要对起进行“释放”,比如解绑,去初始化,关掉相机等等。
代码如下:

void SAMPLE_ZBAR_CLASSIC(void )
//HI_S32 SAMPLE_VENC_NORMALP_CLASSIC(HI_VOID)
{PAYLOAD_TYPE_E enPayLoad[2]= {PT_H264, PT_H264};PIC_SIZE_E enSize[2] = {PIC_HD1080, PIC_VGA};HI_U32 u32Profile = 0;VB_CONF_S stVbConf;SAMPLE_VI_CONFIG_S stViConfig = {0};VPSS_GRP VpssGrp;VPSS_CHN VpssChn;VPSS_GRP_ATTR_S stVpssGrpAttr = {0};VPSS_CHN_ATTR_S stVpssChnAttr = {0};VPSS_CHN_MODE_S stVpssChnMode;VENC_CHN VencChn;SAMPLE_RC_E enRcMode= SAMPLE_RC_CBR;#ifndef hi3516ev100HI_S32 s32ChnNum=1;
#elseHI_S32 s32ChnNum=1;
#endifHI_S32 s32Ret = HI_SUCCESS;HI_U32 u32BlkSize;SIZE_S stSize;char c;/******************************************step  1: init sys variable******************************************/memset(&stVbConf,0,sizeof(VB_CONF_S));SAMPLE_COMM_VI_GetSizeBySensor(&enSize[0]);stVbConf.u32MaxPoolCnt = 128;//printf("s32ChnNum:%d,Sensor Size:%d\n",s32ChnNum,enSize[0]);/*video buffer*/if(s32ChnNum >= 1){u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\enSize[0], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;#ifndef hi3516ev100stVbConf.astCommPool[0].u32BlkCnt = 10;#elsestVbConf.astCommPool[0].u32BlkCnt = 4;#endif}if(s32ChnNum >= 2){u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\enSize[1], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);stVbConf.astCommPool[1].u32BlkSize = u32BlkSize;stVbConf.astCommPool[1].u32BlkCnt =10;}if(s32ChnNum >= 3){u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\enSize[2], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);stVbConf.astCommPool[2].u32BlkSize = u32BlkSize;stVbConf.astCommPool[2].u32BlkCnt = 10;}/******************************************step 2: mpp system init.******************************************/s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("system init failed with %d!\n", s32Ret);goto END_VENC_1080P_CLASSIC_0;}/******************************************step 3: start vi dev & chn to capture******************************************/stViConfig.enViMode   = SENSOR_TYPE;stViConfig.enRotate   = ROTATE_NONE;stViConfig.enNorm     = VIDEO_ENCODING_MODE_AUTO;stViConfig.enViChnSet = VI_CHN_SET_NORMAL;stViConfig.enWDRMode  = WDR_MODE_NONE;printf("VI_StartVi!\n");s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start vi failed!\n");goto END_VENC_1080P_CLASSIC_1;}/******************************************step 4: start vpss and vi bind vpss******************************************/s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[0], &stSize);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");goto END_VENC_1080P_CLASSIC_1;}if(s32ChnNum >= 1){VpssGrp = 0;stVpssGrpAttr.u32MaxW = stSize.u32Width;stVpssGrpAttr.u32MaxH = stSize.u32Height;stVpssGrpAttr.bIeEn = HI_FALSE;stVpssGrpAttr.bNrEn = HI_TRUE;stVpssGrpAttr.bHistEn = HI_FALSE;stVpssGrpAttr.bDciEn = HI_FALSE;stVpssGrpAttr.enDieMode = VPSS_DIE_MODE_NODIE;stVpssGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;stVpssGrpAttr.bSharpenEn = HI_FALSE;s32Ret = SAMPLE_COMM_VPSS_StartGroup(VpssGrp, &stVpssGrpAttr);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Start Vpss failed!\n");goto END_VENC_1080P_CLASSIC_2;}s32Ret = SAMPLE_COMM_VI_BindVpss(stViConfig.enViMode);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Vi bind Vpss failed!\n");goto END_VENC_1080P_CLASSIC_3;}VpssChn = 0;stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;stVpssChnMode.bDouble        = HI_FALSE;stVpssChnMode.enPixelFormat  = SAMPLE_PIXEL_FORMAT;stVpssChnMode.u32Width       = stSize.u32Width;stVpssChnMode.u32Height      = stSize.u32Height;stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));stVpssChnAttr.s32SrcFrameRate = -1;stVpssChnAttr.s32DstFrameRate = -1;s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Enable vpss chn failed!\n");goto END_VENC_1080P_CLASSIC_4;}SAMPLE_COMM_VPSS_GetImg(VpssGrp, VpssChn);}if(s32ChnNum >= 2){s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[1], &stSize);if (HI_SUCCESS != s32Ret){SAMPLE_PRT(  "SAMPLE_COMM_SYS_GetPicSize failed!\n");goto END_VENC_1080P_CLASSIC_4;}VpssChn = 1;stVpssChnMode.enChnMode       = VPSS_CHN_MODE_USER;stVpssChnMode.bDouble         = HI_FALSE;stVpssChnMode.enPixelFormat   = SAMPLE_PIXEL_FORMAT;stVpssChnMode.u32Width        = stSize.u32Width;stVpssChnMode.u32Height       = stSize.u32Height;stVpssChnMode.enCompressMode  = COMPRESS_MODE_NONE;stVpssChnAttr.s32SrcFrameRate = -1;stVpssChnAttr.s32DstFrameRate = -1;s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Enable vpss chn failed!\n");goto END_VENC_1080P_CLASSIC_4;}SAMPLE_COMM_VPSS_GetImg(VpssGrp, VpssChn);}if(s32ChnNum >= 3){s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[2], &stSize);if (HI_SUCCESS != s32Ret){SAMPLE_PRT(    "SAMPLE_COMM_SYS_GetPicSize failed!\n");goto END_VENC_1080P_CLASSIC_4;}VpssChn = 2;stVpssChnMode.enChnMode   = VPSS_CHN_MODE_USER;stVpssChnMode.bDouble     = HI_FALSE;stVpssChnMode.enPixelFormat = SAMPLE_PIXEL_FORMAT;stVpssChnMode.u32Width       = 720;stVpssChnMode.u32Height  = (VIDEO_ENCODING_MODE_PAL==gs_enNorm)?576:480;;stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE;stVpssChnAttr.s32SrcFrameRate = -1;stVpssChnAttr.s32DstFrameRate = -1;s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Enable vpss chn failed!\n");goto END_VENC_1080P_CLASSIC_4;}SAMPLE_COMM_VPSS_GetImg(VpssGrp, VpssChn);}goto END_VENC_1080P_CLASSIC_4;goto END_VENC_1080P_CLASSIC_3;goto END_VENC_1080P_CLASSIC_2;goto END_VENC_1080P_CLASSIC_1;goto END_VENC_1080P_CLASSIC_0;//上面5个goto就是对使用的资源进行释放
//****************************************************************END_VENC_1080P_CLASSIC_5:VpssGrp = 0;switch(s32ChnNum){case 3:VpssChn = 2;VencChn = 2;SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);SAMPLE_COMM_VENC_Stop(VencChn);case 2:VpssChn = 1;VencChn = 1;SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);SAMPLE_COMM_VENC_Stop(VencChn);case 1:VpssChn = 0;VencChn = 0;SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);SAMPLE_COMM_VENC_Stop(VencChn);break;}SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);END_VENC_1080P_CLASSIC_4:  //vpss stopVpssGrp = 0;switch(s32ChnNum){case 3:VpssChn = 2;SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);case 2:VpssChn = 1;SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);case 1:VpssChn = 0;SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);break;}END_VENC_1080P_CLASSIC_3:     //vpss stopSAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);END_VENC_1080P_CLASSIC_2:     //vpss stopSAMPLE_COMM_VPSS_StopGroup(VpssGrp);END_VENC_1080P_CLASSIC_1:   //vi stopSAMPLE_COMM_VI_StopVi(&stViConfig);END_VENC_1080P_CLASSIC_0:   //system exitSAMPLE_COMM_SYS_Exit();
//*****************************************************}

关于hi3516ev100调试zbar二维码和链接wifi问题相关推荐

  1. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  2. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  3. Opencv+Zbar二维码识别(二维码校正)

    二维码和车牌识别基本都会涉及到图像的校正,主要是形变和倾斜角度的校正,一种二维码的畸变如下图: 这个码用微信扫了一下,识别不出来,但是用Zbar还是可以准确识别的~~. 这里介绍一种二维码校正方法,通 ...

  4. 钉钉小程序 E应用生成带参数二维码或链接

    E应用生成预览调试及生产带参数二维码或链接 点击预览生成二维码,点击下方的查看构建日志,会弹出一个log框,等生产完毕后,找到里面的query和data字段,把他们拼起来,组成类似如下的URL: di ...

  5. ttkefu微信二维码对话链接如何生成?

    ttkefu可以生成微信二维码对话链接,让客户扫码就可以对话吗? 答:这个是可以的! 具体设置,请登录电脑端软件,点击右上方的 [设置]-[获取代码]-找到相应的风格后,右侧最下方有个B代码.B代码是 ...

  6. 二维码图片怎么转链接?怎么分解二维码成链接网址?

    相信很多小伙伴都知道将链接生成二维码怎么操作,那么当我们需要将二维码转链接的要求时,大家知道该如何操作吗?想要教二维码图片分解成链接,那么就需要使用二维码生成器的解码功能来处理,下面教大家在线分解二维 ...

  7. 如何将二维码分解成链接?二维码转链接如何处理?

    相信小伙伴们每天都会碰到各种类型的二维码,比如扫码付款,看视频.音频.图片.文本.文件等等多种内容,那么如果想要将二维码转链接该如何来处理呢?其实方法很简单,只需要用电脑浏览器来操作二维码解码功能就可 ...

  8. Linux zbar二维码识别库编译

    ZBar是一个开源软件套件,用于从各种来源读取条形码,例如视频流,图像文件和原始强度传感器.它支持许多流行的符号体系 (条形码的类型),包括EAN-13 / UPC-A,UPC-E,EAN-8,Cod ...

  9. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...

最新文章

  1. 什么是Closed-form solution?
  2. Android平滑图片加载和缓存库Glide使用详解
  3. Codeforces Round #229
  4. 系统工具源码设计页面
  5. java转文件编码bom_编码转换:UTF-8 BOM to GBK
  6. aoe网最早开始时间和最迟开始时间_关键路径(AOE)网 通俗易懂
  7. keyshot分辨率多少合适_分辨率单位及换算详解
  8. Letters[Codeforces-43B]
  9. Java完全参考手册_Java完全参考手册(第8版) ((美)Herbert Schildt) pdf扫描版
  10. android交友php,android交友约会社交APP完整源码Dating App 3.7(服务端+客户端)
  11. Python实现多重弹窗脚本 整蛊朋友
  12. 2020年Java市场需求分析
  13. 通过硅靶摄像管采集图像的电子显微镜
  14. CF1004F Sonya and Bitwise OR(线段树平衡复杂度+or 前缀性质)
  15. 菜鸟窝BAT企业安卓学习笔记
  16. AD20原理图设计与PCB封装画板--学习笔记
  17. 【厚积薄发系列】读书笔记3—《麦肯锡-问题分析与解决技巧》小记
  18. 应聘者面试的收获-说说工作的正确姿势(20170108)
  19. Yahoo军规-前端性能优化
  20. 面试题-批量向MySQL导入1000万条数据有什么方法?

热门文章

  1. 操作系统概念_第六章_进程同步
  2. python (ploit)
  3. 使用阿里云PCDN降低内容分发成本
  4. 10M,50M,100M宽带下载速率解惑之网络基础知识
  5. 计算机类sci查重,SCI科研写作:国自然标书查重方法
  6. 朴树 vs. Lunar少女组,ET选的人你究竟爱谁?
  7. WINDOWS 2003设置攻略
  8. 自媒体时代如何做好软文推广?
  9. 众筹网站项目第五天之用户的增、删、改
  10. 计算机视觉知识点之RCNN/Fast RCNN/Faster RCNN