1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_CFG_IO__ 7*437bfbebSnyanmisaka #define __MPP_CFG_IO__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "rk_mpp_cfg.h" 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka #include "mpp_internal.h" 12*437bfbebSnyanmisaka 13*437bfbebSnyanmisaka typedef enum MppCfgType_e { 14*437bfbebSnyanmisaka MPP_CFG_TYPE_INVALID = 0, 15*437bfbebSnyanmisaka 16*437bfbebSnyanmisaka /* invalid or empty value type */ 17*437bfbebSnyanmisaka MPP_CFG_TYPE_NULL, 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka /* leaf type must with name */ 20*437bfbebSnyanmisaka MPP_CFG_TYPE_BOOL, 21*437bfbebSnyanmisaka MPP_CFG_TYPE_s32, 22*437bfbebSnyanmisaka MPP_CFG_TYPE_u32, 23*437bfbebSnyanmisaka MPP_CFG_TYPE_s64, 24*437bfbebSnyanmisaka MPP_CFG_TYPE_u64, 25*437bfbebSnyanmisaka MPP_CFG_TYPE_f32, 26*437bfbebSnyanmisaka MPP_CFG_TYPE_f64, 27*437bfbebSnyanmisaka MPP_CFG_TYPE_STRING, 28*437bfbebSnyanmisaka MPP_CFG_TYPE_RAW, 29*437bfbebSnyanmisaka 30*437bfbebSnyanmisaka /* branch type */ 31*437bfbebSnyanmisaka MPP_CFG_TYPE_OBJECT, 32*437bfbebSnyanmisaka MPP_CFG_TYPE_ARRAY, 33*437bfbebSnyanmisaka 34*437bfbebSnyanmisaka MPP_CFG_TYPE_BUTT, 35*437bfbebSnyanmisaka } MppCfgType; 36*437bfbebSnyanmisaka 37*437bfbebSnyanmisaka typedef union MppCfgVal_u { 38*437bfbebSnyanmisaka rk_bool b1; 39*437bfbebSnyanmisaka rk_s32 s32; 40*437bfbebSnyanmisaka rk_u32 u32; 41*437bfbebSnyanmisaka rk_s64 s64; 42*437bfbebSnyanmisaka rk_u64 u64; 43*437bfbebSnyanmisaka rk_float f32; 44*437bfbebSnyanmisaka rk_double f64; 45*437bfbebSnyanmisaka void *str; 46*437bfbebSnyanmisaka void *ptr; 47*437bfbebSnyanmisaka } MppCfgVal; 48*437bfbebSnyanmisaka 49*437bfbebSnyanmisaka typedef void* MppCfgObj; 50*437bfbebSnyanmisaka typedef rk_s32 (*MppCfgObjCond)(MppCfgObj obj); 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka #ifdef __cplusplus 53*437bfbebSnyanmisaka extern "C" { 54*437bfbebSnyanmisaka #endif 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka rk_s32 mpp_cfg_get_object(MppCfgObj *obj, const char *name, MppCfgType type, MppCfgVal *val); 57*437bfbebSnyanmisaka rk_s32 mpp_cfg_get_array(MppCfgObj *obj, const char *name, rk_s32 count); 58*437bfbebSnyanmisaka rk_s32 mpp_cfg_put(MppCfgObj obj); 59*437bfbebSnyanmisaka rk_s32 mpp_cfg_put_all(MppCfgObj obj); 60*437bfbebSnyanmisaka 61*437bfbebSnyanmisaka /* object tree build */ 62*437bfbebSnyanmisaka rk_s32 mpp_cfg_add(MppCfgObj root, MppCfgObj leaf); 63*437bfbebSnyanmisaka /* object tree release */ 64*437bfbebSnyanmisaka rk_s32 mpp_cfg_del(MppCfgObj obj); 65*437bfbebSnyanmisaka /* find by name string */ 66*437bfbebSnyanmisaka rk_s32 mpp_cfg_find(MppCfgObj *obj, MppCfgObj root, char *name, rk_s32 type); 67*437bfbebSnyanmisaka 68*437bfbebSnyanmisaka /* attach MppCfgInfo for access location */ 69*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_info(MppCfgObj obj, MppCfgInfo *info); 70*437bfbebSnyanmisaka /* attach KmppEntry for access location */ 71*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_entry(MppCfgObj obj, KmppEntry *entry); 72*437bfbebSnyanmisaka /* add cfg obj condition for input / output option */ 73*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_cond(MppCfgObj obj, MppCfgObjCond cond); 74*437bfbebSnyanmisaka 75*437bfbebSnyanmisaka void mpp_cfg_dump(MppCfgObj obj, const char *func); 76*437bfbebSnyanmisaka #define mpp_cfg_dump_f(obj) mpp_cfg_dump(obj, __FUNCTION__) 77*437bfbebSnyanmisaka 78*437bfbebSnyanmisaka /* mark all MppCfgObject ready and build trie for string access */ 79*437bfbebSnyanmisaka MppTrie mpp_cfg_to_trie(MppCfgObj obj); 80*437bfbebSnyanmisaka 81*437bfbebSnyanmisaka /* mpp_cfg output to string and input from string */ 82*437bfbebSnyanmisaka rk_s32 mpp_cfg_to_string(MppCfgObj obj, MppCfgStrFmt fmt, char **buf); 83*437bfbebSnyanmisaka rk_s32 mpp_cfg_from_string(MppCfgObj *obj, MppCfgStrFmt fmt, const char *buf); 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka /* 86*437bfbebSnyanmisaka * obj - read from file or string and get an object as source 87*437bfbebSnyanmisaka * type - struct type object root for location table indexing and access 88*437bfbebSnyanmisaka * st - struct body to write obj values to 89*437bfbebSnyanmisaka */ 90*437bfbebSnyanmisaka rk_s32 mpp_cfg_to_struct(MppCfgObj obj, MppCfgObj type, void *st); 91*437bfbebSnyanmisaka /* 92*437bfbebSnyanmisaka * obj - output object root for the struct values 93*437bfbebSnyanmisaka * type - struct type object root for location table access 94*437bfbebSnyanmisaka * st - struct body to write obj values 95*437bfbebSnyanmisaka */ 96*437bfbebSnyanmisaka rk_s32 mpp_cfg_from_struct(MppCfgObj *obj, MppCfgObj type, void *st); 97*437bfbebSnyanmisaka 98*437bfbebSnyanmisaka rk_s32 mpp_cfg_print_string(char *buf); 99*437bfbebSnyanmisaka 100*437bfbebSnyanmisaka #ifdef __cplusplus 101*437bfbebSnyanmisaka } 102*437bfbebSnyanmisaka #endif 103*437bfbebSnyanmisaka 104*437bfbebSnyanmisaka #endif /* __MPP_CFG_IO__ */ 105