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