DCMI_MAIN_CMD_DVPP命令说明
函数原型
int dcmi_get_device_info(int card_id, int device_id, enum dcmi_main_cmd main_cmd, unsigned int sub_cmd, void *buf, unsigned int *size)
功能说明
获取dvpp相关状态,配置信息。
参数说明
参数名称 |
输入/输出 |
类型 |
描述 |
---|---|---|---|
card_id |
输入 |
int |
指定NPU管理单元的ID,当前实际支持的ID通过dcmi_get_card_list接口获取。 |
device_id |
输入 |
int |
指定设备编号,通过dcmi_get_device_id_in_card接口获取。取值范围如下: NPU芯片:[0, device_id_max-1]。 |
main_cmd |
输入 |
enum dcmi_main_cmd |
DCMI_MAIN_CMD_DVPP |
sub_cmd |
输入 |
unsigned int |
sub_cmd 获取对应模块下子属性信息。 /* DCMI sub command for DVPP module */ #define DCMI_SUB_CMD_DVPP_STATUS 0 // dvpp状态,buf为0表示状态正常,非0表示状态异常 #define DCMI_SUB_CMD_DVPP_VDEC_RATE 1 // vdec利用率,正常值范围0-100 #define DCMI_SUB_CMD_DVPP_VPC_RATE 2 // vpc利用率,正常值范围0-100 #define DCMI_SUB_CMD_DVPP_VENC_RATE 3 // venc利用率,正常值范围0-100 #define DCMI_SUB_CMD_DVPP_JPEGE_RATE 4 // jpege利用率,正常值范围0-100 #define DCMI_SUB_CMD_DVPP_JPEGD_RATE 5 // jpegd利用率,正常值范围0-100 目前不支持DCMI_SUB_CMD_DVPP_VENC_RATE命令的查询。 |
buf |
输出 |
void * |
用于接收设备信息的返回值。 |
size |
输入/输出 |
unsigned int * |
buf数组的输入/输出长度。 |
返回值
类型 |
描述 |
---|---|
int |
处理结果:
|
异常处理
无。
约束说明
获取dvpp设备时sub_cmd,buf和size之间必须要满足以下关系,如果不满足会导致接口调用失败。
sub_cmd |
buf对应的数据类型 |
size |
---|---|---|
DCMI_SUB_CMD_DVPP_STATUS |
unsigned int |
长度为:sizeof(unsigned int) |
DCMI_SUB_CMD_DVPP_VDEC_RATE DCMI_SUB_CMD_DVPP_VPC_RATE DCMI_SUB_CMD_DVPP_VENC_RATE DCMI_SUB_CMD_DVPP_JPEGE_RATE DCMI_SUB_CMD_DVPP_JPEGD_RATE |
unsigned int |
长度为:sizeof(unsigned int) |
Linux物理机 |
Linux物理机容器 |
|
root用户 |
运行用户组(非root用户) |
root用户 |
Y |
Y |
Y |
调用示例
int ret; int ratio = 0; int ratio_size = sizeof(int); int dev_cnt = 0; int dev_id[64] = {0}; ret = dcmi_get_device_count(&dev_cnt); if (ret != 0) { printf("[%s] get dev_cnt test_fail value = %d \n", __func__, ret); return -1; } if (dev_cnt <= 0) { printf("[%s] get dev_cnt test_fail value = -1 , dev_cnt:%d \n", __func__, dev_cnt); return -1; } printf("[%s] dev_cnt:%d \n", __func__, dev_cnt); ret = dcmi_list_device(dev_id, dev_cnt); if (ret != 0) { printf("[%s] list device test_fail value = %d \n", __func__, ret); return -1; } for (int i = 0; i < dev_cnt; i++) { printf("---------devid:%d dvpp ratio:---------\n", dev_id[i]); ret = dcmi_get_device_info(dev_id[i], DCMI_MAIN_CMD_DVPP, DCMI_SUB_CMD_DVPP_VDEC_RATE, (void*)&ratio, &ratio_size); if (ret != 0) { printf("[%s %d] dev_id:%d sub_cmd:0x%x, ratio:(0x%x,%d) test_fail value = %d\n", __func__, __LINE__, dev_id[i], DCMI_SUB_CMD_DVPP_VDEC_RATE, ratio, ratio, ret); return -1; } printf("----vdec:%d \n", ratio); ratio = 0; ret = dcmi_get_device_info(dev_id[i], DCMI_MAIN_CMD_DVPP, DCMI_SUB_CMD_DVPP_VENC_RATE, (void*)&ratio, &ratio_size); if (ret != 0) { printf("[%s %d] dev_id:%d sub_cmd:0x%x, ratio:(0x%x,%d) test_fail value = %d\n", __func__, __LINE__, dev_id[i], DCMI_SUB_CMD_DVPP_VENC_RATE, ratio, ratio, ret); return -1; } ratio = 0; ret = dcmi_get_device_info(dev_id[i], DCMI_MAIN_CMD_DVPP, DCMI_SUB_CMD_DVPP_VPC_RATE, (void*)&ratio, &ratio_size); if (ret != 0) { printf("[%s %d] dev_id:%d sub_cmd:0x%x, ratio:(0x%x,%d) test_fail value = %d\n", __func__, __LINE__, dev_id[i], DCMI_SUB_CMD_DVPP_VPC_RATE, ratio, ratio, ret); return -1; } ratio = 0; ret = dcmi_get_device_info(dev_id[i], DCMI_MAIN_CMD_DVPP, DCMI_SUB_CMD_DVPP_JPEGE_RATE, (void*)&ratio, &ratio_size); if (ret != 0) { printf("[%s %d] dev_id:%d sub_cmd:0x%x, ratio:(0x%x,%d) test_fail value = %d\n", __func__, __LINE__, dev_id[i], DCMI_SUB_CMD_DVPP_JPEGE_RATE, ratio, ratio, ret); return -1; } ratio = 0; ret = dcmi_get_device_info(dev_id[i], DCMI_MAIN_CMD_DVPP, DCMI_SUB_CMD_DVPP_JPEGD_RATE, (void*)&ratio, &ratio_size); if (ret != 0) { printf("[%s %d] dev_id:%d sub_cmd:0x%x, ratio:(0x%x,%d) test_fail value = %d\n", __func__, __LINE__, dev_id[i], DCMI_SUB_CMD_DVPP_JPEGD_RATE, ratio, ratio, ret); return -1; } }