Android camera: android.hardware.camera2 package

2024-06-03 15:18

本文主要是介绍Android camera: android.hardware.camera2 package,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

frameworks/base/core/java/android/hardware/camera2/CameraManager.java


android.hardware.camera2包为每个连接到android device的camera device提供一个接口;
android.hardware.camera2用于取代android.hardware.Camera
The android.hardware.camera2 package provides an interface to
individual camera devices connected to an Android device. It replaces
the deprecated android.hardware.Camera class.


android.hardware.camera2把camera device建模为管道,该管道接收捕捉一帧的请求,然后输出捕捉结果metadata packet和一组输出图像buffer.
请求按顺序处理且多个请求可一次性处理。因为camera device管道包括多个阶段??
This package models a camera device as a pipeline, which takes in
input requests for capturing a single frame, captures the single image
per the request, and then outputs one capture result metadata packet,
plus a set of output image buffers for the request. The requests are
processed in-order, and multiple requests can be in flight at
once. Since the camera device is a pipeline with multiple stages,
having multiple requests in flight is required to maintain full
framerate on most Android devices.


为了枚举、查询、打开可用的camera devices, 需要获得一个android.hardware.camera2.CameraManager实例。
To enumerate, query, and open available camera devices, obtain a
android.hardware.camera2.CameraManager instance.


每个android.hardware.camera2.CameraDevice提供一系列的属性,该属性通过
android.hardware.camera2.CameraManager#getCameraCharacteristics函数获得。
Individual android.hardware.camera2.CameraDevice
provide a set of static property information that
describes the hardware device and the available settings and output
parameters for the device. This information is provided through the
android.hardware.camera2.CameraCharacteristics object, and is
available through android.hardware.camera2.CameraManager#getCameraCharacteristics


为了从camera device捕捉图像,app必须创建一个回话:Capture Session,该回话需要一组输出surface用于camera device.
该功能通过调用函数android.hardware.camera2.CameraDevice#createCaptureSession实现。
To capture or stream images from a camera device, the application
must first create a android.hardware.camera2.CameraCaptureSession camera capture session
with a set of output Surfaces for use with the camera device, with
android.hardware.camera2.CameraDevice#createCaptureSession. 


根据camera device支持的大小和格式通过函数android.hardware.camera2.params.StreamConfigurationMap配置surface.
surface可通过下面的函数获得。
Each Surface has to be pre-configured with an android.hardware.camera2.params.StreamConfigurationMap appropriate
size and format (if applicable) to match the sizes and formats
available from the camera device. A target Surface can be obtained
from a variety of classes, including 
{@link android.view.SurfaceView},
{@link android.graphics.SurfaceTexture} via
{@link android.view.Surface#Surface(SurfaceTexture)},
{@link android.media.MediaCodec}, {@link android.media.MediaRecorder},
{@link android.renderscript.Allocation}, and {@link android.media.ImageReader}.




Generally, camera preview images are sent to {android.view.SurfaceView} or {android.view.TextureView} (via its
{android.graphics.SurfaceTexture}). 
Capture of JPEG images or
RAW buffers for {android.hardware.camera2.DngCreator} can be
done with {android.media.ImageReader} with the {
android.graphics.ImageFormat#JPEG} and {
android.graphics.ImageFormat#RAW_SENSOR} formats.  


Application-driven processing of camera data in RenderScript, OpenGL ES, or directly in
managed or native code is best done through {
android.renderscript.Allocation} with a YUV {
android.renderscript.Type}, {android.graphics.SurfaceTexture},
and {android.media.ImageReader} with a {
android.graphics.ImageFormat#YUV_420_888} format, respectively.






The application then needs to construct a {
android.hardware.camera2.CaptureRequest}, which defines all the
capture parameters needed by a camera device to capture a single
image. The request also lists which of the configured output Surfaces
should be used as targets for this capture. The CameraDevice has a
{android.hardware.camera2.CameraDevice#createCaptureRequest
factory method} for creating a {
android.hardware.camera2.CaptureRequest.Builder request builder} for a
given use case, which is optimized for the Android device the
application is running on.




一旦请求构建后,该请求调用函数进行处理:one-shot(android.hardware.camera2.CameraCaptureSession#capture)
或者repeating(android.hardware.camera2.CameraCaptureSession#setRepeatingRequest).
Once the request has been set up, it can be handed to the active
capture session either for a one-shot {
android.hardware.camera2.CameraCaptureSession#capture capture} or for
an endlessly {
android.hardware.camera2.CameraCaptureSession#setRepeatingRequest
repeating} use. Both methods also have a variant that accepts a list
of requests to use as a burst capture / repeating burst. Repeating
requests have a lower priority than captures, so a request submitted
through <code>capture()</code> while there's a repeating request
configured will be captured before any new instances of the currently
repeating (burst) capture will begin capture.


请求处理后,camera device会生成一个android.hardware.camera2.TotalCaptureResult对象,
该对象包含捕捉时camera device的状态和设置;camera device也会发送image数据到输出surface.
数据的发送和输出CaptureResult是异步的。
After processing a request, the camera device will produce a {
android.hardware.camera2.TotalCaptureResult} object, which contains
information about the state of the camera device at time of capture,
and the final settings used. These may vary somewhat from the request,
if rounding or resolving contradictory parameters was necessary. The
camera device will also send a frame of image data into each of the
output {Surfaces} included in the request. These are produced
asynchronously relative to the output CaptureResult, sometimes
substantially later.

这篇关于Android camera: android.hardware.camera2 package的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027354

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级