Camera2

作者: 小斌_bingor | 来源:发表于2019-01-06 23:31 被阅读0次
  • 这个系列的文章会翻译跟Camera2相关的api(用我的散装英语+自己的理解)
  • 目前处于一边学习一边翻译的状态,所以可能会有错误
  • 我也还没做校对,有需要的凑合着看,我会一边写一边回顾,有错就改
  • 也请路过的大神斧正,感谢~~~

camera2是为连接到Android设备上的摄像头提供接口的,用来替代camera(api20及以下)
camera2将摄像头构建为管道形式,画面的捕捉,将产生元数据包,以及一组请求的输出图像缓冲区
摄像头的使用,以一个CameraManager实例作为起点

CameraManager

 总结1:CameraManager做的事情,1是看看摄像头有啥功能;2是打开/监听摄像头;3是打开/监听闪光灯
 总结2:摄像头和闪光灯的所有权不是谁打开就一直拥有,可能被回收/抢夺

//通过Context.getSystemService(Class)获取
var manager = getSystemService(Context.CAMERA_SERVICE)
 嵌套类
  CameraManager.AvailabilityCallback
  相机可用/不可用状态切换回调
  CameraManager.TorchCallback
  手电筒状态回调(可用/禁用/不可用)
 公开方法
  //查询相机功能
  public CameraCharacteristics getCameraCharacteristics (String cameraId)
  //返回指定id的相机的属性,永不为空
  return CameraCharacteristics
  //获取摄像头id列表,id值为从0开始的Int值
  public String[] getCameraIdList ()
  //返回当前已连接的摄像头列表,永不为空
  return String[]
  //使用给定ID打开与摄像机的连接
  /**  
  使用getCameraIdList()获取可用ID,但是如果在getCameraIdList()后,openCamera()前,摄像头断开,或者摄像头被优先级更高的client占用,则打开失败
  前台应用(Activity)一般会被授予更高的级别,哪怕低级别的client再用,你也能把使用权给抢过来
  每次成功打开摄像头,都会使用最新的CameraDevice跑一次生命周期,可以在对应的周期方法内做初始化工作
  */
  public void openCamera (String cameraId, CameraDevice.StateCallback callback, Handler handler)
  public void openCamera (String cameraId, Executor executor, CameraDevice.StateCallback callback)

  Handler handler  --  回调可能会用到,传null默认使用当前线程的looper
  Executor executor  --  执行回调的执行器,不能为空
  //注册一个摄像头可用性回调(覆盖性注册)
  /**
  不用的时候,需要注销,否则会无休止地接收回调,并组织相关资源的释放
  */ 
  public void registerAvailabilityCallback (CameraManager.AvailabilityCallback callback, Handler handler)
  public void registerAvailabilityCallback (Executor executor, CameraManager.AvailabilityCallback callback)

  Handler handler  --  回调可能会用到,传null默认使用当前线程的looper
  Executor executor  --  执行回调的执行器,不能为空
  //注册一个闪光灯可用性回调(覆盖性注册)
  /**
  首次注册成功,会立即回调所有设备的闪光灯可用性
  不用的时候,需要注销,否则会无休止地接收回调,并组织相关资源的释放
  */
  public void registerTorchCallback (CameraManager.TorchCallback callback, Handler handler)
  public void registerTorchCallback (Executor executor, CameraManager.TorchCallback callback)

  Handler handler  --  回调可能会用到,传null默认使用当前线程的looper
  Executor executor  --  执行回调的执行器,不能为空
  //设置闪光灯模式
  /**
  使用前,得先用getCameraCharacteristics(String)检查是否有闪光灯
  就算有,如果被设置的闪光灯正在被使用,那么也可能设置失败
  */
  public void setTorchMode (String cameraId, boolean enabled)
//注销摄像头可用性监听
public void unregisterAvailabilityCallback (CameraManager.AvailabilityCallback callback)
//注销闪光灯可用性监听
public void unregisterTorchCallback (CameraManager.TorchCallback callback)

//如果没注册还调用注销,不会产生任何负面效应

相关文章

网友评论

      本文标题:Camera2

      本文链接:https://www.haomeiwen.com/subject/hndzkqtx.html