zoukankan      html  css  js  c++  java
  • Android Camera2的使用

    参考:https://developer.android.com/reference/android/hardware/camera2/package-summary.html

    camera2提供了一个连接Android相机的接口,用来代替camera类。

    该软件包将摄像机设备建模为流水线,该流水线接收输入请求以捕获单个帧,根据请求捕获单个图像,然后输出一个捕获结果元数据包,以及用于请求的一组输出图像缓冲区。 这些请求按顺序处理,并且多个请求可以一次在飞行中。 由于相机设备是一个多阶段的流水线,因此在多数Android设备上都需要有多个请求。

    要枚举,查询和打开可用的相机设备,请获取CameraManager实例。

    单独的CameraDevices提供一组静态属性信息,用于描述设备的硬件设备以及可用的设置和输出参数。 这些信息是通过CameraCharacteristics对象提供的,可以通过getCameraCharacteristics(String)获取有效值。

    要从摄像头设备捕获或流式传输图像,应用程序必须首先使用createCaptureSession(List,CameraCaptureSession.StateCallback,Handler)创建一个带摄像头设备的输出Surfaces的摄像头捕获会话。 每个表面必须预先配置适当的尺寸和格式(如果适用),以匹配相机设备的尺寸和格式。 目标Surface可以从各种类获得,包括SurfaceView,通过Surface(SurfaceTexture),MediaCodec,MediaRecorder,Allocation和ImageReader的SurfaceTexture。

    通常,相机预览图像将发送到SurfaceView或TextureView(通过其SurfaceTexture)。 可以使用JPEG和RAW_SENSOR格式的ImageReader捕获DngCreator的JPEG图像或RAW缓冲区。 在RenderScript,OpenGL ES中,或直接在托管代码或本机代码中进行应用程序驱动的相机数据处理,最好分别使用带有YUV_420_888格式的YUV类型,SurfaceTexture和ImageReader进行分配。

    然后,应用程序需要构建一个CaptureRequest,它定义了摄像机设备捕获单个图像所需的所有捕获参数。 该请求还列出了应将哪个配置的输出Surfaces用作此捕捉的目标。 CameraDevice有一个工厂方法,用于为给定用例创建一个请求构建器,该方法针对运行该应用程序的Android设备进行了优化。

    一旦请求被设置,它就可以被传送到主动捕捉会话,以进行一次捕捉或无限重复使用。这两种方法也有一个变种,接受用作突发捕获/重复突发的请求列表。重复请求的优先级低于捕获的优先级,因此在捕获当前重复(突发)捕获的任何新实例之前,将捕获配置了重复请求时通过capture()提交的请求。

    处理请求后,摄像机设备将生成一个TotalCaptureResult对象,其中包含有关拍摄时相机设备状态的信息以及使用的最终设置。 如果舍去或解决相互矛盾的参数是必要的,则这些可能与请求有所不同。 相机设备也会将一帧图像数据发送到请求中包含的每个输出表面。 这些是相对于输出CaptureResult异步生成的,有时候会相当晚。

  • 相关阅读:
    mybatis两种方式
    js绑定下拉框数据源
    修改 Idea 终端 Terminal 为 GitBash
    git stash使用
    解决百度网盘容量不符,没存进东西但容量变小的问题
    key_load_public: invalid format
    排序算法
    SpringBoot---自动配置原理
    mysql系列——Explain关键字(十)
    mysql系列——开启慢查询日志(十一)
  • 原文地址:https://www.cnblogs.com/xl-phoenix/p/8107897.html
Copyright © 2011-2022 走看看