Cambricon CE3226 cnsample_vio 部分代码解析 (一)

一、 执行源代码

  • 查看 /mps/ko 下目录:
图 (1)
  • 加载驱动 drv:
图 (2)
  • 在 ini 里修改 sensor 配置:
图 (3)

图 (4)
  • 运行
图 (5)


图 (6)
 

二、 cnsampleVioUsage

1.原代码


图 (7)

2.注释

 

三、 main

  1. 原代码

图 (8)

2.注释

int main(int argc, char* argv[])   /* 声明一个字符数组,大小是 int argc */

{

    cnS32_t s32Ret = CN_FAILURE;

    cnBool_t  abChnEnable[VPPS_MAX_PHY_CHN_NUM] = {CN_TRUE, CN_FALSE, CN_FALSE, CN_FALSE};   /* VPPS 最大物理通道赋值 */

 

    cnsampleCommSysPrintVersion();  /* 打印系统版本 */

 

    signal(SIGINT, cnsampleVioHandleSig);  /* 设置相应信号处理函数,SIGINT 由中断信号产生,发送给所有进程 */

    signal(SIGTERM, cnsampleVioHandleSig);   /* SIGTERM 请求终止进程 */

 

    memset(&g_stViConfig, 0, sizeof(g_stViConfig));   /* 清空 g_stViConfig */

    s32Ret = parseParam(argc, argv);  /* 传入参数分析 */

 

    if (s32Ret)

    {

        return CN_FAILURE;

    }

   

    s32Ret =cnsampleCommViGetSensorInfo(&g_stViConfig);  /* 获取 sensor 信息 */

 

    if (s32Ret)

    {

        return CN_FAILURE;

    }

   

    cnsampleCommViGetSizeBySensor(g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &g_enViPicSize);   /* 在sensor中获取尺寸参数 */

 

 

    s32Ret = cnsampleViVppsVo();  /* 视频输入处理输出 */

 

    if (CN_SUCCESS == s32Ret)    /* 判断视频输入处理输出是否成功 */

 

    {

        CNSAMPLE_TRACE("cnsampleViVppsVo success!\n");

    }

    else

    {

        CNSAMPLE_TRACE("cnsampleViVppsVo fail!\n");   

        return CN_FAILURE;

    }

 

    while (g_bThreadStart)

    {

        sleep(1);   /* 线程休眠1秒 */

    }

 

    cnsampleCommViUnBindVpps(0, 0, 0);   /* 视频输入不处理 */

    cnsampleCommVppsUnBindVo(0, 0, 0, 0);   /* 视频处理不输出 */

    cnsampleCommVoStopVo(&g_stVoConfig);  /* 视频停止输出 */

    cnsampleCommVppsStop(0, abChnEnable);  /* 视频处理子系统停止 */

    cnsampleCommViStopVi(&g_stViConfig);    /* 视频输入停止*/

 

    cnsampleCommSysExit();

    return CN_SUCCESS;



}



参考资料:

寒武纪图像质量调试工具用户手册-CN-v0.9.0.PDF

寒武纪DIS 调试指南-CN-v0.9.0.PDF

寒武纪 GDC 调试指南-CN-v0.9.0.PDF

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

小夹子

小夹子

2022年7月1日
优秀