一步一步解析google camera2 demo(一)

目录:
一、Camera2关键类解析
二、打开相机
三、预览
四、拍照

一、Camera2关键类解析

1、CameraManager

A system service manager for detecting, characterizing, and connecting to CameraDevices.

  • public String[] getCameraIdList ()

     函数功能:返回所有可用相机设备的id列表。
    
  • public CameraCharacteristics getCameraCharacteristics (String cameraId)

     函数功能:查询指定相机设备的特性,对于指定的相机设备,这些特性是不变的。
    
  • public void openCamera (String cameraId, CameraDevice.StateCallback callback, Handler handler)

     函数功能:打开指定摄像头。
       cameraId:代表要打开的摄像头Id。
       callback:camera open完之后响应的回调。
       handler:执行callback的Handler,如果程序希望直接在当前线程中执行callback,则handler设置为null。
    

2、CameraCharacteristics

The properties describing a CameraDevice.

  • LENS_FACING

     相机相对屏幕设备的方向。(FRONT、BACK、EXTERNAL)
    
  • SCALER_STREAM_CONFIGURATION_MAP

     相机设备支持的stream配置信息。
    
  • SENSOR_ORIENTATION

     顺时针角度,输出图像需要通过该角度以原始方向旋转到设备屏幕上。(0, 90, 180, 270)
    
  • FLASH_INFO_AVAILABLE

     相机设备是闪光灯是否可用
    

3、CameraDevice

The CameraDevice class is a representation of a single camera connected to an Android device, allowing for fine-grain control of image capture and post-processing at high frame rates.

  • public abstract CaptureRequest.Builder createCaptureRequest (int templateType)

     函数功能:根据template类型为目标use case创建CaptureRequest.Builder。
       TEMPLATE_PREVIEW:      预览
       TEMPLATE_STILL_CAPTURE:拍照
       TEMPLATE_RECORD:       录像
    
  • public abstract void createCaptureSession (List outputs, CameraCaptureSession.StateCallback callback, Handler handler)

     函数功能:根据提供给相机设备的target output Surface集合创建camera capture session。
       outputs:用于创建session的surface集合。
       callback:session创建完成后响应的回调。
       handler:执行callback的Handler,如果程序希望直接在当前线程中执行callback,则handler设置为null。
    

4、CaptureRequest.Builder

A builder for capture requests.

  • public void addTarget (Surface outputTarget)

     函数功能:给要生成的request添加surface。添加的surface一定要属于创建session时指定的surface list。
    
  • public void set (Key key, T value)

     函数功能:给要生成的request设置settings。
       Key: The metadata field to write.
       T: The value to set the field to, which must be of a matching type to the key.
     
     // 案例,设置自动曝光
     captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
    
  • public CaptureRequest build ()

     函数功能:生成request根据已设置的target surface和settings。
    

5、CameraCaptureSession

A configured capture session for a CameraDevice, used for capturing images from the camera or reprocessing images captured from the camera in the same session previously.
The active capture session determines the set of potential output Surfaces for the camera device for each capture request. A given request may use all or only some of the outputs. Once the CameraCaptureSession is created, requests can be submitted with capture, captureBurst, setRepeatingRequest, or setRepeatingBurst.

  • public abstract int setRepeatingRequest (CaptureRequest request, CameraCaptureSession.CaptureCallback listener, Handler handler)

     函数功能:启预览,以最快的速度重复submit request。再次调用该函数会清除掉之前设置的request,而使用新的request。
       request:用于重复submit的request。
       listener:每个request处理完成后都会响应这个listener,可以为null。
       handler:执行callback的Handler,如果程序希望直接在当前线程中执行callback,则handler设置为null。
    
  • public abstract void stopRepeating ()

     函数功能:用于取消之前设置的repeating request。
     当前正在处理的request依然会处理完成,待所有request处理完成后,会响应CameraCaptureSession.StateCallback.onReady(CameraCaptureSession)。
    
  • public abstract void abortCaptures ()

     函数功能:尽可能快地丢掉等待状态和正在处理的request。会触发native camera的flush。
    
  • public abstract int capture (CaptureRequest request, CameraCaptureSession.CaptureCallback listener, Handler handler)

     函数功能:拍照,request处理完成后在listener响应。拍照的request比预览的request,会被指定的request pending队列的队头。
    

6、CaptureRequest

An immutable package of settings and outputs needed to capture a single image from the camera device.
Contains the configuration for the capture hardware (sensor, lens, flash), the processing pipeline, the control algorithms, and the output buffers. Also contains the list of target Surfaces to send image data to for this capture.

7、CameraCaptureSession.CaptureCallback

A callback object for tracking the progress of a CaptureRequest submitted to the camera device.
This callback is invoked when a request triggers a capture to start, and when the capture is complete. In case on an error capturing an image, the error method is triggered instead of the completion method.

  • public void onCaptureCompleted (CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)

     函数功能:capture完成并且所有的result metadata都返回触发。
    
  • public void onCaptureProgressed (CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult)

     函数功能:partial metadata返回时调用,partial metadata是full metadata的子集,为了提高性能,有一些metadata数据应用需要提前获取到。
    
### 回答1: camera2demo是一个Android应用程序演示示例,用于演示如何使用Android相机2 API拍摄照片和录制视频。camera2demo具有用户界面,可以启用相机,选择不同的摄像头(前置或后置),调整预览尺寸,并拍摄照片或录制视频。 该示例应用程序展示了如何使用CameraManager类来获取可用的相机设备列表,并使用CameraCharacteristics类获取相机特性,如支持的预览尺寸和拍摄模式等。它还使用了TextureView来作为相机预览的界面元素,并使用了CaptureRequest和CaptureSession类来捕获照片和录制视频。 camera2demo还包括一些基本功能,如闪光灯控制,自动对焦和曝光控制。它允许用户通过点击屏幕来拍摄照片,并通过长按来录制视频。它还提供了一些额外的设置选项,如预览比例和对焦模式的调整。 使用camera2demo可以帮助开发人员学习如何使用Android相机2 API来构建自己的相机应用程序。它提供了一个简单易懂的示例,展示了相机2 API的核心概念和功能。通过阅读和理解camera2demo的源代码,开发人员可以更好地了解相机2 API的用法,并根据自己的需求进行扩展和定制。 ### 回答2: Camera2Demo是一个示例程序,用于展示Android相机API的使用方法。相机API是Android系统提供的一组功能强大的相机控制接口,它允许开发者在应用程序中直接访问设备的相机硬件,并实现各种相机功能。 Camera2Demo的主要目的是帮助开发者理解和学习如何使用相机API来实现自定义相机功能。它展示了如何打开相机、设置相机参数、捕获图像和预览以及处理回调等基本操作。通过查看和理解Camera2Demo的源代码,开发者可以学习到如何使用不同的相机功能,如自动对焦、曝光控制、白平衡调节等。 Camera2Demo中还展示了如何处理相机相关的权限请求和运行时权限申请。由于相机属于敏感权限,需要在应用程序中进行权限管理,以确保用户的个人隐私和数据安全。 除了基本的相机操作外,Camera2Demo还演示了如何实现高级的相机功能,例如拍摄连续照片、录制视频、拍摄RAW图像等。通过学习和运行Camera2Demo,开发者可以了解如何利用相机API来应对各种不同的需求和场景。 总之,Camera2Demo是一个有价值的示例程序,对于那些想要开发自定义相机功能的Android开发者来说,它提供了一个很好的起点和参考。 ### 回答3: camera2demo 是一个 Android 相机应用程序的示例代码。它是基于 Android Camera2 API 开发的,Camera2 API 是 Android 系统中用于访问和控制相机硬件功能的官方 API。相比较于过时的 Camera API,Camera2 API 提供了更丰富、更灵活的相机功能,并且性能更好。 camera2demo 的主要功能是通过调用 Camera2 API 实现相机的打开、预览、拍照和录像等操作。它展示了如何创建一个相机预览界面,如何自动对焦和曝光,如何设置不同的相机参数,以及如何捕获静态图片和录制视频等。 camera2demo 的示例代码是一个完整的 Android 应用程序,你可以直接运行在支持 Camera2 API 的设备上。通过阅读和学习这个示例代码,你可以了解和掌握 Camera2 API 的使用方法和原理,从而在自己的应用程序中实现更高级和更个性化的相机功能。 总之,camera2demo 提供了一个很好的学习资源,帮助开发者理解和使用 Android Camera2 API。通过充分利用 Camera2 API 的强大功能,开发者可以开发出更好的相机应用程序,提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值