singe/thirdparty/rockchip-mpp/mpp/base/mpp_cfg.c
2026-09-10 20:17:28 -05:00

85 lines
2.2 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
*/
#define MODULE_TAG "mpp_cfg"
#include <string.h>
#include "mpp_env.h"
#include "mpp_cfg.h"
#include "mpp_debug.h"
static void show_cfg_entry_err(KmppEntry *node, ElemType type, const char *func, const char *name)
{
mpp_err("%s cfg %s expect %s input NOT %s\n", func, name,
strof_elem_type(node->tbl.elem_type), strof_elem_type(type));
}
MPP_RET check_cfg_entry(KmppEntry *node, const char *name, ElemType type,
const char *func)
{
if (NULL == node) {
mpp_err("%s: cfg %s is invalid\n", func, name);
return MPP_NOK;
}
ElemType cfg_type = (ElemType)node->tbl.elem_type;
RK_S32 cfg_size = node->tbl.elem_size;
MPP_RET ret = MPP_OK;
switch (type) {
case ELEM_TYPE_st :
case ELEM_TYPE_arr : {
if (cfg_type != type) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
if (cfg_size <= 0) {
mpp_err("%s: cfg %s found invalid size %d\n", func, name, cfg_size);
ret = MPP_NOK;
}
} break;
case ELEM_TYPE_ptr : {
if (cfg_type != type) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
} break;
case ELEM_TYPE_s8 :
case ELEM_TYPE_u8 : {
if (cfg_size != sizeof(RK_S8)) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
} break;
case ELEM_TYPE_s16 :
case ELEM_TYPE_u16 : {
if (cfg_size != sizeof(RK_S16)) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
} break;
case ELEM_TYPE_s32 :
case ELEM_TYPE_u32 : {
if (cfg_size != sizeof(RK_S32)) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
} break;
case ELEM_TYPE_s64 :
case ELEM_TYPE_u64 : {
if (cfg_size != sizeof(RK_S64)) {
show_cfg_entry_err(node, type, func, name);
ret = MPP_NOK;
}
} break;
default : {
mpp_err("%s: cfg %s found invalid cfg type %d\n", func, name, type);
ret = MPP_NOK;
} break;
}
return ret;
}