欢迎光临散文网 会员登陆 & 注册

Android 系统自带相机理解-Setting设置如何触发-1?

2023-02-09 22:29 作者:努力学习天天赚钱123456  | 我要投稿

一、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


Android 系统自带相机理解-Setting设置如何触发-1?的评论 (共 条)

分享到微博请遵守国家法律