rkipc main.c 中 rk_param_init函数分析

devtools/2025/2/25 2:17:26/

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));//不存在则读缺省的elsememcpy(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 dictionaryThis is the parser for ini files. This function is called, providingthe name of the file to be read. It returns a dictionary object thatshould not be accessed directly, but through accessor functionsinstead.The returned dictionary must be freed using iniparser_freedict().*/
/*--------------------------------------------------------------------------*/

deepseek翻译为

/--------------------------------------------------------------------------/
/**
@brief 解析一个ini文件并返回一个已分配的字典对象
@param ininame 要读取的ini文件的名称。
@return 指向新分配的字典的指针这是ini文件的解析器。调用此函数时需提供要读取的文件名。它会返回一个字典对象,
该对象不应直接访问,而应通过访问器函数进行操作。必须使用iniparser_freedict()来释放返回的字典。
/
/--------------------------------------------------------------------------*/

http://www.ppmy.cn/devtools/161470.html

相关文章

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…

vue+element-plus简洁完美实现淘宝网站模板

目录 一、项目介绍 二、项目截图 1.项目结构图 2.首页 3.详情 4.购物车 5.登陆页 三、源码实现 1.路由配置 2.依赖包 四、总结 一、项目介绍 项目在线预览&#xff1a;点击访问 本项目为vue项目&#xff0c;参考淘宝官方样式为主题来设计元素&#xff0c;简洁美观&…

【每日八股】Redis篇(一):概述

Redis 为什么快&#xff1f; 一句话概括&#xff1a; Redis 之所以快&#xff0c;主要是因为它是基于内存操作的&#xff0c;避免了磁盘 I/O 的开销&#xff1b;采用单线程模型&#xff0c;避免了上下文切换和锁竞争&#xff1b;使用了高效的数据结构和紧凑的编码方式&#xf…

C转C++

#include<bits/stdc.h> 万能头文件&#xff0c;但vs要自己添加&#xff0c;具体操作下次再发 using namespace std; 必须要加&#xff0c;跟#define _CRT_SECURE_NO_WARNINGS 一样 这张图是我看B站下的&#xff0c;但原视频好像被盗过&#xff0c;不知原作者是谁&#…

前端开发中的贪心算法实践:以最小成本解决实际问题

一、什么是贪心算法&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最优解的策略&#xff0c;希望通过局部最优的累积达到全局最优的算法思想。其核心特征是&#xff1a; 无后效性&#xff1a;当前决策不影响后续状态 贪…

深度学习入门:从零开始理解神经网络

欢迎来到深度学习的世界&#xff01;如果你是初学者&#xff0c;可能会对这个领域感到既兴奋又有些迷茫。别担心&#xff0c;我会带你一步步走进这个充满魅力的领域。深度学习是人工智能领域的一个重要分支&#xff0c;它通过模拟人脑的神经网络结构来处理数据。深度学习的核心…

基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知

写在前面 博文内容涉及 基于 Deepseek LLM 的本地知识库搭建使用 ollama 部署 Deepseek-R1 LLM知识库能力通过 Ragflow、Dify 、AnythingLLM、Cherry 提供理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我站在人潮中央&#xff0c;思考这日日重复的生活。我突然想&#xff0c…

Java集合之ArrayList(含源码解析 超详细)

1.ArrayList简介 ArrayList的底层是数组队列&#xff0c;相当于动态数组。与Java中的数组相比&#xff0c;它的容量能动态增长。在添加大量元素前&#xff0c;应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。 ArrayList继承于Ab…