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


根据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。

请帮助分析一下,为了实现VI_PIPE分出2路视频通道,应该如何配置VI_DEV和VI_PIPE?另外,关于多媒体接口调用,是否有更详细的日志文件输出【/dev/logmpp没有信息输出,或使用方法不对】,可以查看具体的错误原因。
由于当前项目需求,需要使用昇腾310b ATLAS 200I A2核心板,实现YUV420数据通过VI_PIPE,将数据通过VPSS分为两个通道。在创建vi_pipe时出现“0xA0108003,HI_ERR_VI_ILLEGAL_PARAM,视频输入通道号无效”错误。
根据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。
请帮助分析一下,为了实现VI_PIPE分出2路视频通道,应该如何配置VI_DEV和VI_PIPE?另外,关于多媒体接口调用,是否有更详细的日志文件输出【/dev/logmpp没有信息输出,或使用方法不对】,可以查看具体的错误原因。