用户回灌YUV图片场景,vi_dev与vi_pipe创建问题求助
收藏回复举报
用户回灌YUV图片场景,vi_dev与vi_pipe创建问题求助
t('forum.solved') 已解决
发表于2024-02-20 17:03:27
0 查看

由于当前项目需求,需要使用昇腾310b ATLAS 200I A2核心板,实现YUV420数据通过VI_PIPE,将数据通过VPSS分为两个通道。在创建vi_pipe时出现“0xA0108003HI_ERR_VI_ILLEGAL_PARAM视频输入通道号无效”错误。

cke_37014.png

cke_43829.png

根据Atlas 200I DK A2开发者套件,23.0.RC2版本,媒体数据处理V2,视频数据获取功能中描述,用户回灌图片场景,图片的数据来源不再是外部的摄像头设备,但因为当前版本还不支持虚拟pipe,只能通过物理pipe进行灌图,所以即使数据不从sensor输入,仍旧需要设置对应dev并调用hi_mpi_vi_set_dev_bind_pipe接口做dev和pipe的绑定。所以,理解需要配置VI_DEV和VI_PIPE,相关接口包括2个,参数配置代码如下:

    hi_vi_dev_attr dev_attr;

    memset(&dev_attr, 0x00, sizeof(dev_attr));

    dev_attr.intf_mode = HI_VI_MODE_MIPI;

    dev_attr.scan_mode = HI_VI_SCAN_PROGRESSIVE;

    dev_attr.data_seq = HI_VI_DATA_SEQ_YUYV;

    dev_attr.data_type = HI_VI_DATA_TYPE_RAW;

    dev_attr.in_size.width = pvi->vi_width;

    dev_attr.in_size.height = pvi->vi_height;

    dev_attr.wdr_attr.wdr_mode = HI_WDR_MODE_NONE;

    dev_attr.wdr_attr.cache_line = pvi->vi_height;

    dev_attr.data_rate = HI_DATA_RATE_X1;

    ret = hi_mpi_vi_set_dev_attr(vi_dev, &dev_attr);

    if (ret != HI_SUCCESS) {

        DBG(DBG_ERR, "hi_mpi_vi_set_dev_attr failed with 0x%x!\n", ret);

        return -2;

    }

    ret = hi_mpi_vi_enable_dev(vi_dev);

    if (ret != HI_SUCCESS) {

        DBG(DBG_ERR, "hi_mpi_vi_enable_dev failed with 0x%x!\n", ret);

        return -3;

    }

    hi_vi_dev_bind_pipe stDevBindPipe = {0};

    stDevBindPipe.num = 1;

    stDevBindPipe.pipe_id[0] = vi_pipe;

    ret = hi_mpi_vi_set_dev_bind_pipe(vi_dev, &stDevBindPipe);

    if (ret != HI_SUCCESS) {

        DBG(DBG_ERR, "hi_mpi_vi_set_dev_bind_pipe failed with %#x!\n", ret);

        return -4;

    }

   

    hi_vi_pipe_attr stPipeAttr;

    memset(&stPipeAttr, 0x00, sizeof(stPipeAttr));

    stPipeAttr.pipe_bypass_mode = HI_VI_PIPE_BYPASS_NONE;

    stPipeAttr.isp_bypass = HI_TRUE;

    stPipeAttr.size.width = pvi->vi_width;

    stPipeAttr.size.height = pvi->vi_height;

    stPipeAttr.pixel_format = HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420;

    stPipeAttr.compress_mode = HI_COMPRESS_MODE_NONE;

    stPipeAttr.bit_width = HI_DATA_BIT_WIDTH_8;

    stPipeAttr.frame_rate_ctrl.src_frame_rate = -1;

    stPipeAttr.frame_rate_ctrl.dst_frame_rate = -1;

    stPipeAttr.depth = 3;

    ret = hi_mpi_vi_create_pipe(vi_pipe, &stPipeAttr);

    if (ret != HI_SUCCESS) {

        DBG(DBG_ERR, "hi_mpi_vi_create_pipe failed with %#x!\n", ret);

        return -5;

    }

hi_mpi_vi_set_dev_attr接口,以上代码参数配置可配置成功,其他配置参数同样出现0xA0108003错误。

hi_mpi_vi_create_pipe接口按以上代码配置失败。

代码中vi_dev为0,vi_pipe为0,vi_width为1920,vi_height为1080。

cke_50882.png

请帮助分析一下,为了实现VI_PIPE分出2路视频通道,应该如何配置VI_DEV和VI_PIPE?另外,关于多媒体接口调用,是否有更详细的日志文件输出【/dev/logmpp没有信息输出,或使用方法不对】,可以查看具体的错误原因。

我要发帖子