第20讲 Android Camera2 API SessionConfiguration详解

本讲是Android Camera专题系列的第20讲,我们介绍Android Camera2 API专题的SessionConfiguration详解,包括如下四部分内容:

  • 为什么要引入SessionConfiguration
  • SessionConfiguration简介

  • SessionConfiguration APIs概述

  • Session Parameter简介

视频在线观看:

为什么要引入SessionConfiguration

创建Session的API越来越多

  1. createCaptureSession(List outputs, callback, Handler handler)

  2. createCaptureSessionByOutputConfigurations(List outputConfigurations, callback, Handler handler)

  3. createConstrainedHighSpeedCaptureSession(List outputs, callback, Handler handler)

  4. createReprocessableCaptureSession(InputConfiguration inputConfig, List outputs, callback, Handler handler)

  5. createReprocessableCaptureSessionByConfigurations(InputConfiguration inputConfig, List outputs,, Handler handler)

但还是无法满足需求,API28想在创建Session时能够带一包参数下去,也就是设置Session Parameter

需要一个API一统江湖

  • createCaptureSession(SessionConfiguration config)

SessionConfiguration简介


 

SessionConfiguration是一个聚合类,将用于创建Camera Capture Session的参数都聚合在一个对象中,这些参数包括

  1. Session Type(对应HAL的Operation Mode)
    • 创建Regular Session还是High Speed Session
  2. Session State Callback
  3. Session Callback Executor(Handler)

  4. 输出流配置信息(OutputConfiguration)

  5. 输入流配置信息(InputConfiguration)

  6. Session Parameters

SessionConfiguration APIs概述

SessionConfiguration APIs概述

Session Parameter简介

Session Parameter

  • 本质是什么?
    • Session Parameter本质上是一个不带Surface的CaptureRequest
  • 为什么要引入?
    • 只靠Stream的size、format和Operation Mode还不足以决定Session的创建,比如FPS Range会决定Sensor走哪种mode
  • 如何知道Session Parameter中能设置哪些Metadata
    • Cameracharacteristics#getAvailableSessionKeys

Session Parameter没用好会发生什么?

Session Parameter没用好会发生什么?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,我之前的回答中提到的 `SessionConfiguration` 是与自然语言处理相关的,与 Android 相机开发无关。如果您要在 Android Camera2 中创建会话(Session),可以使用 `CameraCaptureSession` 类。下面是一个示例代码片段,用于创建一个 `CameraCaptureSession` 对象: ```java private CameraCaptureSession mCameraCaptureSession; private void createCameraSession() { try { Surface surface = mPreviewSurface; mImageReader = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.JPEG, 1); mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler); List<Surface> outputSurfaces = new ArrayList<>(); outputSurfaces.add(surface); outputSurfaces.add(mImageReader.getSurface()); mCameraDevice.createCaptureSession(outputSurfaces, mStateCallback, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } private CameraCaptureSession.StateCallback mStateCallback = new CameraCaptureSession.StateCallback() { @Override public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { mCameraCaptureSession = cameraCaptureSession; try { mCameraCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { Log.e(TAG, "onConfigureFailed: CameraCaptureSession configuration failed"); } }; ``` 在上面的代码中,我们使用 `CameraDevice` 的 `createCaptureSession()` 方法来创建一个会话。我们在 `createCaptureSession()` 方法中指定了要输出的 `Surface` 列表,包括预览 `Surface` 和图像读取器 `Surface`。在 `onConfigured()` 方法中,我们将创建的 `CameraCaptureSession` 对象保存在变量 `mCameraCaptureSession` 中,并将预览请求设置为重复请求,这样就可以实时预览相机输出了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值