rkipc main.c 中 rk_param_init函数分析
rk_param_init函数
这个函数是用来读取配置文件进行参数配置
这个函数在
luckfox-pico/project/app/rk_smart_door/smart_door/common/uvc/param/param.c
中
这个函数在main函数中被调用
//通过-c 配置文件路径 把配置文件传进来
case 'c':
rkipc_ini_path_ = optarg;
//调用,根据文件中的配置项配置参数
rk_param_init(rkipc_ini_path_);
### 函数分析
```c
int rk_param_init(char *ini_path) {
LOG_INFO("%s\n", __func__);
//加锁
pthread_mutex_lock(&g_param_mutex);
g_ini_d_ = NULL;
//存在配置文件,读路径进g_ini_path_
if (ini_path)
memcpy(g_ini_path_, ini_path, strlen(ini_path));
//不存在则读缺省的
else
memcpy(g_ini_path_, "/usr/share/rkuvc.ini", strlen("/usr/share/rkuvc.ini"));
LOG_INFO("g_ini_path_ is %s\n", g_ini_path_);
//解析出所有的参数,放在g_ini_d_ 中
g_ini_d_ = iniparser_load(g_ini_path_);
if (g_ini_d_ == NULL) {
LOG_ERROR("iniparser_load error!\n");
return -1;
}
//打印参数名称和值
rk_param_dump();
//开锁
pthread_mutex_unlock(&g_param_mutex);
return 0;
}
调用
g_ini_d_ 保存了所有的参数,要查看某一项的值,可以根据param.h里面的函数调用
extern dictionary *g_ini_d_;
//获取名为entry整型参数
int rk_param_get_int(const char *entry, int default_val);
//设置名为entry整型参数
int rk_param_set_int(const char *entry, int val);
//获取名为entry双精型参数
int rk_param_get_double(const char *entry, double default_val);
//获取名为entry字符型参数
const char *rk_param_get_string(const char *entry, const char *default_val);
//设置名为entry字符型参数
int rk_param_set_string(const char *entry, const char *val);
//将当前参数保存为文件
int rk_param_save();
//从指定ini文件初始化
int rk_param_init(char *ini_path);
//反初始化
int rk_param_deinit();
//rk_param_reload
int rk_param_reload();
例如 ini文件中
[video.source]
enable_aiq = 1
enable_vo = 0
vo_dev_id = 3 ; 0 is hdmi, 3 is mipi
enable_ivs = 1
enable_jpeg = 1
enable_venc_0 = 1
enable_venc_1 = 1
enable_venc_2 = 0
enable_npu = 0
npu_fps = 10
enable_rtsp = 1
enable_rtmp = 0
rotation = 0 ; available value:0 90 180 270
可以通过
rk_param_get_int("video.source:enable_npu", 0)
获得 enable_npu 的值得,用来控制npu开关。
关于iniparser_load函数
这个函数位于
luckfox-pico/project/app/component/rkadk/rkadk/src/third-party/iniparser/iniparser.c
中,用来分析ini文件
/*-------------------------------------------------------------------------*/
/**
@brief Parse an ini file and return an allocated dictionary object
@param ininame Name of the ini file to read.
@return Pointer to newly allocated dictionary
This is the parser for ini files. This function is called, providing
the name of the file to be read. It returns a dictionary object that
should not be accessed directly, but through accessor functions
instead.
The returned dictionary must be freed using iniparser_freedict().
*/
/*--------------------------------------------------------------------------*/
deepseek翻译为
/--------------------------------------------------------------------------/
/**
@brief 解析一个ini文件并返回一个已分配的字典对象
@param ininame 要读取的ini文件的名称。
@return 指向新分配的字典的指针
这是ini文件的解析器。调用此函数时需提供要读取的文件名。它会返回一个字典对象,
该对象不应直接访问,而应通过访问器函数进行操作。
必须使用iniparser_freedict()来释放返回的字典。
/
/--------------------------------------------------------------------------*/