Android 系统自带相机理解-Setting设置如何触发-1?
一、JAVA知识点:
1.什么是ConcurrentHashMap?
ConcurrentHashMap 的优势在于兼顾性能和线程安全,
一个线程进行写操作时,它会锁住一小部分,
其他部分的读写不受影响,其他线程访问没上锁的地方不会被阻塞
https://blog.csdn.net/qq_29051413/article/details/107869427
2.接口、抽象类概念理解:
一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。
一个接口只有方法的特征 没有方法的实现。
接口是一系列方法的声明,是一些方法特征的集合,一个接口没有方法的实现,
因此这写方法可以再不同的类实现,而这写实现可以具有不同的行为
接口理解为100%的抽象类。
抽象方法只能存在抽象类或接口中,但抽象类中却能存在非抽象方法即有方法体的方法。
抽象类是实现接口的,并且还可以定义自己的抽象方法给别人去实现。
3.java中 实现接口中的某一个接口
实例 public class EISCaptureRequestConfig implements ICameraSetting.ICaptureRequestConfigure
二、物理知识:
1.什么是sensor?有什么用处?
感光元件。
相机图像数据都是来自于相机硬件的图像传感器(Image Sensor)
Image sensor(图像传感器)是一种半导体芯片,
其表面有几十万到几百万个光电二极管,光电二极管受到光照就会产生电荷,
将光线转换成电信号。其功能类似于人的眼睛,
因此sensor性能的好坏将直接影响到camera的性能.
https://www.jianshu.com/p/f8d0d1467584
https://zhuanlan.zhihu.com/p/37301343
三、Android相机逻辑代码知识:
1.configEisSessionRequestParameter 设置
captureBuilder.set(mKeyEisSessionParameter, CAM_EIS_SESSION_PARAMETER_ON);
是什么意思?
Session Parameter
本质是什么?
Session Parameter本质上是一个不带Surface的CaptureRequest
Session的创建是干嘛?
配置好的一次会话,用于从Camera获取图像,或者reprocess图像。
可能需要几百毫秒才能完成Session的创建,
HAL通常在这个阶段完成如下事情
创建Pipeline
申请Buffer
也就是Session在预览之前发生。
https://blog.csdn.net/qq_42194101/article/details/120171032
https://blog.csdn.net/qq_42194101/article/details/120171006
2.什么是SurfaceView,Surface、SurfaceHolder
* Handle onto a raw buffer that is being managed by the screen compositor.
*
* <p>A Surface is generally created by or from a consumer of image buffers (such as a
* {@link android.graphics.SurfaceTexture}, {@link android.media.MediaRecorder}, or
* {@link android.renderscript.Allocation}), and is handed to some kind of producer (such as
* {@link android.opengl.EGL14#eglCreateWindowSurface(android.opengl.EGLDisplay,android.opengl.EGLConfig,java.lang.Object,int[],int) OpenGL},
* {@link android.media.MediaPlayer#setSurface MediaPlayer}, or
* {@link android.hardware.camera2.CameraDevice#createCaptureSession CameraDevice}) to draw
* into.</p>
Surfaces是用来处理屏幕显示内容合成器所管理的原始缓存区的工具。
它通常由图像缓冲区的消费者来创建(如:SurfaceTexture,MediaRecorder),
然后被移交给生产者(如:MediaPlayer)或者是显示到其上(如:CameraDevice)
SurfaceHolder
* Abstract interface to someone holding a display surface. Allows you to
* control the surface size and format, edit the pixels in the surface, and
* monitor changes to the surface. This interface is typically available
* through the {@link SurfaceView} class.
一个抽象接口,给持有surface的对象使用。它可以控制surface的大小和格式,
编辑surface中的像素,以及监听surface的变化。这个接口通常通过SurfaceView类获得
SurfaceView
* Provides a dedicated drawing surface embedded inside of a view hierarchy.
* You can control the format of this surface and, if you like, its size; the
* SurfaceView takes care of placing the surface at the correct location on the
* screen
SurfaceView提供了嵌入视图层级中的专用surface。你可以控制surface的格式或大小。
SurfaceView负责把surface显示在屏幕的正确位置
SurfaceView是一个view对象,用于在屏幕上显示相机的预览画面
SurfaceView中有两个对象,Surface和SuraceHolder。
我们通过SuraceHolder中的回调可以知道Surface的状态(创建、变化、销毁)
通过getHolder()方法获得当前SurfaceView的SuraceHolder对象
3.EIS设置、关闭代码:
EIS 为什么设置两次?
session一次
预览一次
文件 EISCaptureRequestConfig.java
方法1 configCaptureRequest:表示一个捕捉请求,
我们可以为不同的场景(预览、拍照)创建不同的捕捉请求,
并可以配置不同的捕捉属性,如:预览分辨率,预览目标,对焦模式、曝光模式等等。
1次: public void configCaptureRequest(CaptureRequest.Builder captureBuilder){
captureBuilder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE,
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON);
captureBuilder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE,
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_OFF);
}
方法2 第二次
2次:
configEisSessionRequestParameter
captureBuilder.set(mKeyEisSessionParameter, CAM_EIS_SESSION_PARAMETER_ON);
captureBuilder.set(mKeyEisSessionParameter, CAM_EIS_SESSION_PARAMETER_OFF);
https://blog.csdn.net/wjky2014/article/details/120984783
