一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万
复制代码
 1     //1、根据void* 接口指针创建实际内容指针(为了封装,加密)
 2     soft_isp_handle_t pHandle = NULL;
 3     st_soft_isp_handle_create(&pHandle);
 4 
 5 
 6     //2、将pHanle赋予param_t结构体进行构造生成结构体参数
 7     softisp_param_t* p_softisp_param = NULL;
 8     int raw_num = 3;
 9     p_softisp_param = new softisp_param_t(pHandle, raw_num, thread_pool);
10 
11     softisp_param_t& softisp_param = *p_softisp_param;
12 
13     //3、将结构体参数赋予基类,进行初始化(基类中包含了各个模块的共享参数)
14     //alignment
15     softisp::align align_(softisp_param);
16     align_.under_exposure();
17 
18     //fusion
19     softisp::raw_fusion fusion_(softisp_param);
20     fusion_.fusion();
复制代码

基于C++写算法SDK时,基于顶层设计的考虑,则是需要让算法每个子模块之间互相解耦,同时可以共享meta参数和常用读写图片的函数。

比较高端一点的设计方式,应该是:

  • 算法接口模块,需要设计一个algorithm基类,这个基类包含了基本的图像操作函数,同时包含一个共享参数对象。
  • 算法模块本身,通常是基于策略模式,分为接口类和策略基类以及具体策略子类。用户调用接口类,而接口类封装了策略基类,而具体策略子类实现了策略基类。

但是在本次算法SDK中,只有一个共享参数类做为基类,是一种最简单有效实现各个算法子模块解耦的方式。

记录一下心得体会:

  1. 在接口文件中,通常需要设置一个void *pHandle的空指针,目的是为了SDK加密,只有在算法内部时,才会强制转换成实际应用类型的指针;
  2. 针对void* pHandle的空指针,如果传递到create_handle函数中时,需要传递二级指针,否则无法改变pHanlde指针内部指向的内容。因为,此时形参和实参,仅仅只是浅拷贝了指针。
  3. 使用pHandle初始化param结构体,最后将param结构体传入每个算法子模块类,在每个子模块类中,会去初始化共享参数类(基类),从而实现参数共享,算法模块解耦。

这里有个C++的知识点就是:

  • 在传递一级指针时,只有对指针所指向的内存变量做操作才是有效的;
  • 在传递二级指针时,只有对指针的指向做改变才是有效的;
posted on   一杯清酒邀明月  阅读(487)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-08-05 Qt pushButton clicked(bool) always false
2020-08-05 Qt QPushButton按下连续事件
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示