自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 C++ 可变参数模板

可变参数模板是C++11引入的特性,它能够创建可变数量参数的模板函数和模板类。这一特性让我们可以编写出更加灵活和通用的代码。可能光这样子说,没有感觉,那就举一个简单的例子吧,假设现在有一个需求:要编写一个函数,它可以接收任意数量的参数,并且参数类型只需要是cout能够显示的即可。从需求来看,传进函数的参数数量不固定,并且类型的顺序也不固定,我们不可能定义很多个打印函数来做到这个需求,因为组合的情况太多太多了。这种情况下,用可变参数模板就可以解决这个问题。

2024-03-03 10:04:02 1053

原创 C++中的左值和右值

以前面那个例子,在函数模板f里调用函数g时,没有加forward,可以发现调用f时,即使传进去的参数是右值引用,但是从运行结果来看,f里调用函数g()时,传给函数g()的却变成了左值引用,这是因为传入给g()的是一个具名变量参数,左值是一个表示数据的表达式,它代表一个具名的内存位置,程序可以获取其地址,可以通过地址访问它们,是可被引用的数据对象。完美转发是C++11引入的一种特性,它是指泛型编程(模板编程)中,函数模板能够完全自己模板参数的类型传递给内部调用的其他函数,即参数左右值的属性不会发生变化。

2024-02-25 11:45:57 687

原创 C++中的智能指针

在实际中,应尽量避免直接使用裸指针,而应优先选择智能指针,它们利用对象的生命周期来管理资源,避免了资源泄漏这些问题。

2024-01-28 23:27:11 872

原创 C++ function<>和bind()

介绍两个概念:调用运算符和可调用对象。

2023-09-17 12:53:32 334

原创 C++ 多线程(future篇)

在前面介绍了启动线程,以及多线程下如何保证共享资源的竞争访问、线程同步这些。但是thread类无法访问从线程直接返回的值,如果要想获取线程的的执行结果,一般都是依靠全局或static变量,或是以实参传递的变量,然后结合互斥锁、条件变量,等待的线程去查验所等待的条件。假如某个线程按计划只等待一次,只要条件成立一次,它就不再理会条件变量了,条件变量不一定就是这种同步模式的最佳选择, 如果我们等待的条件是判定某份数据是否可用,C++ 标准库提供的std::future类模板更适合这种场景。

2023-09-10 23:47:50 1206

原创 C++ 多线程(automic篇)

前面章节介绍的st::mutex可以保证多线程之间数据访问的互斥性,但是C++ 11还提供了一种原子类型,即atomic,它提供了多线程间的原子操作,它是一种不需要用到mutex技术的多线程并发编程方式,一个操作一旦开始,这个操作就不能被处理器拆分处理,能够确保所有其他线程都不在同一时间访问该资源,不会存在数据竞争的问题。所以对于原子操作来讲,是不可能看到原子操作只完成了部分这种情况的, 它要么是做了,要么就是没做,只有这两种可能。

2023-09-03 14:10:13 603

原创 C++ 多线程 (mutex & conition_variable篇)

mutex>头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。前面章节介绍的st::mutex可以保证多线程之间数据访问的互斥性,但是C++11还提供了一种原子类型,它提供了多线程间的原子操作,它是一种不需要用到mutex技术的多线程并发编程方式,一个操作一旦开始,这个操作就不能被处理器拆分处理,能够确保所有其他线程都不在同一时间访问该资源,不会存在数据竞争的问题。

2023-09-02 16:24:15 181

原创 C++ std::thread

线程是处理器任务调度和执行的基本单位。可移植操作系统接口(Portable Operating System Interface)C++ 11开始,提供了线程类,叫做std::thread。它是语言层面的thread,因此使用新标准提供的线程库编写的程序是跨平台的,有利于多线程程序的移值。

2023-08-27 23:29:18 224

原创 Camera ISP简述

景物通过镜头(Lens)生成的光学图像投射到传感器表面上,传感器将接收到的光学信号会将转换成模拟电信号,后面再经过模\数转换成为数字信号, 但是这时候得到的数据与人类预期的图还有很大的差异。ISP(Image Signal Processor), 即图像信号处理, 主要作用是对前端图像传感器输出的数字信号做后期处理,使得最后能够生成人类预期的图片质量。

2023-05-14 20:57:39 931

原创 Android Camera之Metadada(二)

我们并不会直接去调用这些API,而是会对这些API进行一次再包装,对user而言,这会使得对metadata的操作变得简单。

2023-03-26 19:03:25 571

原创 Android Camera之Metadada(一)

它定义在system/media/camera/include/system/camera_metadata.h,但可以发现,其实camera_metadata_t就是system/media/camera/src/camera_metadata.c中的camera_metadata,它记录了这包metadata的一些基本信息。: data相对于camera_metadata_t起始地址的偏移量,即从camera_metadata_t的起始地址再偏移data_start就到了开始存储data的位置了。

2023-03-26 11:55:33 1091

原创 RAW、RGB和YUV格式

RAW数据、RGB和YUV格式简单介绍

2023-02-12 19:14:07 4517

原创 Android Camera之processCaptureResult

前言: 前面说过上层把Request送到Hal层之后,Hal层会将处理结果通过processCaptureResult()这个回调接口返回给上层。processCaptureResult这个接口其实是在ICameraDeviceCallback这个类当中定义的,在openCamera这一节有提及过,在openSession()时,有将ICameraDeviceCallback这个Class传给Hal,更具体地说是CameraDevice,因为CameraDevice有从ICameraDevice...

2022-05-30 23:51:40 1388

原创 Android Camera 之预览和拍照

submitRequesthttps://blog.csdn.net/sinat_22657459/article/details/92380466?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162916529916780269861770%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=1629165299

2022-05-30 23:50:06 1989 3

原创 Android Camera之Deferred Surface

送CaptureRequest给底层处理时,如果Deferrd Surface还没有Ready,则不能带进CameraRequest,必须要经过finalize过的surface才能带进Request里

2022-05-21 19:31:52 587

原创 Android Camera之createCaptureSession()

在open Camera成功之后,便会调用createCaptureSession()进行配置操作

2022-05-08 23:32:16 2178

原创 Andriod Camera之Open Camera

openCamera

2022-03-27 18:59:42 3035

原创 Android Camera之CameraServer的启动过程

在系统启动过程中,init进程启动后,会去解析位于system/core/rootdir目录下的init.rc文件,最终会Call到CameraServe可见CameraServer在启动过程中会去query camera device相关的静态信息,并存储在本地...

2021-07-31 17:30:21 2963

原创 Android Camera抢占机制——handleEvictionsLocked()

背景: 在Android系统中,当一个Client去open Camera时,可能会存在有其他Client正在使用camera的情况,然后由于系统dai'kua

2021-06-13 13:46:35 3050 13

原创 爬楼梯问题

题目: 假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。解析:假如要爬上第i阶(i>=2),则有两种方式: 1、从第i-1阶跳一步到第i阶 2、从第i-2阶跳两步到第i阶记f(i)为爬上第i阶的方法数量,则 ...

2019-09-27 17:07:23 148

原创 LeetCode 岛屿数量

题目给定一个由'1'(陆地)和'0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。实例:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3思路:这是一个典型的搜索问题,个人...

2019-09-12 17:14:33 121

原创 成员初始化列表

对于一个类来说,在1、构造函数初始化列表中初始化数据成员 和 2、在构造函数中对他们赋值,得到的结果都是一样的。但是遇到以下三种情况时只能采用初始化列表方法: 对于const类型的成员变量,只能采用初始化列表的方法 对于reference的变量,也只能采用初始化列表的方法 类的构造函数需要调用其基类的构造函数时。 ...

2019-09-07 20:46:38 150

原创 C++中变量的说明符与限定符

这些说明符和限定符决定了变量保留在内存中的时间(存储的持续性)和程序的那一部分可以使用它们(作用域和链接性)auto:自动类型推断register:说明该变量的使用频率比较高,变量采用寄存器存储,static:静态变量在整个程序执行期间都存在,分为静态全局变量和静态局部变量。静态全局变量意味着只对文件内部可见,其他 文件不能使用这个变量,即有...

2019-09-04 16:25:21 530

原创 C++中变量存储区域

C++程序的内存空间由如下几部分组成:1、栈区(stack):存放程序中的局部变量(不包含static声明的变量);发生函数调用时,栈用来传递函数的参数和返回值2、堆区(heap):存放程序在运行过程中动态分配的数据对象(或者说是变量)。即new和malloc分配的内存区域是分配在堆区的3、程序代码区:存放程序的执行代码,其分配的大小在程序运行前就已经确定4、全局变量区:存放全局变...

2019-07-28 11:04:24 376

原创 内联函数(inline)

内联函数(inline)1、用法:在函数声明和定义的前面加上inline2、目的:内联函数(inline)是为了提高程序的运行速度所做的改进。程序中执行常规函数的调用时,需要一定的开销,比如将函数参数复制到堆栈,做来回的跳跃等等。3、内联函数调用则与常规函数不同:内联函数直接将函数代码...

2019-07-27 20:19:47 550

原创 new与malloc

指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。 ——C++ Primer Plusmalloc与new实现了程序在运行时动态分配内存,分配的内存块位于堆(heap)或自由存储区。malloc与new...

2019-07-27 19:31:41 138

原创 图像滤波(一)

一、平滑空间滤波器平滑线性滤波器常用于模糊处理和降低噪声,就是对模板内像素简单求平均值,即待求像素点的值是:一般是赋予于距离成反比的权重,所有权重都相等的叫盒状滤波器。 空间均值处理的一个重要应用是为了对感兴趣的物体得到一个粗略的描述而模糊一幅图像,这样,那些较小的物体的灰度就与背景混合在一起了,较大物体变得像斑点而易于检测,如下图所示:先进行了彩色图像到灰度图像的转换...

2018-09-25 09:30:20 306

原创 图像插值-双线性插值与双三次插值

在现实生活中,我们经常会遇到把图像进行放大、几何空间变换的情况等等,这些操作都需要在源图像和目标图像之间建立一个映射规则,使得两图像像素坐标之间建立起一种对应关系,从而为目标图像的每一个像素赋值。从源图像到目标图像的映射叫前向映射,但是这种映射方法可能会出现这样的两个问题:源图像的好几个像素点映射到目标图像中的位置是相同的;目标图像某些位置没有要赋值的像素。这样就要考虑如何把多个输出值转换成一...

2018-09-24 17:31:20 13837

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除