CameraX

CameraX 是 Android Jetpack 的新增库。利用该库,可以更轻松地向应用添加相机功能。该库提供了很多兼容性修复程序和解决方法,有助于在多台设备上打造一致的开发者体验。

如需了解如何在应用或库中使用 CameraX 库,请参阅 CameraX 概览

上次更新时间 当前稳定版 下一候选版本 Beta 版 Alpha 版
2020 年 1 月 22 日 - - - 1.0.0-alpha09

声明依赖项

要添加 CameraX 的依赖项,您必须将 Google Maven 代码库添加到项目中。有关详情,请阅读 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

    dependencies {
      // CameraX core library using the camera2 implementation
      def camerax_version = "1.0.0-alpha10"
      implementation "androidx.camera:camera-camera2:${camerax_version}"
      // If you want to use the CameraX View class
      implementation "androidx.camera:camera-view:1.0.0-alpha07"
      // If you want to use the CameraX Extensions library
      implementation "androidx.camera:camera-extensions:1.0.0-alpha07"
      // If you want to use the CameraX Lifecycle library
      implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    }
    

Camera-Camera2 和 Camera-Core 版本 1.0.0

Camera-Camera2 版本 1.0.0-alpha09

2020 年 1 月 22 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • 添加了 camera2 互操作路径,用于提取 Camera2 的相机 ID。您可以使用 Camera2CameraInfo.extractCameraId()CameraInfo 提取相机 ID。以下代码示例展示了如何使用此方法:

    Camera camera = provider.bindToLifecycle(...);
        String cameraId =
            Camera2CameraInfo.extractCameraId(camera.getCameraInfo());
        

    Camera2CameraInfo 类需要 ExperimentalCamera2Interop markerClass。

Camera-Core 版本 1.0.0-alpha09

2020 年 1 月 22 日

发布了 androidx.camera:camera-core:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

API 变更

  • SurfaceOrientedMeteringPointFactory 参数 useCaseForSurface 重命名为 useCaseForAspectRatio,并补充了参考文档的内容。
  • 以构造函数 FocusMeteringAction.Builder() 取代 FocusMeteringAction.Builder.from() 方法。
  • 移除了 DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float)。 应用应使用采用 Display 参数的构造函数并传入当前显示的内容。
  • Javadoc 改进了关于 MeteringMode 和 3A 标记的对焦和测光 API,以及对 Display 参数的使用。
  • 补充了 setZoomRatiosetLinearZoom 的参考文档的内容。

问题修复

  • 修复了关闭再打开相机会导致“前提条件”检查失败的问题。
  • 修复了在使用手电筒和缩放 API 时可能会发生的 ConcurrentModificationException
  • 解决了当 mod16 尺寸大小可用时,现在选择的分辨率接近所请求分辨率的问题。
  • 现在,startFocusMeteringcancelFocusMetering API 的行为方式与文档中记述的一样,时机设定正确,并可能会返回错误。
  • 修复了在设备上请求具有设备不支持的剪裁宽高比的特定目标分辨率时出现的问题。现在,会选择具有足够分辨率的非剪裁尺寸(如果有)来限制原始请求。

Camera-Camera2 版本 1.0.0-alpha08

2019 年 12 月 18 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

已知问题

  • 在使用 Camera2 互操作时,并非所有 Camera2 捕获请求选项都可用。如果不支持请求的选项,会话将无法启动,并可能会出现如下错误:09-09 14:04:13.643 10117 26020 26036 E AndroidRuntime: java.lang.IllegalArgumentException: Unsupported session configuration combination

问题修复

  • 修复了旋转或切换 API 级别 21 和 22 的相机后出现黑屏预览的问题。

API 变更

  • 实验性变更:添加了 camera2 互操作路径,以用于提取相机 ID。

Camera-Core 版本 1.0.0-alpha08

2019 年 12 月 18 日

发布了 androidx.camera:camera-core:1.0.0-alpha08版本 1.0.0-alpha08 中包含这些提交内容

已知问题

  • 使用 PreviewViewCameraView 的应用的预览宽高比可能有误。在某些 FULL 设备(例如 Pixel2)上暂停或恢复操作后,会发生这种情况。

问题修复

  • 更新了 FocusMeteringActionCameraControl 的文档。
  • enableTorch()getTorchState() 实现了 TorchControl

API 变更

  • 隐藏了 IntDef 并从 IntDef 定义中移除了 IntDef 常量。
  • rotationDegrees 从类 OnImageCaptureCallback 移到了 ImageInfo 中。
  • rotationDegrees 从类 Analyzer 移到了 ImageInfo 中。

Camera-Camera2 版本 1.0.0-alpha07

2019 年 12 月 4 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha07camera-camera2 的版本 1.0.0-alpha07 中包含这些提交内容

  • Camera2Config 现在可用于为 CameraX 初始化和配置基于 Camera2 的实现。如需详细了解如何将此方法用于初始化,请参阅版本说明中的 camera-core 部分
  • 就功能而言,现在已将 camera2 互操作标记为实验性,并已将其移至单独的软件包 androidx.camera.camera2.interop.

Camera-Core 版本 1.0.0-alpha07

2019 年 12 月 4 日

发布了 androidx.camera:camera-core:1.0.0-alpha07camera-core 的版本 1.0.0-alpha07 中包含这些提交内容

请注意,我们在准备 Beta 版时,对此 Alpha 版本进行了一些重大更改。请您查看这些更改,并在 CameraX Google 网上论坛上分享您的反馈意见。对于在 Play 商店上的应用中使用 CameraX 的开发者,建议您等到正式 Beta 版推出后再升级应用中的库。

API 变更

  • 重要提示:CameraX 初始化已更改。应用应实现 CameraXConfig.Provider,并使用 androidx.camera.camera2 提供的默认 Camera2Config。典型用法如下:

    import androidx.camera.camera2.Camera2Config
        import androidx.camera.core.CameraXConfig
    
        public class MyCameraXApplication : Application(),  CameraXConfig.Provider {
            override fun getCameraXConfig(): CameraXConfig {
                    return Camera2Config.defaultConfig(this)
            }
        }
        
  • 已移除 CameraX 类。现在,可以通过 ProcessCameraProvider 使用之前由 CameraX 类调用提供的 bindToLifecycle()unbind()unbindAll()isBound()hasCamera()

  • 可使用静态方法 ProcessCameraProvider.getInstance() 异步获取每个进程的 ProcessCameraProvider 实例,该方法会返回 ListenableFuture,从而在完成时提供 ProcessCameraProvider。下面在 onCreate() 中展示它的典型用法。您可以在 Activity 生命周期的后期调用 getInstance(),以便将初始化延迟时间推迟到更晚的时间(例如,当用户操作打开相机界面时)。

    import androidx.camera.lifecycle.ProcessCameraProvider
        import com.google.common.util.concurrent.ListenableFuture
    
        class MainActivity : AppCompatActivity() {
           private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
           override fun onCreate(savedInstanceState: Bundle?) {
               cameraProviderFuture = ProcessCameraProvider.getInstance(this);
          }
        
  • 您可以在 getInstance() 返回的 ListenableFuture 中添加监听器。这样可以确保能够从 Future 检索相机提供器,而不会阻塞 Future.get()

    cameraProviderFuture.addListener(Runnable {
          val cameraProvider = cameraProviderFuture.get()
          cameraProvider.bindToLifecycle(...)
        }, ContextCompat.getMainExecutor(this))
        
  • 现在会通过相机选择器(而不是根据用例)来选择相机

    val cameraSelector = CameraSelector.Builder().requireLensFacing(LensFacing.BACK).build()
        
  • CameraProvider.bindToLifecycle 指定生命周期所有者、相机选择器和用例,随后这些指定的内容会绑定到指定的生命周期所有者并针对所选的相机运行。

    cameraProvider.bindToLifecycle(this as LifecycleOwner,
               cameraSelector, preview, imageAnalysis)
        
  • 移除了用例的“Config”类。现在会直接构建用例,并在每个用例构建器上设置选项。例如:

    preview = Preview.Builder().setTargetAspectRatio(AspectRatio.RATIO_16_9).build()
        
  • 更新了预览用例,以接受由应用创建和管理的 Surface,从而确保 Android 的最佳运行效果。强烈建议您使用 camera-view 软件包中提供的 PreviewView 视图类。

    preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
        
  • 请参阅有关如何附加由应用管理的 Surface 的说明文档。在这些情况下,应用会管理 Surface 的生命周期。

  • 重要提示ImageAnalysis Analyzer 方法实现必须在使用完收到的图像后对其调用 image.close()。否则,可能会导致无法接收新图像或者相机卡顿(具体取决于 Backpressure 设置)。如需了解详情,请参阅参考文档

  • 现在将 ImageAnalysis ImageReaderMode 改成了 Backpressure 策略 intdef

  • 已将 ImageProxy.getImage() 标记为实验性。应用应对使用情况进行注释,例如通过 @androidx.camera.core.ExperimentalGetImage 进行注释

  • 移除了针对 AnalyzerUIThread 注释要求。

  • 添加了 ImageAnalysis.clearAnalyzer() 函数以用于移除分析器。

  • 已将具有多个方法的监听器重命名为 Callback:

    • ImageCapture.OnImageCapturedListener 现在为 ImageCapture.OnImageCapturedCallback
    • ImageCapture.OnImageSavedListener 现在为 ImageCapture.OnImageSavedCallback
    • VideoCapture.OnVideoSavedListener 现在为 VideoCapture.OnVideoSavedCallback
  • 已将枚举更改为 IntDef

  • 添加了缩放控件:

    • CameraControl.setLinearZoom()
    • CameraControl.setZoomRatio()
    • CameraInfo.getLinearZoom()
    • CameraInfo.getMaxZoomRatio()
    • CameraInfo.getZoomRatio()
  • 添加了 CameraInfo.hasFlashUnit() 以确定是否存在闪光灯/手电筒硬件。

  • 移除了 CameraInfo.isFlashAvailable()。手电筒替代了闪光灯功能。如需了解详细信息,请参阅参考文档

  • get/set/is 访问函数取代了 ImageCapture.Metadata 字段 。

  • startFocusMeteringcancelFocusMetering 现在会返回代表调用的异步操作的 ListenableFutures

  • MeteringPoints 现在充当测光操作的手柄,由工厂生成。应用应使用现有工厂而不是自定义工厂。

修复的问题

  • 修复了在恢复操作后无法拍照的问题(上一次暂停时有拍照操作尚未完成)。
  • 已知问题:CameraControl.enableTorch() 可正常工作,但返回的 ListenableFuture<Void> 始终是当前的 complete(success) future,即使没有闪光灯元件也是如此。未来的版本会将此问题修正为最终行为:如果没有闪光灯元件,enableTorch(true) 会立即失败(不会向 CaptureSession 发送请求),并且 TorchState 将保持关闭状态。
  • 已知问题:startFocusAndMeteringcancelFocusAndMetering 可启动和取消对焦测光,但会返回不代表文档所记述行为的当前 completed (success) future。从 ListenableFuture<FocusMeteringResult> CameraControl.startFocusAndMetering() 返回的 FocusMeteringResult 是虚假结果,isFocusSuccessful() 始终为“false”,这与预期的文档记述行为不同。
  • 已知问题:正在开发用于 PreviewView 触摸事件的测光点工厂。目前,连接自定义托管 Surface 的应用可以使用现有的测光点工厂,在其他情况下则无法将触摸对焦功能用于 PreviewView

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha06

2019 年 10 月 9 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha06androidx.camera:camera-core:1.0.0-alpha06。前者是 camera-camera2:1.0.0-alpha06 中包含的提交内容,后者是 camera-core:1.0.0-alpha06 中包含的提交内容

新功能

宽高比设置方面的变更:

  • 添加了 setTargetAspectRatioMode() 并接受枚举参数。这表示应用会使用 RATIO_4_3RATIO_16_9 选项(而不是任意宽高比)来设置宽高比模式。这进一步反映了一个事实,即相机仅提供特定的宽高比,而不是任意宽高比。
    • 目前,唯一可用的宽高比为 16:9 和 4:3。1:1 的宽高比只有某些设备上的相机可以支持,而且只能在限定的分辨率下使用。设计 1:1 界面或处理选项的应用应使用更灵活的 16:9 或 4:3 选项,并剪裁显示画面或处理子区域。
    • 这些宽高比旨在最大限度地利用传感器区域。
  • getTargetAspectRatio() 添加到了用例配置 API 中,返回用例输出的目标宽高比。
  • 方法 setTargetAspectRatio(Rational aspectRatio) 已针对 ImageCapture 更改为 setTargetAspectRatioCustom(Rational aspectRatio)。设置后,ImageCapture 输出会被剪裁成相应的宽高比。

执行器 API

  • 以下函数接受执行器参数,该参数允许应用控制用于运行函数的执行器。
    • Preview.setOnPreviewOutputUpdateListener() API。如果该函数没有执行器,它将在主线程上执行。
    • Preview.setOnPreviewOutputUpdateListener
    • FocusMeteringAction.Builder.setAutoFocusCallback
    • ImageAnalysis.setAnalyzer
    • ImageCapture.takePicture
    • CameraView.takePicture
    • CameraView.startRecording
    • VideoCapture.startRecording

添加了 CameraInfo,并检查了闪光灯可用情况和传感器旋转 API

  • 添加了 CameraInfogetCameraInfo 方法,以允许应用检查是否有朝向 CameraInfo 的镜头以及相机上是否有闪光灯。例如:

    try {
            CameraInfo cameraInfo = CameraX.getCameraInfo(currentCameraLensFacing);
            LiveData<Boolean> isFlashAvailable = cameraInfo.isFlashAvailable();
            flashToggle.setVisibility(isFlashAvailable.getValue() ? View.VISIBLE : View.INVISIBLE);
        } catch (CameraInfoUnavailableException e) {
            Log.w(TAG, "Cannot get flash available information", e);
            flashToggle.setVisibility(View.VISIBLE);
        }
        
  • 添加了 CameraInfo.getSensorRotationDegrees()。它提供相对于设备自然屏幕方向的相机传感器方向,或者为了方便起见,提供相对于 Surface 旋转所述方向(即相对于自然屏幕方向的方向)的相机传感器方向。

API 变更和问题修复

  • 宽高比:对于每个用例,应用应仅调用 setTargetResolution()setTargetAspectRatio() 中的一个。在同一构建器上同时调用两者会返回错误。
    • 通常,我们建议根据应用的界面设计来使用 setTargetAspectRatio()。具体的分辨率取决于用例。例如,预览图像接近于屏幕的分辨率,而图像捕获会提供高分辨率的静态图像。如需了解详情,请参阅自动分辨率表格
    • 对于更具体的情况,例如需要最小分辨率(以减少运算量)或最大分辨率(以处理细节)时,请使用 setTargetResolution()
  • 执行器 API:从用例配置 API 中删除了 setCallbackHandler() 调用。相反,应用可以将执行器设置为各种其他设置回调的 API 中的参数。
  • 更新了各种函数的 null 注释。
  • 修复了打开相机时导致抛出 java.lang.IllegalStateException at Camera$StateCallback.onError 的问题。
  • 修复了以下问题:当应用请求较大或默认分辨率时选择的分辨率太小(低于 640x480),导致预览图像非常模糊或出现块状像素。专门需要较小分辨率的应用可明确请求这些分辨率。
  • 修复了从启动另一相机应用的 Intent 返回后相机显示黑屏(无法启动相机)的问题。
  • 修复了反复启动或停止应用时抛出以下错误的问题;java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!
  • 修复了停用 ImageAnalysis 时发生的以下错误:java.lang.IllegalStateException: maxImages (4) has already been acquired, call #close before acquiring more.
  • 添加了针对相机断开流程的其他测试。
  • 提高了测试系统在运行等效性相机测试时的稳健性。

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha05

2019 年 9 月 5 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha05androidx.camera:camera-core:1.0.0-alpha05。前者是 camera-camera2:1.0.0-alpha05 中包含的提交内容,后者是 camera-core:1.0.0-alpha05 中包含的提交内容

  • API 变更:重命名了用例错误变量:

    • ImageCapture.UseCaseError 重命名为 ImageCapture.ImageCaptureError
    • VideoCapture.UseCaseError 重命名为 VideoCapture.VideoCaptureError
  • 添加了带“点按即可对焦”功能 API 的 CameraControl API

    • 添加了 API,以针对由镜头朝向选择的相机从 CameraX 获取 CameraControl

      CameraX.getCameraControl(LensFacing lensFacing)

    • 添加了 MeteringPointFactoryMeteringPointMeteringModeFocusMeteringAction 来运行“点按即可对焦”功能:

      MeteringPointFactory factory = new SensorOrientedMeteringPointFactory(width, height);
          MeteringPoint point = factory.createPoint(x, y);
          FocusMeteringAction action = FocusMeteringAction.Builder.from(point,
                                           MeteringMode.AF_ONLY)
              .addPoint(point2, MeteringMode.AE_ONLY) // could have many
              .setAutoFocusCallback(new OnAutoFocusListener(){
                  public void onFocusCompleted(boolean isSuccess) {
                  }
              })
              // auto calling cancelFocusAndMetering in 5 sec.
              .setAutoCancelDuration(5, TimeUnit.Second)
              .build();
          
    • 添加了 API 用于支持 CameraControl 启动和取消对焦测光:

      getCameraControl(lensFacing).startFocusAndMetering(action); getCameraControl(lensFacing).cancelFocusAndMetering();

    • 添加了用于测光点工厂的 API,这些 API 可根据 View 类协助将点按坐标转换为传感器坐标:

      MeteringPointFactory factory = new TextureViewMeteringPointFactory(textureView); MeteringPointFactory factory = new DisplayOrientedMeteringPointFactory(context, lensFacing, viewWidth, viewHeight);

  • 强制在主(界面)线程上调用以下方法;如果未调用,则抛出 IllegalStateException。将来的版本将允许在其他线程上使用并确保执行序列化。

    • CameraX.bindToLifecycle()
    • CameraX.unbind()
    • CameraX.unbindAll()
    • ImageAnalysis.setAnalyzer()
    • ImageAnalysis.getAnalyzer()
    • ImageAnalysis.removeAnalyzer()
    • Preview.removePreviewOutputListener()
    • Preview.getOnPreviewOutputUpdateListener()
    • Preview.setOnPreviewOutputUpdateListener()
  • 现在,各种配置设置均接受 null 参数,并且相应的 getter 可能会返回 null。

  • 修复了在不支持 AF/AE/AWB 设置的模拟器上进行测试时出现的问题。

  • 修复了分析图像时旋转出现的崩溃错误。

  • 修复了在旋转或在前后相机之间切换后,预览在开始时显示为黑色(无相机数据)的错误。

  • 移除了针对多个并发图像分析用例进行的测试。为确保兼容性,应用应仅附加一个图像分析用例。

  • 在相机测试套件 (WIP) 中添加了针对假相机的初始 robolectric 测试。

  • 移除了 Camera2Inititalizer 测试,因为其覆盖范围不明确/有误导性。

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha04

2019 年 8 月 7 日

发布了 androidx.camera:camera-camera2:1.0.0-alpha04androidx.camera:camera-core:1.0.0-alpha04。点击此处可查看此版本中包含的提交内容。

新功能

宽高比和分辨率选择方面的变更

CameraX 的目标是成功初始化相机会话。这意味着,CameraX 为了能够启动捕获会话(这是它的首要目标),会根据设备显示能力在分辨率/宽高比上做出让步,因此可能无法完全按照请求的方式显示。可能原因如下:

  • 设备不支持请求的分辨率
  • 兼容性问题,例如在旧版设备上,必须使用某些分辨率才能正确运行
  • 在某些设备上,某些格式仅在某些宽高比下可用
  • 对于 JPEG 或视频编码,首选“最近的 mod16”。请参阅 CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP

尽管 CameraX 会创建并管理会话,但您应始终在代码中检查用例输出所返回的图像大小,并进行相应调整。

设置分辨率和宽高比方面发生了一些变更,旨在使 API 更清楚明白:

  • 现在,如果未设置宽高比,则预览用例将采用默认的 4:3 宽高比。
  • 当 CameraX 根据设备显示能力在内部考虑对所请求的分辨率和宽高比进行更改时,它首先会尝试保持相同的宽高比(由任意 setTargetAspectRatiosetTargetResolution 调用确定)
  • 分辨率的“最近的 mod16”版本被视为相同的宽高比。

ImageAnalysis 非阻塞模式

  • 现在,ImageReaderMode.ACQUIRE_LATEST_IMAGE 的行为是非阻塞行为。它会获取队列中的最新图像,但连续舍弃未使用的图像,以免相机管道发生阻塞。
  • 分析器可以无限期保存单个图像,而不会阻塞管道。
  • 如果应用提供了一个执行器,该执行器继而发生阻塞,则 ImageAnalysis 用例会发生阻塞。
  • 内部设置的默认执行器会表现为非阻塞执行器。

问题修复

  • 修复了在没有自动聚焦、自动曝光和自动白平衡的设备上捕获图像时等待 3A 收敛的超时问题
  • 修复了使用 ImageCapture 快速拍照时出现的问题。修复了错误:java.lang.IllegalStateException: maxImages (2) has already been acquired
  • 修复了未针对用例调用 setLensFacing 而导致 java.lang.IllegalArgumentException: Unable to get camera ID for use case 的问题。
  • 修复了旧版设备需要特定宽高比作为最大 JPEG 分辨率的问题
  • 修复了打开相机时应用进入后台运行的问题
  • 修复了 API <25 上的问题,移除了错误 checkAndUpdateEglState: invalid current EGLDisplay
  • 修复了在启用和启动扩展后解除绑定预览时出现的问题
  • camera-view 和 camera-extensions 的 Build 工件现作为 Alpha 版本发布

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha03

2019 年 7 月 2 日

发布了 androidx.camera:camera-core:1.0.0-alpha03androidx.camera:camera-camera2:1.0.0-alpha03。点击此处可查看此版本中包含的提交内容。

API 变更

  • 在 setTarget 配置调用中添加了针对“target”的 Javadoc 说明

Camera-Core

  • 修复了快速打开/关闭或绑定/取消绑定时未配置的输入/输出 Surface 崩溃问题
  • 转向新的 Futures 实现
  • 测试修复程序以进行更可靠的测试
  • Core 集成测试现在可显示照片的拍摄时间
  • 为执行器开发了内部兼容性类
  • 定时测试应用捕获图像会等待上一步完成,这提高了稳定性

扩展功能

  • 添加了版本编号检查
  • 扩大了测试范围 - 扩展事件回调
  • 改进了内部对应的图像和元数据
  • 修复了测试应用中的模式切换问题

Camera-Camera2 和 Camera-Core 版本 1.0.0-alpha02

2019 年 6 月 5 日

发布了 androidx.camera:camera-core:1.0.0-alpha02androidx.camera:camera-camera2:1.0.0-alpha02。点击此处可查看此版本中包含的提交内容。

问题修复

  • 修复了使用模拟器时被零除的问题
  • 修复了在快速拍照的同时快速解除绑定并重新绑定用例时在某些设备上发生的 NullPointerException/Surface Abandoned 错误。
  • 修复了内部问题,以确保捕获请求更新对所有 Surface 带来一致的影响
  • 改进了在新应用实例中重启用例时的稳定性
  • 更改了内部体系结构,以便为支持 API 中的执行器做好准备
  • 扩充了有关 CameraX 类和生命周期管理的 Javadoc 说明
  • 为 Antelope 性能测试应用添加了插桩测试
  • 应用 Proguard 配置中不再需要“-keepattributes 签名”

Camera-Camera2 和 Camera-Core 1.0.0-alpha01

2019 年 5 月 7 日

发布了 androidx.camera:camera-core:1.0.0-alpha01androidx.camera:camera-camera2:1.0.0-alpha01。点击此处可查看此版本中包含的提交内容。

Camera-Lifecycle 版本 1.0.0

Camera-Lifecycle 版本 1.0.0-alpha03

2020 年 1 月 22 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-Lifecycle 版本 1.0.0-alpha02

2019 年 12 月 18 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

依赖项变更

  • 已更新为使用 androidx.camera:camera-core:1.0.0-alpha08

Camera-Lifecycle 版本 1.0.0-alpha01

2019 年 12 月 4 日

发布了 androidx.camera:camera-lifecycle:1.0.0-alpha01camera-lifecycle 的版本 1.0.0-alpha01 中包含这些提交内容

API 说明

  • 添加了 camera-lifecycle 工件,提供了 LifeCycleCameraProvider 接口以及一个名为 ProcessCameraProvider 的实现,该实现可提供先前核心中的 CameraX 类的许多功能,并可通过 getInstance() 方法获取。
  • 应用应包含 camera-lifecycle 库以使用 CameraX。
  • 如需了解如何使用 ProcessCameraProvider 对 CameraX 执行初始化,请参阅 camera-core 部分中的说明。

Camera-Extensions 和 Camera-View 版本 1.0.0

Camera-Extensions 版本1.0.0-alpha06

2020 年 1 月 22 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-View 版本 1.0.0-alpha06

2020 年 1 月 22 日

发布了 androidx.camera:camera-view:1.0.0-alpha06版本 1.0.0-alpha06 中包含这些提交内容

更新

  • 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。

Camera-Extensions 版本 1.0.0-alpha05

2019 年 12 月 18 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容

问题修复

  • 已更新为与内部 Camera Core API 匹配。

Camera-View 版本 1.0.0-alpha05

2019 年 12 月 18 日

发布了 androidx.camera:camera-view:1.0.0-alpha05版本 1.0.0-alpha05 中包含这些提交内容

已知问题

  • 使用 PreviewView 时,宽高比可能不正确 (b/146215202)。

新功能

  • 实现了一个名为 PreviewView.TextureViewImplementation 的新类,用于将 SurfaceTexture 的生命周期与相机使用的 TextureView Surface 进行同步。

Camera-Extensions 版本 1.0.0-alpha04

2019 年 12 月 4 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha04camera-extensions 的版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • 现在,检查扩展的可用性以及启用扩展需要采用 CameraSelector 作为输入参数。这必须与用于绑定用例的 CameraSelector 相同。

    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
        val builder = ImageCapture.Builder()
        val bokehImageCaptureExtender = BokehImageCaptureExtender.create(builder)
        if (bokehImageCaptureExtender.isExtensionAvailable(cameraSelector)) {
            bokehImageCaptureExtender.enableExtension(cameraSelector)
        }
        val imageCapture = builder.build()
        mCameraProvider?.bindToLifecycle(this, cameraSelector, imageCapture)
        
  • 您必须先初始化扩展,然后才能使用扩展库。

    val availability = ExtensionsManager.init()
        Futures.addCallback<ExtensionsManager.ExtensionsAvailability>(
           availability,
           object : FutureCallback<ExtensionsManager.ExtensionsAvailability> {
               override fun onSuccess(availability: ExtensionsManager.ExtensionsAvailability?) {
                   // Ready to make extensions calls
               }
               override fun onFailure(throwable: Throwable) {
                   // Extensions could not be initialized
               }
           },
           Executors.newSingleThreadExecutor()
        )
        

Camera-View 版本 1.0.0-alpha04

2019 年 12 月 4 日

发布了 androidx.camera:camera-view:1.0.0-alpha04camera-view 的版本 1.0.0-alpha04 中包含这些提交内容

API 变更

  • 提供了一个 PreviewView 类,用于在应用中轻松显示预览用例的输出。
  • 可以在布局中包含 PreviewView

    <androidx.camera.view.PreviewView
          android:id="@+id/preview_view"
          … />
        
  • PreviewView 提供了 PreviewSurfaceProvider 以便于轻松连接预览用例

    preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
        
  • ZoomLevel”现在为“ZoomRatio”(采用 API 命名)

  • 某些方法参数已更改为可以为 null

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha03

2019 年 10 月 9 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha03androidx.camera:camera-view:1.0.0-alpha03。前者是 camera-extensions:1.0.0-alpha03 中包含的提交内容,后者是 camera-view:1.0.0-alpha03 中包含的提交内容

新功能

  • 为扩展程序添加了 Context Initializer。扩展程序版本递增至 1.1.0

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha02

2019 年 9 月 5 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha02androidx.camera:camera-view:1.0.0-alpha02。前者是 camera-extensions:1.0.0-alpha02 中包含的提交内容,后者是 camera-view:1.0.0-alpha02 中包含的提交内容

  • 添加了用于验证 PreviewImageProcessorImpl 是否正确实现了时间戳的测试。
  • 修复了 Nexus 5(API 级别 21)上的 ExtensionTest 测试故障,并确保可正常预览。

Camera-Extensions 和 Camera-View 版本 1.0.0-alpha01

2019 年 8 月 7 日

发布了 androidx.camera:camera-extensions:1.0.0-alpha01androidx.camera:camera-view:1.0.0-alpha01。前者是 camera-extensions:1.0.0-alpha01 中包含的提交内容,后者是 camera-view:1.0.0-alpha01 中包含的提交内容

  • 新增了面向未来相机扩展的库,以便在受支持的设备上实现相应的效果。该库仍在开发中。
  • 新增了 Camera View 类。该库仍在开发中。