CameraX

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

下表列出了 androidx.camera 组中的所有工件。

制品 稳定版 候选版 Beta 版 Alpha 版
camera-camera2 1.3.2 - - 1.4.0-alpha04
camera-core 1.3.2 - - 1.4.0-alpha04
相机效果 - - - 1.4.0-alpha04
camera-extensions 1.3.2 - - 1.4.0-alpha04
camera-lifecycle 1.3.2 - - 1.4.0-alpha04
camera-mlkit-vision - - 1.3.0-beta02 1.4.0-alpha04
camera-view 1.3.2 - - 1.4.0-alpha04
相机取景器 - - 1.3.0-beta02 1.4.0-alpha04
camera-video 1.3.2 - - 1.4.0-alpha04
此库的最后更新时间:2024 年 3 月 6 日

设备测试

我们的实验室在很多设备上对 CameraX 进行了测试。如需查看实验室当前所用测试设备的列表,请参阅 CameraX 实验室测试设备

声明依赖项

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

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

Groovy

dependencies {
  // CameraX core library using the camera2 implementation
  def camerax_version = "1.4.0-alpha04"
  // The following line is optional, as the core library is included indirectly by camera-camera2
  implementation "androidx.camera:camera-core:${camerax_version}"
  implementation "androidx.camera:camera-camera2:${camerax_version}"
  // If you want to additionally use the CameraX Lifecycle library
  implementation "androidx.camera:camera-lifecycle:${camerax_version}"
  // If you want to additionally use the CameraX VideoCapture library
  implementation "androidx.camera:camera-video:${camerax_version}"
  // If you want to additionally use the CameraX View class
  implementation "androidx.camera:camera-view:${camerax_version}"
  // If you want to additionally add CameraX ML Kit Vision Integration
  implementation "androidx.camera:camera-mlkit-vision:${camerax_version}"
  // If you want to additionally use the CameraX Extensions library
  implementation "androidx.camera:camera-extensions:${camerax_version}"
}

Kotlin

dependencies {
    // CameraX core library using the camera2 implementation
    val camerax_version = "1.4.0-alpha04"
    // The following line is optional, as the core library is included indirectly by camera-camera2
    implementation("androidx.camera:camera-core:${camerax_version}")
    implementation("androidx.camera:camera-camera2:${camerax_version}")
    // If you want to additionally use the CameraX Lifecycle library
    implementation("androidx.camera:camera-lifecycle:${camerax_version}")
    // If you want to additionally use the CameraX VideoCapture library
    implementation("androidx.camera:camera-video:${camerax_version}")
    // If you want to additionally use the CameraX View class
    implementation("androidx.camera:camera-view:${camerax_version}")
    // If you want to additionally add CameraX ML Kit Vision Integration
    implementation("androidx.camera:camera-mlkit-vision:${camerax_version}")
    // If you want to additionally use the CameraX Extensions library
    implementation("androidx.camera:camera-extensions:${camerax_version}")
}

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 1.4

版本 1.4.0-alpha04

2024 年 1 月 24 日

发布了 androidx.camera:camera-*:1.4.0-alpha04版本 1.4.0-alpha04 中包含这些提交内容

新功能

  • 新工件:camera-effects:一个用于对 CameraX 输出应用实时效果的库,包括 PreviewVideoCapture 和/或 ImageCapture。此工件包含 CameraEffect API 的 OpenGL 实现,可高效操控相机输出。
  • OverlayEffect:适用于使用 Android 的 Canvas API 绘制叠加层。这样,应用就可以在相机输出时应用水印或突出显示检测到的对象。
  • 适用于预览用例的 DynamicRange API:现在可以在预览用例中设置动态范围,与视频用例无关。这样,系统就允许将 HDR 动态范围(例如用于预览的 HLG10)单独使用。CameraInfo 中还提供了新的 API,用于查询每个相机支持的动态范围。

API 变更

  • ScreenFlashUiCompleter 已重命名为 ScreenFlashListener,并将 ScreenFlashUiCompleter#getExpirationTimeMillis 移至 ScreenFlash#applyexpirationTimeMillis 参数。(I13944
  • 添加了新的 API,以允许在 Preview 用例中设置动态范围,以及查询每个相机支持的动态范围。这样一来,HDR 动态范围(例如 HLG10)就可以仅与预览版用例搭配使用,而无需同时绑定 VideoCapture。(If25e3
  • getMirroring() 已重命名为 isMirroring() (I47063)
  • 在 CameraX 中添加了对实时静态拍摄延迟时间估算的支持。借助相机扩展,应用可以使用 API 来估算拍摄所需时间。此估算值会考虑当前环境条件和相机状态,并包括处理多帧拍摄请求所用的时间以及编码已处理的缓冲区(如有必要)的任何其他时间。(I05c3a
  • ScreenFlashUiControl 重命名为 ScreenFlash,将 ScreenFlashUiControl#applyScreenFlashUi 重命名为 ScreenFlash#apply,将 ScreenFlashUiControl#clearScreenFlashUi 重命名为 ScreenFlash#clear,并添加了 getScreenFlashUiApplyTimeoutSeconds 方法,而不是直接提供 SCREEN_FLASH_UI_APPLY_TIMEOUT_SECONDS。(Iccdd0)

bug 修复

  • 修复了启用扩展后会导致 activity 或 fragment 无法释放的内存泄漏问题 (I14215)
  • 修复了应用增大的缩放比例时 getZoomRatio 错误地返回减少的值的问题。(I4aa0db/317543616
  • ImageCapture 解除绑定或相机关闭时,系统会立即调用 ImageCapture#ScreenFlash#clear 事件;此外,还修复了一些因以下情况下的拍摄无法正常完成而导致永远不会调用的 bug。(If99f9)
  • 修复了在 takePicture 请求完成之前停止生命周期时发生的崩溃问题(Idf017b/306202751
  • 修复了在某些设备上启用扩展后相机预览变为黑色的问题 (I1ffd0)
  • 修复了采用 Snapdragon 778G SoC 的设备上视频录制时长不正确的问题。(If6aa7b/316057919

版本 1.4.0-alpha03

2023 年 12 月 13 日

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

新功能

  • 添加了 CameraInfo.mustPlayShutterSound,用于提供是否必须根据区域限制播放快门提示音的信息。(Ifda84)
  • 添加了 OnImageCapturedCallback.onCaptureStartedOnImageSavedCallback.onCaptureStarted,用于在相机开始曝光帧时发出通知。建议在此时间点播放快门提示音或快门动画。(Ic49b3
  • 在 CameraX 中添加了对前置摄像头图像拍摄的 Screen Flash 功能支持。CameraX 将负责框架端 API 处理,并根据需要将时间与应用界面更改进行同步(例如,在应用屏幕颜色/亮度更改后触发 AE 预拍触发器)。应用只需在提供给 CameraX 的 ScreenFlashUiControl 接口中添加其界面端实现。(I8ae84
  • 在 CameraX 中添加了 Screen Flash 功能界面端实现支持。应用将从 PreviewView 或新添加的 ScreenFlashView 获取基本的 ImageCapture.ScreenFlashUiControl 实现,这将添加单色叠加视图,并在屏幕闪烁照片拍摄期间最大限度地提高屏幕亮度。(I1810e

API 变更

  • 支持新的扩展程序功能(查看后和拍摄流程进度):添加了 ImageCapture#getImageCaptureCapabilities() API,供应用查询查看后的功能和拍摄流程进度回调。应用可以使用 ImageCapture.Builder#setPostviewEnabled() 启用博文视图。您可以使用 ImageCapture.Builder#setPostviewResolutionSelector() 选择 postview 大小。调用 takePicture() 时,可以在 OnImageSavedCallbackOnImageCapturedCallback 中实现 onPostviewBitmapAvailableonCaptureProcessProgressed,以获取后视图和处理进度通知(如果支持)。(I5cd88
  • 用于计算从传感器到当前缓冲区的坐标转换的 API,带有一个用于指示 Surface 是否包含相机屏幕方向信息的标志。(I59096)
  • 公开了该 API,以便在预览 UseCase 中查询 PreviewCapabitlity。(Ie5b6c
  • 添加了 API 以支持 VideoCapture 的更多质量。可以将 Recorder.Builder#setVideoCapabilitiesSource(int)VIDEO_CAPABILITIES_SOURCE_CODEC_CAPABILITIES 搭配使用,以创建支持比 VIDEO_CAPABILITIES_SOURCE_CAMCORDER_PROFILE 更多质量的 Recorder 实例。一个常见的用例是,应用会尽可能录制超高清视频,但设备的 CamcorderProfile 不包含超高清设置(即使编解码器能够录制超高清视频)。(Iedbe2b/263961771
  • ImageAnalysis 输出格式 getter/setter 添加到 CameraController。(I9a96cb/308240643

bug 修复

  • Camera 1.3.1 开始:改进了 ProcessCameraProvider#bindToLifecycle() 性能。主要变更是优化确定最适合 UseCases 的尺寸组合的过程。最佳结果因特定的 UseCase 组合和目标设备支持的输出大小数量而异。(I454f2
  • 允许在启用扩展程序的情况下使用 VideoCapture。(I91f32
  • 修复了三星 A71 和 M51 系列设备上拍摄较大尺寸的 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会导致所拍摄图片的文件过大。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I01afcb/288828159
  • 请在 Pixel 上停用 ImageAnalysis 支持,以避免 Pixel 上出现意外返回非空 ImageAnalysis 支持的尺寸的 bug。(I7ec31
  • 修复了启用扩展程序后 CPU 加载和功耗增加的性能问题。(Ibdccb)
  • CameraUseInconsistentTimebaseQuirk 添加了 Snapdragon 480。这修复了 Android 12 中使用此芯片组的设备存在的一个问题,即录制内容中的音频会按设备处于暂停状态的时长进行偏移。(I58010

版本 1.4.0-alpha02

2023 年 10 月 18 日

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

API 变更

  • 将该 API 重命名为 setCameraOpenRetryMaxTimeoutInMillisWhileResuming,并重命名参数。(I72370
  • 添加了 API 以查询设备功能并启用视频/预览防抖功能。(I87544
  • 提供 API 以自定义相机打开重试的最长超时时间。(I0c642
  • 发布了 ProcessCameraProvider.shutdownAsync 作为公共测试 API,以允许在测试套件中使用进程相机提供程序,这些测试套件可能需要在测试之间以不同方式初始化 CameraX。(I9eca7
  • 添加了用于配置视频拍摄动态范围、帧速率和镜像模式的 API。(Ifb8f7)
  • 废弃了 OutputSize,取而代之的是 ResolutionSelectorResolutionSelector 是一种更全面的分辨率选择方式,并且与 camera-core API 一致。(I93abdb/286801438

bug 修复

  • 修复了 Samsung Galaxy S23 Ultra 5G 在后置摄像头上通过 ImageAnalysis 启用“扩展焦外成像”或“美颜”功能时出现的黑色预览问题。(I2e8b1
  • 修复了 Moto E5 Play 上的预览和 VideoCapture 拉伸问题。(73dce2)

版本 1.4.0-alpha01

2023 年 9 月 20 日

发布了 androidx.camera:camera-*:1.4.0-alpha01版本 1.4.0-alpha01 中包含这些提交内容

API 变更

  • 添加了用于在录音时访问音频振幅信息的新 API。(Id4925

bug 修复

  • 请确保按正确的顺序触发初始化和去初始化事件,从而提高扩展程序的稳定性。(Ib3b8e
  • 修复了由于内部添加额外的重复 Surface 而导致超出支持的 Surface 组合的拍摄会话配置失败的问题。(Id718c)
  • 修复了 Vivo S16 设备上拍摄的较大 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会导致所拍摄图片的文件大小较大。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I79505b/299069235
  • 修复了在某些设备上启用某些扩展模式时 ImageAnalysis 无法与 ImageCapture 和预览绑定在一起的问题。当应用通过 ExtensionsManager#isImageAnalysisSupported() 查询 ImageAnalysis 可用性时,修复程序会返回正确的值。(I7d538
  • 更新 JavaDoc 以匹配行为。#setZoomRatio#setLinearZoom#enableTorch 会等待相机准备就绪,而不是立即完成。还添加了有关如何使用 #takePicture API 获得最大 FOV 的信息。(I23588

版本 1.3

版本 1.3.2

2024 年 3 月 6 日

发布了 androidx.camera:camera-*:1.3.2。版本 1.3.2 中包含这些提交内容

bug 修复

  • 修复了三星 A24 设备上的 JPEG 元数据问题。CameraX 现在可准确保存图片,并且 ImageProxy.toBitmap() 函数会返回正确的位图对象。(I8d6ebb/309005680
  • 由于问题,移除了红米 Note 9 Pro 设备上的 9280x6944 分辨率选项。(Ia23da)

版本 1.3.1

2023 年 12 月 13 日

发布了 androidx.camera:camera-*:1.3.1版本 1.3.1 中包含这些提交内容

bug 修复

提升了 ProcessCameraProvider#bindToLifecycle() 性能。主要变更是优化确定最适合 UseCases 的尺寸组合的过程。最佳结果因特定的 UseCase 组合和目标设备支持的输出大小数量而异。(I454f2

以下是一些适用于各种场景的参考结果:

  • 四个 UseCasesPreview + ImageCapture + ImageAnalysis + VideoCapture

    • Google Pixel 7:约 430 毫秒 - 60 毫秒
    • Samsung Galaxy S23 Ultra:约 540 毫秒到 45 毫秒
    • Samsung A53 5G:约 115 毫秒 - 70 毫秒
  • 三个 UseCasesPreview + ImageCapture + ImageAnalysis

    • Google Pixel 7:约 9 到 7 毫秒
    • Samsung Galaxy S23 Ultra:约 6 到 5 毫秒
    • Samsung A53 5G:约 32 毫秒 - 12 毫秒
  • CameraUseInconsistentTimebaseQuirk 添加了 Snapdragon 480。这修复了 Android 12 中使用此芯片组的设备存在的一个问题,即录制内容中的音频会按设备处于暂停状态的时长进行偏移。(I58010

版本 1.3.0

2023 年 10 月 18 日

发布了 androidx.camera:camera-*:1.3.0版本 1.3.0 中包含这些提交内容

自 1.2.0 以来的重要变更

版本 1.3.0-rc02

2023 年 9 月 20 日

发布了 androidx.camera:camera-*:1.3.0-rc02版本 1.3.0-rc02 中包含这些提交内容

bug 修复

  • 请确保按正确的顺序触发初始化和去初始化事件,从而提高扩展程序的稳定性。这修复了切换扩展程序模式或切换摄像头时出现的一些黑色预览问题。(Iddaac
  • 修复了在某些设备上启用某些扩展模式时 ImageAnalysis 无法与 ImageCapture 和预览绑定在一起的问题。当应用通过 ExtensionsManager#isImageAnalysisSupported() 查询 ImageAnalysis 可用性时,修复程序会返回正确的值。(I7d538
  • 修复了在小米 Poco X3 NFC 上启用镜像模式时,录制的视频音频和视频不同步的问题。 (I20b4c

版本 1.3.0-rc01

2023 年 8 月 23 日

发布了 androidx.camera:camera-*:1.3.0-rc01版本 1.3.0-rc01 中包含这些提交内容

API 变更

  • 添加了 PendingRecording.asPersistentRecording,以允许在录音机所连接的 VideoCapture 恢复后录音持续进行录制。(I517c6

bug 修复

  • 修复了同时与 VideoCapture 和预览共享数据流时发生的崩溃问题。此外,还修复了旧版设备在启用信息流共享时黑屏的问题。
  • 修复了 Samsung S7(SM-G930T、SM-G930V)系列设备上拍摄较大尺寸的 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会导致所拍摄图片的文件大小较大。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I407b0b/288828159
  • 修复了 Samsung S22(SM-S901B、SM-S901B/DS)和 S22+ (SM-S906B) 系列设备上拍摄较大尺寸的 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。它会导致拍摄的图片在 S22 SM-S901B/DS 设备上具有约 13MB 的大文件。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I73be9b/288828159
  • 修复了 Samsung A5、A52、A70 和 A72 系列设备上拍摄较大尺寸的 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会导致所拍摄图像的文件大小过大(例如,约 32MB 甚至 96MB)。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I97c4db/288828159
  • 修复了在启用扩展程序的情况下拍照时出现的原生代码崩溃问题 (I698f5)

版本 1.3.0-beta02

2023 年 7 月 26 日

发布了 androidx.camera:camera-*:1.3.0-beta02版本 1.3.0-beta02 中包含这些提交内容

bug 修复

  • 在 Pixel 4 和 Pixel 5 变体中使用手电筒作为闪光灯,以提高弱光环境下的拍摄质量(I56ff5b/280221967
  • 修复了三星 A5 (2017) 系列设备上拍摄较大尺寸的 JPEG 图片的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会使所拍摄图片的文件大小约为 32 MB。这些冗余 0 的填充数据将被移除,以使拍摄的图片具有正常的图片文件大小。(I29837b/288828159
  • 修复了 CaptureFailedRetryQuirk 中所述的问题设备在捕获失败时无法正确触发重试的问题。(I7b589

版本 1.3.0-beta01

2023 年 6 月 21 日

发布了 androidx.camera:camera-*:1.3.0-beta01版本 1.3.0-beta01 中包含这些提交内容

API 变更

  • 已将 ResolutionSelector.Builder#setHighResolutionEnabledFlag(int) 函数名称重命名为 setAllowedResolutionMode,并将 ResolutionSelector#HIGH_RESOLUTION_FLAG_OFF/ON 常量重命名为 PREFER_CAPTURE_RATE_OVER_HIGHER_RESOLUTION/PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE。(If84e8)
  • 移除了已废弃的 API ImageAnalysis.setTargetRotationDegrees(int)ImageCapture.setTargetRotationDegrees(int)VideoCapture.setTargetRotationDegrees(int)。(Id8e77
  • DynamicRange 类表示图片的动态范围。这可用于选择高动态范围格式作为 VideoCaptureVideoCapture.Builder#setDynamicRange() 的输出。(Ib0377
  • ExtensionsManager 添加了 isImageAnalysisSupported API,可让应用在启用扩展程序后确定 ImageAnalysis 用例是否可以与预览和 ImageCapture 一起绑定。(I1bc63
  • Recorder 获取的新 VideoCapabilities 类可用于查询设备上视频录制支持的动态范围和画质。QualitySelectorgetSupportedQualities()isQualitySupported() 方法即将被弃用。请改用 VideoCapabilitiesgetSupportedQualities()isQualitySupported() 方法。(I04014
  • CameraController#setVideoCaptureTargetQuality() 已重命名为 setVideoCaptureQualitySelector 并采用 QualitySelector 参数,这可让您更灵活地设置视频画质。CameraController#getVideoCaptureTargetQuality() 已相应地更改为 getVideoCaptureQualitySelector。(I520ed
  • 移除了视频功能的实验性注释。视频功能现已稳定。(I1a113

bug 修复

  • 在三星 SM-A320 型号上,使用手电筒作为闪光灯,以提高速度和在弱光条件下拍摄的图像质量。(I6a022b/286190938
  • ImageProxy.toBitmap() 添加了 ImageFormat.JPEG 格式支持。如果 JPEG 字节数组无法解码,系统会抛出 UnsupportedOperationException。(I81958b/282057603

版本 1.3.0-alpha07

2023 年 5 月 24 日

发布了 androidx.camera:camera-*:1.3.0-alpha07版本 1.3.0-alpha07 中包含这些提交内容

新功能

  • 除了设备默认设置之外,新的 VideoCapture.Builder# setTargetFrameRate(Range) API 还支持以其他帧速率捕获视频录制。您可以通过新的 CameraInfo#getSupportedFrameRates() API 查询录制内容的可用帧速率。

API 变更

  • ResolutionSelector#HIGH_RESOLUTION_FLAG_OFF/ON 常量重命名为 ALLOWED_RESOLUTIONS_NORMAL/SLOW,并将构建器 setHighResolutionEnabledFlag 函数名称重命名为 setAllowedResolutionMode。(Iae817
  • CameraInfo#getSupportedFrameRateRanges() 现在会返回 Set 而不是 List,以更好地表示范围是无序的。(I02f43
  • CameraEffect 添加了错误监听器,以处理不可恢复的错误 (Ice471)
  • ResolutionInfo 中添加了公共构造函数,以提高可测试性 (If6d1c)
  • 提供了 API UseCase.snapToSurfaceRotation(int),以取代 setTargetRotationDegrees 的使用并废弃 API ImageAnalysis.setTargetRotationDegrees(int)ImageCapture.setTargetRotationDegrees(int)VideoCapture.setTargetRotationDegrees(int)。(Ia9010
  • 添加了新的 API Preview#getTargetFrameRatePreview.Builder#setTargetFrameRate,以便能够设置和检索预览用例的目标帧速率 (If4f22)
  • 现在,当 Recording 对象因垃圾回收而停止时,VideoRecordEvent.Finalize 将完成,并显示错误代码 ERROR_RECORDING_GARBAGE_COLLECTED。(Iba974

bug 修复

  • 修复了当 StreamConfigurationMapCompat 中的缓存输出大小为 null 时的 NullPointerException。(Idf124b/282025204
  • 修复了 Preview.setSurfaceProvider(null) 不会在扩展程序中暂停预览的问题 (Ia903e)
  • 修复了绑定 VideoCapture 时在相机打开期间抛出 ConcurrentModificationException 的问题。(Ic8ac4)

版本 1.3.0-alpha06

2023 年 4 月 19 日

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

新功能

  • 并发摄像头是 Android 11 中引入的一项新功能,支持并发流式传输摄像头设备,例如,可让设备同时运行前置摄像头和后置摄像头。 CameraX 目前仅支持双并发摄像头,允许两个摄像头同时操作,每个摄像头最多绑定两个 {@link UseCase}。最大分辨率为 720p 或 1440p。如需了解详情,请参阅以下链接:CameraManager#getConcurrentCameraIds()
  • 引入了新的 ResolutionSelector API,其中包含以下功能:
    • 应用可以指定宽高比和分辨率策略,以根据需要选择最佳分辨率。
    • 所有尺寸和宽高比参数均在摄像头设备传感器的坐标中表示。
    • 应用可以实现自定义分辨率滤镜,以便按所需顺序排列支持的尺寸。
    • 应用还可以启用高分辨率拍摄功能,以获取更高分辨率的图像。但请注意,使用高分辨率可能会延长拍摄时间。
    • 添加了 VideoCapture 镜像 API。默认情况下,VideoCapture 录制的视频不会进行镜像。不过,默认情况下,摄像头预览画面会镜像到前置摄像头。VideoCapture 镜像 API 可让您在使用前置摄像头时与相机预览对齐。有三个 MirrorModeOFFONON_FRONT_ONLY。为了与相机预览对齐,建议使用 ON_FRONT_ONLY,这意味着后置摄像头未启用镜像,但前置摄像头启用了镜像。

API 变更

  • 公开了新的 ResolutionSelector API。应用可以使用回退规则或自定义分辨率过滤器指定宽高比和分辨率策略,以获得所需的结果。应用可以指定一个标志来启用高分辨率拍摄。这将允许 CameraX 在拍摄照片或视频时选择更高的分辨率。但请注意,使用高分辨率可能会延长拍摄时间。(Ibed95
  • 现在,可以通过 CameraInfo#getSupportedFrameRateRanges() 查询 AE 算法支持的 FPS 范围。(Iaa67f
  • 将所有帧速率方法的名称合并为“FrameRate”。更正了 VideoCapture#getTargetFrameRate() 中的 javadoc 错误 (I83304)
  • 废弃了旧版 setTargetAspectRatiosetTargetResolution API。请改用新的 ResolutionSelector API。(I542c3
  • 添加了用于并发双摄像头的公共 API,包括:
    1. List<List<CameraInfo>> getAvailableConcurrentCameraInfos()
    2. ConcurrentCamera bindToLifecycle(@NonNull ConcurrentCameraConfig concurrentCameraConfig)
    3. boolean isConcurrentCameraModeOn()ConcurrentCameraConfigSingleCameraConfigConcurrentCamera (Iab1c1)
  • ImageProcessor.Response#getOutputImage 设为 NonNull (Ib9c60)
  • 添加了 VideoCapture 镜像 API,包括 VideoCapture.Builder.setMirrorMode(int)VideoCapture.getMirrorMode()。对于要求视频录制与常见相机预览行为(即,后置摄像头预览未镜像,但前置摄像头预览被镜像)的应用来说,这些 API 非常有用。(I713b6b/194634656
  • VideoCapture.Builder 中添加了 setTargetFrameRate() API,并在 VideoCapture 中添加了 getTargetFramerate() API (I109d4)
  • 使 SurfaceOutput 扩展 Closable,并隐藏 SurfaceOutput.Event 的公共构造函数。(I60ea8
  • 添加了 Recording.mute,用于动态地将正在处理的录音静音或取消静音。当正在处理的录音明确设为静音时,RecordingStats 将包含 AudioStats.AUDIO_STATE_MUTED。(Ie17fc)
  • #setEffects() 参数变为了非 null 参数。添加了用于清除效果的 #clearEffects() API。应用应调用 #clearEffects() 来移除效果。(I4b4d9
  • ViewfinderSurfaceRequest.Builder 添加了第二个构造函数,以接受复制构造函数的构建器 (I621a7)

bug 修复

  • 修复了调用 Extensions API 的应用在关闭相机时可能会崩溃的问题 (Ib27e5)
  • 修复了 VideoCapture 在某些设备上无法使用前置摄像头的问题。例如,在 Samsung Galaxy S23 和 Xiaomi 2107113SG 上。(Ibec7eb/270656244
  • 修复了以下问题:在 Android 10 或更高版本中,使用外部存储公共文件夹中的“文件”拍照始终会失败。请注意,在 Android 10 中,使用外部存储公共文件夹中的“文件”拍照也需要在应用标记中将 requestLegacyExternalStorage 设置为 true。(I11b2c
  • 修复了 DefaultSurfaceProcessor 中的 RejectedExecutionException 崩溃问题。绑定 VideoCapture 且 activity 暂停时,可能会发生崩溃。(Idb46ab/273713906

版本 1.3.0-alpha05

2023 年 3 月 22 日

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

API 变更

  • 添加了 VideoCapture 旋转 API,包括 VideoCapture.Builder.setTargetRotation(int)VideoCapture.setTargetRotation(int)VideoCapture.setTargetRotationDegrees(int)VideoCapture.getTargetRotation()。这些 API 对于锁定设备屏幕方向的应用非常有用。还添加了 ImageCapture.setTargetRotationDegrees(int)ImageAnalysis.setTargetRotationDegrees(int)。(Id3ffeb/205242781
  • 允许 VIDEO_CAPTUREPREVIEW|VIDEO_CAPTURE 作为效果目标。以 VIDEO_CAPTURE 为目标的效果将应用于 VideoCapture 用例;以 PREVIEW|VIDEO_CAPTURE 为目标的效果将在复制到预览和 VideoCapture 流之前应用于共享流。(Iee6f3

bug 修复

  • Camera 1.2.2 开始:修复了在某些设备(例如 Pixel)上启用 ProGuard 时 CameraX 扩展无法正常工作的问题 (I90aa2)
  • 修复了以下 PreviewView bug:如果应用自行处理屏幕方向,预览可能会在旋转时失真。这种情况仅发生在某些设备上。Pixel a4、Pixel 5 和 Pixel 6a 上可重现此问题。(I14340b/223488673

版本 1.3.0-alpha04

2023 年 2 月 22 日

发布了 androidx.camera:camera-*:1.3.0-alpha04版本 1.3.0-alpha04 中包含这些提交内容

新功能

一项新功能,通过将一个数据流共享到多个用例来支持以前不受支持的 Surface 组合。

  • 以前,在相机硬件级别 FULL 及更低级别上绑定“Preview、VideoCapture、ImageAnalysis”或在硬件级别 LEGACY 上绑定“Preview、VideoCapture、ImageCapture”时,CameraX 会抛出 IllegalArgumentException
  • 新行为是绑定正常运行而不会抛出异常。不过,CameraX 会使用 OpenGL 将共享的视频流复制到 Preview 和 VideoCapture。
  • 作为缓冲区副本的代价,应用可能会出现延迟时间和功耗增加的情况。

API 变更

  • 添加了将 ImageProxy 转换为 Bitmap 的 API。支持的 ImageProxy 格式为 ImageFormat.YUV_420_888PixelFormat.RGBA_8888。如果格式无效,系统会抛出 IllegalArgumentException。(Ic7110)
  • 添加了 CoroutineCameraViewfinder,以支持使用 Kotlin 中的挂起函数配置取景器。(I657bc)
  • ViewfinderSurfaceRequest 添加了新的公共构造函数。当用户无法提供 CameraCharacteristics 时,该构造函数带来了灵活性。(Ie6549)

bug 修复

  • 修复了在某些三星设备上过快暂停/恢复应用时发生的扩展崩溃问题 (Iaca26)

版本 1.3.0-alpha03

2023 年 1 月 25 日

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

API 变更

  • 添加了 CameraInfo.getIntrinsicZoomRatio,用于提供相对于默认摄像头的视角信息。(Ib300c)
  • 添加了 CameraInfo.getLensFacing,用于提供镜头朝向信息。添加了 CameraSelector#LENS_FACING_EXTERNAL 作为实验性功能,用于选择外接摄像头。(Icaf3e)
  • CameraController 添加了 #setEffect(),以允许为相机输出添加效果。(I1d21f)
  • SurfaceRequest 添加了 invalidate() 方法。Surface 提供程序可在先前提供的 Surface 不再有效时发送通知。(Idc649)
  • 添加了 ImageProcessor API。此接口用于将后处理效果注入 ImageCapture 流水线。(I575c6)
  • 添加了 API Recorder.Builder.setAspectRatio(),该 API 可与 QualitySelector 结合使用以支持更多视频分辨率。(I8a082)
  • 添加了 Recorder.Builder#setTargetVideoEncodingBitRate,用于设置目标视频编码 BitRateRecorder#getTargetVideoEncodingBitRate 以获取目标视频编码比特率。(I5984d)

bug 修复

  • 修复了没有闪光灯元件以及闪光灯模式开启时 ImageCapture 失败的问题。(I9e8b4b/263391112
  • 修复了在某些搭载 Android 12 的三星设备上写入 Exif 位置数据时出现的 JPEG 图片损坏问题。(Ib7086b/263747161b/263289024
  • 如果在相机初始化完成之前设置手电筒/缩放功能(例如调用 CameraController#enableTorch),系统会在初始化完成之后才缓存并提交待处理的操作。(I11e92b/264157663

版本 1.3.0-alpha02

2022 年 12 月 7 日

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

API 变更

  • 添加了一个新 API,用于将后处理效果应用到预览输出。(Ic17d5)
  • OutputOptions.getDurationLimit 重命名为 OutputOptions.getDurationLimitMillis,将 OutputOptions.setDurationLimit 重命名为 OutputOptions.setDurationLimitMillis。(I91f0c)
  • 添加了 AudioConfig 类,用于在录制视频时处理与音频相关的设置。将 @RequiresPermission 注释从 startRecording 函数移至 AudioConfig,以免在不需要音频的情况下产生不必要的权限。(I28755)
  • 移除了在应用新的视频拍摄 API 后不再使用的元数据、OnVideoSavedCallbackOutputFileOptionsOutputFileResults 类。(I38cd8)
  • 应用新的视频拍摄 API。由于 setTargetResolution 不再受支持,getVideoCaptureTargetSizesetVideoCaptureTargetSize 方法被相应地替换为 getVideoCaptureTargetQualitysetVideoCaptureTargetQuality 方法。(I2a1d5)

bug 修复

  • 移除了已废弃的 core.VideoCapture API。(I531e0)
  • 修复了在没有存储权限的情况下拍照时不调用 onError 回调的问题。(I936dbb/244807669
  • 改进了相机扩展的质量和可靠性。由于焦外成像支持、图片拍摄和预览功能无法恢复正常,使用 Camera Extensions v1.1.0 及更早版本的摩托罗拉设备上停用了相机扩展。(Id3ce3)
  • 修复了在旧版设备上通过 ViewPort 剪裁视频时出现原生代码崩溃的问题。(I16b8ab/251357665

版本 1.3.0-alpha01

2022 年 11 月 9 日

发布了 androidx.camera:camera-*:1.3.0-alpha01版本 1.3.0-alpha01 中包含这些提交内容

新功能

  • Camera-viewfinder”已正式发布。Camera-viewfinder 提供了一个可以显示 Camera2 的摄像头画面的基本取景器 widget。如需查看示例,请参阅示例代码

API 变更

  • 添加了 OutputOptions.setDurationLimit 以允许设置视频时长限制。超出指定的时长限制后,录音会自动结束。(I902a0)
  • 添加了视频录音错误状态 AudioStats.AUDIO_STATE_SOURCE_ERROR。当音频来源设置失败或发生一些错误时发送。(I37410)

bug 修复

  • 添加了 quirk,以允许某些有问题的设备在遇到拍摄失败的情况时重新尝试拍摄一次。(Id4795)
  • 修复了 ViewPager2 上的 PreviewView SurfaceView 实现黑屏问题。修复此问题后,如果请求的分辨率未更改,PreviewView 将重复使用其 SurfaceView。(Ib3f27)
  • 支持在使用 ViewPortCameraController API 时进行视频剪裁(所见即所得功能)。(Ifbba8b/201085351
  • 修复了使用前置摄像头拍摄的视频无法在华为 P40 lite 上录制的问题。(I87c57b/250807400

版本 1.2

版本 1.2.3

2023 年 5 月 24 日

发布了 androidx.camera:camera-*:1.2.3版本 1.2.3 中包含这些提交内容

bug 修复

  • 修复了 VideoCapture 在某些设备上无法使用前置摄像头的问题。例如,在 Samsung Galaxy S23 和 Xiaomi 2107113SG 上。(Ibec7eb/270656244

版本 1.2.2

2023 年 3 月 22 日

发布了 androidx.camera:camera-*:1.2.2版本 1.2.2 中包含这些提交内容

bug 修复

  • 修复了在某些设备(如 Pixel)上启用 ProGuard 时 CameraX 扩展无法正常工作的问题 (I90aa2)

版本 1.2.1

2023 年 1 月 25 日

发布了 androidx.camera:camera-*:1.2.1版本 1.2.1 中包含这些提交内容

bug 修复

  • 修复了在某些搭载 Android 12 的三星设备上写入 Exif 位置数据时出现的 JPEG 图片损坏问题。(b/263289024)

版本 1.2.0

2022 年 12 月 7 日

发布了 androidx.camera:camera-*:1.2.0版本 1.2.0 中包含这些提交内容

自 1.1.0 以来的重要变更

  • 添加了新库 camera-mlkit-vision。轻松将 CameraX 与条形码扫描、人脸检测、文本检测等诸多 MLKit 功能集成。添加了 MLKitAnalyzer 作为新 API。
  • 添加了新的实验性 Zero-Shutter Lag API。优化拍摄管道以缩短延迟时间,同时保持良好的图片质量。将拍摄模式设为 CAPTURE_MODE_ZERO_SHUTTER_LAG 时,与其他拍摄模式相比,点击快门按钮与拍摄照片之间的延迟时间预计会降至最低。在不支持 ZERO_SHUTTER_LAG 的设备上,将回退到 CAPTURE_MODE_MINIMIZE_LATENCY
  • 废弃了 android.camera.core.VideoCapture
  • setStreamUseCase() 添加为公共 Camera2Interop API。
  • setOutputImageRotationEnabled 添加了 API 级别要求。
  • ImageAnalysis.Analyzer#getTargetResolutionOverride() 重命名为 ImageAnalysis.Analyzer#getDefaultTargetResolution()
  • 添加了用于在已保存的视频中设置位置元数据的 API。
  • 修复了使用 VideoCapture 以及宽高比为 16:9 的预览用例时帧速率偏低的问题
  • 修复了在某些三星设备上启用焦外成像扩展且用户切换摄像头时发生的黑色预览问题。
  • 修复了 Samsung J7 Prime (SM-G610M) 和 J7 (SM-J710MN) Preview/VideoCapture 在 API 级别 27 设备上的拉伸问题。
  • 取消了在 Samsung Android T 上将前置摄像头的 AF 区域水平翻转的临时解决方法,因为问题已解决

版本 1.2.0-rc01

2022 年 10 月 24 日

发布了 androidx.camera:camera-*:1.2.0-rc01版本 1.2.0-rc01 中包含这些提交内容

API 变更

  • OutputConfiguration 新增了 setStreamUseCase API。用户可以为信息流会话指定信息流用例,以替换 CameraX 用于选择信息流用例的内部逻辑,这样便可根据需要进行优化。(Ib1a95)

bug 修复

  • 修复了 Samsung J7 Prime (SM-G610M) 和 J7 (SM-J710MN) Preview/VideoCapture 在 API 级别 27 设备上的拉伸问题。分辨率 1920x1080 会导致 Preview/VideoCapture 图片出现拉伸。添加了不为预览选择 1920x1080 分辨率或 VideoCapture 的解决方法,以避免图片拉伸问题。(I0e04e)
  • 修复了在某些华为设备上使用 VideoCapture 以及宽高比为 16:9 的预览用例时帧速率偏低的问题。(If8c88b/223643510
  • 修复了未设置预览的 SurfaceProvider 时相机打开失败的问题。修复此问题后,未设置 SurfaceProvider 的预览现在不会配置到相机拍摄会话中。(I99681)

版本 1.2.0-beta02

2022 年 9 月 21 日

发布了 androidx.camera:camera-*:1.2.0-beta02版本 1.2.0-beta02 中包含这些提交内容

API 变更

  • 添加了针对 setOutputImageRotationEnabled 的 API 级别要求(I26e3eb/240993561

bug 修复

  • 取消了在 Samsung Android T 上将前置摄像头的 AF 区域水平翻转的临时解决方法,因为问题已解决。(I05f69)
  • 修复了在某些三星设备上启用 BOKEH 扩展且用户切换摄像头时发生的黑色预览问题。(If6168)

版本 1.2.0-beta01

2022 年 8 月 24 日

发布了 androidx.camera:camera-*:1.2.0-beta01版本 1.2.0-beta01 中包含这些提交内容

新功能

  • 新库 camera-mlkit-vision。轻松将 CameraX 与条形码扫描、人脸检测、文本检测等多种 MLKit 功能集成。请点击此处查看示例代码。
  • 添加了新的实验性 Zero-Shutter Lag API。优化拍摄管道以缩短延迟时间,同时保持良好的图片质量。将拍摄模式设置为 CAPTURE_MODE_ZERO_SHUTTER_LAG 时,与其他拍摄模式相比,点击快门按钮与拍摄照片之间的延迟时间预计会降至最低。在不支持 ZERO_SHUTTER_LAG 的设备上,会回退到 CAPTURE_MODE_MINIMIZE_LATENCY。
  • 使 ImageAnalysis.AnalyzerMLKitAnalyzer 成为了正式 API。
  • 公开了用于在已保存视频中设置位置元数据的 API。
  • 已将 ImageAnalysis.Analyzer#getTargetResolutionOverride() 重命名为 ImageAnalysis.Analyzer#getDefaultTargetResolution()

bug 修复

  • 修复了 Alps k61v1_basic_ref 图片拍摄问题。从 HAL 拍摄的 JPEG 图片包含不正确的 Exif 元数据。Exif 元数据没有 0xffd9 或 0xffda 标记,无法让 ExifInterface 正确解析属性。如需解决此问题,请以 YUV 格式拍摄图片,然后将其压缩为 JPEG 输出图片。(I45abb)

版本 1.2.0-alpha04

2022 年 7 月 27 日

发布了 androidx.camera:camera-*:1.2.0-alpha04版本 1.2.0-alpha04 中包含这些提交内容

API 变更

  • 已将 ImageAnalysis.Analyzer#getTargetResolutionOverride() 重命名为 ImageAnalysis.Analyzer#getDefaultTargetResolution()。该行为也发生了变更,以便该方法返回的值可以被 ImageAnalysis#setTargetResolution() 的值替换。(If1d36)
  • 公开了用于在已保存视频中设置位置元数据的 API。现可通过新的 API androidx.camera.video.OutputOptions.Builder.setLocation(Location) 设置 android.location.Location 对象。(I313a0b/204197544

bug 修复

  • 修复了使用未绑定的预览拍照的问题(Ie70b6b/235119898
  • 修复了在音频来源不可用时试图录制而出现的 Recorder 崩溃问题。(I9f652)

版本 1.2.0-alpha03

2022 年 6 月 29 日

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

API 变更

  • 移除了 ImageAnalysis.AnalyzerMLKitAnalyzer 的实验性注释。(I0ff22)

bug 修复

  • 新增了自动对焦默认超时值 5000 毫秒 - 当 FocusMeteringAction 未取消且 AF 部分在这段时长内未聚焦时,系统会使用 isFocusSuccessful=false 自动完成 AF 部分。(Ibc2e3)
  • 修复了使用未绑定的预览拍照的问题(I1d3a2b/235119898
  • 启用了高级扩展器实现,并将 CameraX 支持扩展程序接口版本更新为 1.2 (I92256)

版本 1.2.0-alpha02

2022 年 6 月 1 日

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

新功能

  • 公开了实验性 CameraX Zero-Shutter Lag API。

API 变更

  • ImageCapture 中添加了新的拍摄模式 CAPTURE_MODE_ZERO_SHUTTER_LAG,并在 CameraInfo 中添加了 isZslSupported 以查询设备功能。CAPTURE_MODE_ZERO_SHUTTER_LAG 模式旨在为即时拍摄提供最短延迟。它基于环形缓冲区进行实现,该缓冲区将在用户按下按钮拍照时缓存中间拍摄结果,以便日后重新处理。如果 {@link VideoCapture} 已绑定,或闪光灯模式未关闭或 OEM 扩展项已开启,那么系统会自动停用此模式。(I9ae74)
  • 添加了 ImageAnalysis.getBackgroundExecutor() 方法 (Icc945)

bug 修复

  • 修复了 ImageCapture takePicture 方法在所报告设备上关闭手电筒的问题。(Ib5eb5b/228272227
  • 修复了在获取 CONTROL_ZOOM_RATIO_RANGE 特性时不处理 AssertionError 的 bug。(/Ia248ab/231701345

版本 1.2.0-alpha01

2022 年 5 月 18 日

发布了 androidx.camera:camera-*:1.2.0-alpha01版本 1.2.0-alpha01 中包含这些提交内容

新功能

  • 发布了新库 camera-mlkit-vision

bug 修复

  • 修复了启用回退策略时 QualitySelector 无法录制超高清视频的问题。如果 VideoCapture 与 FULL 或更高级别的相机设备上的 ImageCapture 和 Preview 绑定,就会出现此问题。QualitySelector 的回退策略会导致 VideoCapture 错误地获得全高清分辨率。实际上,这种用例组合支持超高清分辨率,应该采用这种分辨率。(I0e788b/230651237
  • 修复了 ImageCapture.takePicture() 上的 NullPointerException。(I92366b/230454568b/229766155
  • 修复了 androidx.camera.video.Recorder 的异步暂停行为 (Ia8ce8)

Camera-Camera2、Camera-Core、Camera-Lifecycle 和 Camera-Video 版本 1.1.0

版本 1.1.0

2022 年 6 月 29 日

发布了 androidx.camera:camera-*:1.1.0版本 1.1.0 中包含这些提交内容

自 1.0.0 以来的重要变更

  • 着陆视图、扩展程序和视频拍摄库作为其第一个 RC 版本。从 1.1.0-beta01 开始,所有 CameraX 库都将采用相同的版本号。这有助于开发者更轻松地跟踪版本,并降低大型版本兼容性矩阵的复杂性。
  • 引入了新的公共 API 和功能,包括:
  • 添加官方 camera-video 库以支持视频拍摄用例。
  • 从 YUV 到 RGB 的转换和旋转功能(ImageAnalysis.Builder.setOutputImageRotationEnabledsetOutputImageFormat
  • 支持多窗口模式,具体表现为:在相机被另一应用中断且焦点回归时允许 CameraX 应用恢复相机。
  • 通过修复一些预览问题,确保 CameraX 能够在可折叠设备上正常运行。
  • 添加了将通过 CameraInfo 公开的 CameraState API。
  • 添加了 API ProcessCameraProvider.getAvailableCameraInfos(),以用于直接检索可用相机的相关信息
  • 启用扩展程序后,针对 ImageCapture#OnImageCapturedCallback 输出 JPEG 格式。
  • CameraInfo 中添加了 API isFocusMeteringSupported,以便应用检查当前相机是否支持给定的 FocusMeteringAction
  • 公开了 getResolutionInfo API,以用于提供 Preview、ImageCaptureImageAnalysis 的分辨率信息。
  • 添加了新的 API ImageCapture.Builder#setJpegQuality,以允许在拍照时更改所输出的 JPEG 图片的压缩质量。
  • 向公共 API 添加了 CameraSelector#filter,以用于根据 CameraSelector 过滤 CameraInfos 列表。
  • 添加了 Camera2CameraControl.clearCaptureRequestOptions,以用于清除现有的拍摄请求选项。
  • 添加了一个实验性 API,以用于将 CameraController 与外部图像处理库结合使用。例如 MLKit
  • 添加了实验性 API CameraInfo#getCameraSelector(),此 API 会返回其相机独有的 CameraSelector
  • 将多个实验性 API 升级成了正式的公共 API
  • 将实验性 API 的注释 @Experimental 替换成了 @RequiresOptIn。如需调用实验性 API,请使用 androidx.annotation.OptIn,而非已废弃的 androidx.annotation.experimental.UseExperimental。
  • 将以下实验性 API 升级成了正式 API:CameraXConfig.Builder#setAvailableCamerasLimiter()CameraXConfig.Builder#setMinimumLoggingLevel()CameraXconfig.Builder#setSchedulerHandler()CameraXConfig#getAvailableCamerasLimiter()CameraXConfig#getMinimumLoggingLevel()CameraXConfig#getCameraExecutor()CameraXConfig#getSchedulerHandler()
  • @ExperimentalCameraFilter API
  • 实验性曝光补偿 API。
  • 升级了 camera-core、camera-lifecycle 和 camera-video 的实验性 UseCaseGroup API。添加了用于自定义视口的 ViewPort#getLayoutDirectionViewPort.Builder#setLayoutDirectionViewPort.Builder#setScaleType
  • ExperimentalUseCaseGroupLifecycle 升级成了正式的公共 API。
  • 对现有 API 的更改
  • Renamed MediaStoreOutputOptions.getCollectionMediaStoreOutputOptions.getCollectionUri
  • ActiveRecording 已被重命名为“Recording”以降低详细程度。
  • QualitySelector 创建器 API 更改成了基于列表的 API

bug 修复

  • 修复了启用扩展模式且设置 ImageCapture#CAPTURE_MODE_MAX_QUALITY 模式时出现的 YuvToJpegProcessor EOFException 问题。
  • 修复了由于视频录制关闭而导致编解码器配置失败的问题
  • 修复了全高清录制时的拉伸式预览/视频宽高比问题
  • 修复了某些设备上音频/视频在被暂停并恢复后不同步的问题
  • 修复了当闪光灯模式为自动或始终开启时,在光线较暗的环境中点按对焦 (startFocusAndMetering) 时会启动闪光灯的问题。

版本 1.1.0-rc02

2022 年 6 月 1 日

发布了 androidx.camera:camera-*:1.1.0-rc02版本 1.1.0-rc02 中包含这些提交内容

bug 修复

版本 1.1.0-rc01

2022 年 5 月 11 日

发布了 androidx.camera:camera-*:1.1.0-rc01版本 1.1.0-rc01 中包含这些提交内容

新功能

  • 针对 camera-video、camera-view 和 camera-extension 发布了第一个 RC 版本

bug 修复

  • 修复了以下问题:在 VideoCapture<Recorder> 解除绑定后视频编解码器无法释放,导致对 VideoCapture<Recorder> 的后续使用在通过 MediaCodec.CodecException 进行录制时失败,此问题在 API 21-22 设备上尤为突出。(Ie7f68)
  • 修复了 CameraExtensionsActivity 拍摄的图片在 ImageCaptureTest 中不被删除的问题

版本 1.1.0-beta03

2022 年 4 月 6 日

发布了 androidx.camera:camera-*:1.1.0-beta03版本 1.1.0-beta03 中包含这些提交内容

API 变更

  • 限制了 CaptureRequestOptions 构造函数。(I261b6)
  • 添加了一个实验性 API,用于将 CameraController 与外部图像处理库结合使用。例如 MLKit (I4ea71)

bug 修复

  • 修复了在多窗口模式下旋转设备后 activity 未重启时,在 PreviewView 中预览方向有误的问题。(I1ea36b/223488673
  • 修复了一个多窗口问题:当 (1) 其他高优先级应用打开另一摄像头时 (2) 该设备为 Samsung Android 12 设备时,如果焦点回到应用,该应用将无法恢复使用摄像头。(I7e9f2)
  • 针对在检查闪光灯是否可用时设备崩溃的问题提供了解决方法。这些设备不会提供手电筒功能。(If26a3b/216667482
  • 修复了当应用使用扩展程序并启用 ProGuard 时发生的 AbstractMethodError 问题。(I7cbafb/222726805
  • 强制停用 Motorola Razr 5G 设备上的焦外成像扩展模式,解决了该模式会导致预览黑屏的问题。(I35d49)
  • 修复了部分三星设备(API 29 以下级别)在暂停和继续播放后音频/视频不同步的问题。(I64622b/202798609b/202798572
  • 修复了 Sony G3125 在暂停和恢复播放后音频/视频不同步的问题。(I2a1a5b/202799148
  • 修复了当录音机遇到 InvalidConfigException 时发生崩溃的问题。不过,这项修复只会防止应用崩溃,不会解决导致 InvalidConfigException 的原因。如果仍无法配置 Recorder,应用会在开始录制时收到错误回调。(I89c29b/213617227

外部贡献

  • 由于 test-coroutines-lib 迁移,更新了 :compose:ui:ui-test API (updateApi) (I3366d)

版本 1.1.0-beta02

2022 年 2 月 23 日

发布了 androidx.camera:camera-*:1.1.0-beta02版本 1.1.0-beta02 中包含这些提交内容

API 变更

  • 添加了通过 Camera2Interop 指定实体相机 ID 的功能。(I5aed8)

bug 修复

  • 修复了 Oppo Find N 上的预览拉伸问题 (I7d004)
  • 修复了 Galaxy J7 Prime 出现的预览失真问题。(I4c500)
  • 使用兼容的比特率查找视频编码器。(d969052)

版本 1.1.0-beta01

2022 年 1 月 26 日

发布了 androidx.camera:camera-*:1.1.0-beta01版本 1.1.0-beta01 中包含这些提交内容

新功能

  • 从 1.1.0-beta01 开始,所有 CameraX 库都将采用相同的版本号。这有助于开发者更轻松地跟踪版本,并降低大型版本兼容性列表的复杂性。

API 变更

  • 添加了 Camera2CameraControl.clearCaptureRequestOptions,用于清除现有的捕获请求选项。(Ifa07d)

bug 修复

  • 修复了在某些搭载 Android O (API 26) 之前的 Android 版本的设备上录制视频时发生崩溃的问题。(I88fdfb/212328261
  • 修复了对三星设备中的前置摄像头使用 cameraControl#startFocusAndMetering() 时出现的 AF 区域错误问题(Ifbf59b/210548792
  • 在 Pixel 3a/Pixel 3a XL 上使用手电筒作为闪光灯,以提高在黑暗环境中拍摄图片的速度和质量(Ib12b6b/211474332
  • 在多窗口模式下,当相机被其他具有更高优先级的应用中断时,应用可以恢复使用相机,焦点也会重新回到应用上。请注意,由于一些框架问题,焦点变化和相机重启之间可能会略有延迟(1 秒到 10 秒或更长)。(I4d092)

版本 1.1.0-alpha12

2021 年 12 月 15 日

发布了 androidx.camera:camera-*:1.1.0-alpha12版本 1.1.0-alpha12 中包含这些提交内容

API 变更

  • 从内部类/接口中移除了不必要的 @RequiresApi(21) 注解。(I8e286b/204917951
  • QualitySelector 的画质常量和后备策略常量已更改为由类对象表示。例如,QualitySelector.QUALITY_HD 会更改为 Quality.HD,而 QualitySelector.FALLBACK_STRATEGY_LOWER 会更改为 FallbackStrategy.lowerQualityOrHigherThan(Quality) 返回的实例。用于创建 QualitySelector 的 API 已更改为基于列表的 API。新 API QualitySelector.fromOrderedList(List<Quality>) 将引用输入画质列表的顺序,而不是 QualitySelector.Procedure 创建的顺序。已移除 QualitySelector.Procedure 类。(I43343)
  • 移除了 PendingRecording.withEventListener(),事件监听器现在必须传递给 PendingRecording.start()。此事件监听器要求旨在鼓励处理 VideoRecordEvent.Finalize 事件中报告的异步错误。(I1e71d)
  • ActiveRecording 已重命名为 Recording,以降低详细程度。(I77ceb)

bug 修复

  • 修复了在 Pixel 3a 和 Pixel 3a XL 上,在 FLASH_AUTO 模式下拍摄的照片在黑暗光线下曝光不足的问题(I13f19b/205373142
  • 始终使用最新的显示尺寸来确定预览 Resolution。(I4a694)
  • 已滤除没有 REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE 的相机。具有 REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE 的相机具备每台相机设备都支持的最少功能集。没有 REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE 的相机可能支持特殊功能,但不支持标准颜色输出。CameraX 不支持这些相机的 PreviewImageCaptureImageAnalysisVideoCapture 用例。因此,应滤除这些相机,以防止错误使用。(Ib8cda)
  • 当结果集为空时,CameraSelector#filter 不再抛出 IllegalArgumentException。(I27804)
  • 现在会使用更智能的启发法来根据 OEM 指定的配置文件选择编码器设置。(Iaeef0)
  • 修复了以下 bug:在 Pixel1 上开始录制超高清视频后,预览会交错显示彩色线条。(I833c6b/205340278

版本 1.1.0-alpha11

2021 年 11 月 17 日

发布了 androidx.camera:camera-*:1.1.0-alpha11版本 1.1.0-alpha11 中包含这些提交内容

API 变更

  • 向公共 API 添加了 CameraSelector#filter,以用于根据 CameraSelector 过滤 CameraInfo 列表。(I105d0)
  • 为 ImageAnalysis 配置添加了 setOutputImageRotationEnabled API。用户可以启用 YUV/RGB 图像缓冲区旋转。旋转角度是根据传感器旋转角度和目标旋转角度计算得出的相对旋转角度,以让图片保持在最前面。

  • 为 ImageAnalysis 配置添加了 setOutputImageRotationEnabled API。用户可以启用 YUV/RGB 图像缓冲区旋转。旋转角度是根据传感器旋转角度和目标旋转角度计算得出的相对旋转角度,以让图片保持在最前面。

    在 ImageInfo 中添加了 getSensorToBufferTransformMatrix API。返回的矩阵是从传感器坐标到缓冲区坐标的映射,即从 CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE 值到 (0, 0, image.getWidth, image.getHeight)。矩阵可用于将坐标从一个 {UseCase} 映射到另一个。例如,将使用 ImageAnalysis 检测到的人脸的坐标映射到预览。(I9ff1e)

  • 添加了新的 API ImageCapture.Builder#setJpegQuality,以允许在拍照时更改输出 JPEG 图像压缩质量。(I8dcf4)

  • 已将 MediaStoreOutputOptions.getCollection 重命名为 MediaStoreOutputOptions.getCollectionUri。(I16639)

bug 修复

  • 修复了当闪光灯模式为自动或始终开启时,在光线较暗的环境中点按对焦 (startFocusAndMetering) 时会启动闪光灯的问题。(Id4c11)
  • 在 MINIMIZE_LATENCY 模式下,为 Pixel 2 XL / Pixel 3 XL 停用了 HDR+,以缩短延迟时间。(Ib6270b/203505523

外部贡献

版本 1.1.0-alpha10

2021 年 10 月 13 日

发布了 androidx.camera:camera-*:1.1.0-alpha10版本 1.1.0-alpha10 中包含这些提交内容

新功能

  • 正式发布了 Video 的第一个 Alpha 版本 androidx.camera:camera-video:1.1.0-alpha10。后续版本中会解决几个已知问题

API 变更

  • 向所有 CameraX 类添加了 @RequiresApi(21) 注释,且从 AndroidManifest.xml 中移除了 minSdkVersion。这样就可以轻松将 camera-core 集成到 minSdkVersion 低于 21 但需要有条件地使用依赖于 API 21 及更高级别的代码路径的应用中。minSdkVersion 为 21 或更高版本的应用均无需针对此项变更执行任何操作。(Ie7f2eb/200599470

bug 修复

  • 抛出 InitializationException 以便应用能够妥善处理创建 CameraCharacteristics 时发生的 AssertionError 问题。(Ibec79)

版本 1.1.0-alpha09

2021 年 9 月 29 日

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

API 变更

  • 由于 API 不再处于实验阶段,因此 ExperimentalUseCaseGroup 注解现已移除。(I01ef5)

bug 修复

  • 修复了在 MAXIMIZE_QUALITY 模式下拍摄的照片被虚化的问题。(I173a9b/193823892
  • 修复了 Samsung Galaxy J5 在黑暗环境中开启闪光灯/自动拍照后相机会卡住的问题 (I3aab9)
  • ImageCapture 如需剪裁,系统会根据设定的拍摄模式,以指定的 JPEG 质量级别压缩剪裁后的输出图片。如果拍摄模式为 CAPTURE_MODE_MINIMIZE_LATENCY,JPEG 压缩质量将为 95。如果拍摄模式为 CAPTURE_MODE_MAXIMIZE_QUALITY,JPEG 压缩质量则为 100。(Ieb37cb/142856426

版本 1.1.0-alpha08

2021 年 8 月 18 日

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

新功能

  • 为图片分析配置添加了 setOutputImageFormat API。用户可以选择 ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888 或 ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888。默认情况下,ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888 将处于选中状态。(I7902d)

API 变更

  • 由于 API 不再处于实验阶段,因此 ExperimentalUseCaseGroupLifecycle 注解现已移除。(I17b85)

bug 修复

  • 修复了华为 P20 Lite 上的预览屏幕亮度过高的问题。仅当特定的预览分辨率与较大的放大值结合使用时,才会发生此问题。(Idefceb/192129158
  • 修复了某些设备上的闪光灯无法正常工作的问题,如果将闪光灯模式设为 FLASH_MODE_ON 后不久接着拍照,就会发生此问题。(Ieb49b)
  • 修复了在绑定 VideoCapture、ImageCapture 和 Preview 的情况下拍照时预览会暂停一段时间的问题。(I56197b/193864120
  • 允许 ImageAnalysis 选择大于 1080p 的分辨率。当 ImageAnalysis 与 Preview 和 ImageCapture 绑定在一起时,超过 LIMITED 级别的设备支持为 ImageAnalysis 选择 RECORD 尺寸分辨率。需要权衡的是,为 ImageCapture 选择的分辨率也必须是 RECORD 尺寸分辨率。只有为 ImageCapture 和 ImageAnalysis 都设置 RECORD 尺寸目标分辨率,才能为 ImageAnalysis 成功选择 RECORD 尺寸分辨率。这表明应用清楚如何取舍平衡,它更倾向于为 ImageAnalysis 设置较大的分辨率,而不是为 ImageCapture 设置 MAXIMUM 分辨率。如需了解 RECORD 尺寸和 MAXIMUM 尺寸的定义以及更多详情,请参阅 https://developer.android.com/reference/android/hardware/camera2/CameraDevice#regular-capture。RECORD 尺寸是指相机设备支持的最大录制分辨率,具体由 CamcorderProfile 确定。MAXIMUM 尺寸是指 StreamConfigurationMap.getOutputSizes(int) 中相应格式或目标的相机设备最大输出分辨率。(I1ee97b/192911449
  • 已将 EXIF 信息添加到所拍摄的图片中。(I01ff0b/193342619
  • 在 ImageCapture 中,如果保存位置是 File,则返回所保存图片的 URI。(Ib5b49b/149241379
  • 修复了在许多设备上开启闪光灯拍照时图片颜色较暗的问题。(I4e510)

版本 1.1.0-alpha07

2021 年 7 月 21 日

发布了 androidx.camera:camera-camera2:1.1.0-alpha07androidx.camera:camera-core:1.1.0-alpha07androidx.camera:camera-lifecycle:1.1.0-alpha07版本 1.1.0-alpha07 中包含这些提交内容

bug 修复

  • 修复了 Samsung Galaxy Note 5 在黑暗环境中开启闪光灯/自动拍照后相机会卡住的问题 (If6871)
  • 修复了启用扩展模式且设置 ImageCapture#CAPTURE_MODE_MAX_QUALITY 模式时出现的 YuvToJpegProcessor EOFException 问题。(I538bdb/192017012

版本 1.1.0-alpha06

2021 年 6 月 30 日

发布了 androidx.camera:camera-camera2:1.1.0-alpha06androidx.camera:camera-core:1.1.0-alpha06androidx.camera:camera-lifecycle:1.1.0-alpha06版本 1.1.0-alpha06 中包含这些提交内容

API 变更

  • 提升了针对 camera-core 的实验性曝光补偿 API (I08ee8)
  • 在 CameraInfo 中添加了 API isFocusMeterSupported,让应用可以检查当前相机是否支持给定的 FocusMeteringAction。(Ib45aeb/188606490
  • 公开了 getResolutionInfo API,用于提供 Preview、ImageCapture 和 ImageAnalysis 的分辨率信息。(I2b613b/188600718
  • 将以下实验性 API 提升为正式版 API: CameraXConfig.Builder#setAvailableCamerasLimiter()、CameraXConfig.Builder#setMinimumLoggingLevel()、CameraXconfig.Builder#setSchedulerHandler()、CameraXConfig#getAvailableCamerasLimiter()、CameraXConfig#getMinimumLoggingLevel()、CameraXConfig#getCameraExecutor()、CameraXConfig#getSchedulerHandler()。(I2ade2)
  • 公开了 CameraProvider 接口,此接口提供一组相机的访问权限。(I1a7b1)
  • 提升了 camera-core、camera-lifecycle 和 camera-video 的实验性 UseCaseGroup API。添加了用于自定义视口的 ViewPort#getLayoutDirectionViewPort.Builder#setLayoutDirectionViewPort.Builder#setScaleType。(I7cee8)

版本 1.1.0-alpha05

2021 年 6 月 2 日

发布了 androidx.camera:camera-camera2:1.1.0-alpha05androidx.camera:camera-core:1.1.0-alpha05androidx.camera:camera-lifecycle:1.1.0-alpha05版本 1.1.0-alpha05 中包含这些提交内容

API 变更

  • 移除了 Camera2CameraFilter 类。建议按 CameraFilter 选择相机,并根据需要通过 Camera2CameraInfo 检索 CameraCharacteristics 或其他 Camera2 相关信息。(Ib887c)
  • ExperimentalCameraFilter API 现在完成了实验阶段,成为了正式 API。使用此 API 时无需带注解的 OptIn。(I4bc94)
  • 添加了通过 CameraInfo#getCameraState() 提供的相机状态 API。(Ia86b4)
  • 添加了实验性 API CameraInfo#getCameraSelector(),此 API 会返回其相机独有的 CameraSelector (I77f9f)

bug 修复

  • 修复了在某些 Android 11 设备上 setZoomRatio 和 setLinearZoom 返回的 ListenableFuture 无法完成的问题 (I716d7)
  • 加快了相机切换速度并降低了相机设备的错误发生率 (I34c99)
  • 将 ExperimentalUseCaseGroupLifecycle 替换为了 ExperimentalUseCaseGroup。(I3b2efb/159033688

版本 1.1.0-alpha04

2021 年 4 月 21 日

发布了 androidx.camera:camera-camera2:1.1.0-alpha04androidx.camera:camera-core:1.1.0-alpha04androidx.camera:camera-lifecycle:1.1.0-alpha04版本 1.1.0-alpha04 中包含这些提交内容

bug 修复

  • 修复了由多个线程同时访问同一集合引起的内存泄漏问题。内存泄漏可能会导致预览实例保留 activity 或 fragment。(I7b4b8)
  • 将实验性 API 的注释 @Experimental 替换成了 @RequiresOptIn。如需调用实验性 API,请使用 androidx.annotation.OptIn,而不是已废弃的 androidx.annotation.experimental.UseExperimental。(Iff226)
  • 修复了 Samsung Galaxy S7 上“开启闪光灯”/“自动拍摄褪色图像”情况下的 ImageCapture。(I30001)
  • 添加了将通过 CameraInfo 公开的 CameraState API。(I75392)

版本 1.1.0-alpha03

2021 年 3 月 24 日

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

bug 修复

  • 启用扩展模式后,针对 ImageCapture#OnImageCapturedCallback 输出 JPEG 格式。(I0d7b1)
  • 修复了 UMIDIGI BISON 设备上的初始化故障(I57d9eb/180818665
  • 修复了 Samsung A3 在 PreviewView 中的预览发生拉伸变形的问题。(Iacb30b/180121821

版本 1.1.0-alpha02

2021 年 2 月 24 日

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

API 变更

  • 添加了 API ProcessCameraProvider.getAvailableCameraInfos() 以便直接检索有关可用相机的信息,可用相机可以是设备的所有相机,也可以是由 CameraXConfig.Builder.setAvailableCamerasLimiter(CameraSelector) 中提供的 CameraSelector 选择的相机。(Ieac08)

bug 修复

  • CameraX 现在会试着在进行初始尝试时强制打开某个相机,这可能会导致 CameraX 在其应用的优先级较高时从其他相机客户端窃取相机使用权。(Iab069b/175820568
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。(Ice307)
  • 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例中出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。(Ic12dab/175851631
  • 修复了 ExtensionsErrorListener,以便仅在绑定 Preview 或 ImageCapture 时报告错误。(I5ae39)
  • 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片。(I1fd4eb/177061560
  • 修复了因使用“File”类型 OutputFileOptions 而导致的 ImageCapture 性能回归问题。(I5164ab/177061560
  • 更新了文档,以建议不要使用库代码中的 ProcessCameraProvider.configureInstance(...)。(Ib8a9f)

版本 1.1.0-alpha01

2021 年 1 月 27 日

发布了 androidx.camera:camera-camera2:1.1.0-alpha01androidx.camera:camera-core:1.1.0-alpha01androidx.camera:camera-lifecycle:1.1.0-alpha01版本 1.1.0-alpha01 中包含这些提交内容

bug 修复

  • 针对 SM-G930T 后置相机上 JPEG 图片数据间歇性损坏的问题提供了解决方法。(I52001b/159831206
  • 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的 IllegalArgumentException 问题。(I2a63cb/150506192
  • 如果库中没有明确声明的公开资源(例如,通过 public.xml 进行声明),那么库中的资源现在默认为私有资源。(Ia1dccb/170882230

Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.0.2

版本 1.0.2

2021 年 9 月 29 日

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

bug 修复

  • 修复了在 MAXIMIZE_QUALITY 模式下拍摄的照片被虚化的问题。(I173a9b/193823892
  • 修复了在许多设备上开启闪光灯拍照时图片颜色较暗的问题。(I4e510)

Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.0.1

版本 1.0.1

2021 年 7 月 21 日

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

bug 修复

  • 修复了 setZoomRatiosetLinearZoom 中返回的 ListenableFuture 无法在某些 Android 11 设备上完成的问题 (I716d7)

  • 修复了在某些设备上相机会卡在关闭状态并导致黑色预览的问题。(I34c99)

Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.0.0

版本 1.0.0

2021 年 5 月 5 日

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

1.0.0 的主要功能

  • CameraX 支持 PreviewImageCaptureAnalysis
  • CameraX 通过一个易于使用的 API 管理相机生命周期
  • CameraX 旨在提供一个兼容性层来修复 Android 相机生态系统中的诸多问题

已知问题

版本 1.0.0-rc05

2021 年 4 月 21 日

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

bug 修复

  • 修复了 Samsung Galaxy S7 上“开启闪光灯”/“自动拍摄褪色图像”情况下的 ImageCapture。(I30001)

版本 1.0.0-rc04

2021 年 3 月 24 日

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

bug 修复

版本 1.0.0-rc03

2021 年 2 月 24 日

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

bug 修复

  • 修复了 ProcessCameraProvider#getInstance 文档中的格式错误
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。
  • 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片
  • 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。
  • 针对 SM-G930T 后置相机上 JPEG 图片数据间歇性损坏的问题提供了解决方法。(I52001b/159831206
  • 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例中出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。(Ic12dab/175851631
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。(Ice307)
  • 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片。(I1fd4eb/177061560
  • 修复了因使用“File”类型 OutputFileOptions 而导致的 ImageCapture 性能回归问题。(I5164ab/177061560

版本 1.0.0-rc02

2021 年 1 月 27 日

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

bug 修复

  • 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的 IllegalArgumentException 问题。(b/150506192)
  • 限制了相机尝试重新打开的次数。在尝试从打开相机时遇到的某些问题中恢复时,CameraX 不会再无限期地尝试重新打开相机,而是重试 10 秒后即停止。I435d2

  • 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的 IllegalArgumentException 问题。(I2a63cb/150506192

版本 1.0.0-rc01

2020 年 12 月 16 日

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

API 变更

  • CameraFilter 和 Camera2Filter 已更改为接受 CameraInfo。(I6883d)
  • 添加了实验性的类 Camera2CameraControl,以支持与 Camera2 API 进行动态互操作。(I45cf3)
  • Camera2CameraInfo#fromCameraInfo 已重命名为 #from。(Ia2bd6)
  • 向 CameraXConfig 添加了实验性 setAvailableCamerasLimiter API,让应用可以不对未使用的相机进行初始化,从而优化初始化延迟时间。(I6cf88)
  • 添加了实验性方法 CameraXConfig.Builder#setMinimumLoggingLevel(),以支持为 CameraX 日志设置最低日志记录级别。如果不设置,日志记录级别默认为 Log#DEBUG。(Ic3245)

bug 修复

  • 针对 SM-G930V 后置相机上 JPEG 图片数据间歇性损坏的问题提供了解决方法。(I5aca5b/159831206
  • 修复了 Samsung SM-A716 设备上在环境昏暗的情况下始终开启闪光灯时拍照无法收到结果的问题。(If98b2b/172036589
  • 修复了无法通过调用 Preview.setSurfaceProvider(null) 停止预览的问题。(I3ac18)
  • 修复了在某些设备上拍摄 4:3 图片时的屏幕方向问题。(I0e3fbb/171492111

Camera Camera2、Camera Core 和 Camera Lifecycle 版本 1.0.0-beta12

2020 年 11 月 11 日

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

bug 修复

  • 停用了 Samsung A3 设备上的自动闪光灯,以修复在 Samsung A3 设备上使用自动闪光灯 AE 模式拍照时出现的崩溃问题。(Ia5fe3b/157535165
  • 修复了搭载 Android L(API 级别 21 和 22)的 Nexus 4 设备上的预览拉伸问题。(I4d407b/158749159
  • OnImageCapturedCallback#onCaptureSuccess 基类实现不再关闭图片。这是为了防止开发者遇到意外行为。开发者不应依赖 super.onCaptureSuccess 来关闭图片。(Ifbf9c)
  • 废弃了实验性注解的 androidx 变体,以与 Kotlin 保持一致。我们已将其替换为 RequiresOptIn 注解,并更新了面向 Java 的 linter,以支持新的 Kotlin 注解和新的 androidx 变体。(I52495b/151331381

Camera-Camera2 版本 1.0.0-beta11

2020 年 10 月 14 日

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

新功能

  • 支持 Android 11 CONTROL_ZOOM_RATIO API,用于在搭载 Android 11 或更高版本且包含有效 CONTROL_ZOOM_RATIO_RANGE 的设备上进行缩放。(I62cc6)

bug 修复

  • 修复了相机 ID 为非整数相机 ID 时发生的 NumberFormatException 问题。(Ib2228)
  • 缩短了 CameraX 初始化和 bindToLifecycle 的延迟时间 (I61dc5)
  • 创建 UseCase 不需要完成 CameraX 初始化。将 UseCase 附加到 Camera 实例(对于公共 API 为 ProcessCameraProvider.bindToLifecycle())之后,在 UseCase 上设置所有的实现专用配置。(Ia5411)
  • 如果在附加到 Camera 实例之前调用,<UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,除非在 Builder 或 UseCase 上设置了 targetRotation。(I80fcd)

Camera-Core 版本 1.0.0-beta11

2020 年 10 月 14 日

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

新功能 - 支持 Android 11 CONTROL_ZOOM_RATIO API,用于在搭载 Android 11 或更高版本且包含有效 CONTROL_ZOOM_RATIO_RANGE 的设备上进行缩放。(I62cc6)

bug 修复

  • 修复了相机 ID 为非整数相机 ID 时发生的 NumberFormatException 问题。(Ib2228)
  • 创建 UseCase 不需要完成 CameraX 初始化。将 UseCase 附加到 Camera 实例(对于公共 API 为 ProcessCameraProvider.bindToLifecycle())之后,在 UseCase 上设置所有的实现专用配置。(Ia5411)
  • 如果在附加到 Camera 实例之前调用,<UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,除非在 Builder 或 UseCase 上设置了 targetRotation。(I80fcd)

Camera-Core 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

  • 修复了验证图片拍摄文件保存目的地时出现的 bug(I8c565b/167697553

Camera-Camera2 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

Camera-Camera2 版本 1.0.0-beta09

2020 年 9 月 16 日

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

API 变更

  • Camera2CameraInfo 不提供静态方法,而是在创建时接受 CameraInfo 实例,以从中检索 Camera2 相关信息。(I5b844)

bug 修复

  • 修复了平板电脑设备上的目标宽高比问题。当目标宽高比设为 AspectRatio.RATIO_16_9 时,应选择 16:9 的宽高比大小。(Ib7fcfb/151969438
  • 抛出 InitializationException 以便应用能够妥善处理创建 CameraCharacteristics 时发生的 AssertionError 问题。(I89c8cb/160524721
  • 为 ExposureCompensation 添加了实验性接口 (If96c7)

Camera-Core 版本 1.0.0-beta09

2020 年 9 月 16 日

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

API 变更

  • 修复了 UseCaseGroup 中将视口标记为非 null 的 bug。开发者应该能够创建视口而不对视口进行设置。(Ie3d2e)
  • ExposureCompensation 添加了实验性接口 (If96c7)
  • 允许任意旋转目标以进行预览。系统会通过新的 TranformationInfoListener 回调计算转换信息并将其实时返回给用户。(I21470)

bug 修复

  • 修复了某些设备上的闪光灯无法关闭的问题。如果为了拍照将闪光灯模式设为 FLASH_MODE_ON,然后在闪光灯被触发时将闪光灯模式更改为 FLASH_MODE_OFF,就会发生此问题。其症状就像启用了手电筒模式。(Ib4451b/162568128
  • 如果启用了扩展效果且供应商库实现需要在输出 surface 上执行特殊进程,将强制 PreviewView 使用 TextureView。(I0c3cc)
  • 修复了将 activity/fragment 上下文传递给 ProcessCameraProvider.getInstance(Context) 时的 activity/fragment 泄露问题。

已知问题

  • 如果设备在 HAL 中旋转了图片缓冲区,那么在设置 ViewPort 后,ImageCapture 的剪裁矩形可能不正确。此问题将在下一版本中修复。

Camera-Camera2 版本 1.0.0-beta08

2020 年 8 月 19 日

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

bug 修复

  • 优化了 bindToLifecycle,现在可在主线程上快速运行。(I1d57e)
  • DisplayOrientedMeteringPointFactory 接受 CameraInfo 实例而不是 CameraSelector,从而确保直接映射至工厂将为其生成点数的 Camera。所有使用 DisplayOrientedMeteringPointFactory 的类也都接受 CameraInfo 实例而不是 CameraSelector。(I400c1)
  • 修复了自动分辨率宽高比大小分组的如下问题:当目标分辨率设置为 2016x1080 并且系统支持另一 1920x1080 16:9 宽高比大小时,系统将选择 16:9 mod16 大小 (864x480)。(I53167b/159363774
  • 修复了无法按竞态条件工作的 CameraControl 问题(I2279fb/152333890b/160714166

Camera-Core 版本 1.0.0-beta08

2020 年 8 月 19 日

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

API 变更

  • DisplayOrientedMeteringPointFactory 接受 CameraInfo 实例而不是 CameraSelector,从而确保直接映射至工厂将为其生成点数的 Camera。所有使用 DisplayOrientedMeteringPointFactory 的类也都接受 CameraInfo 实例而不是 CameraSelector。(I400c1)

bug 修复

  • 对于图片拍摄,系统会根据相机方向覆盖元数据中的水平翻转标志。(I28499)
  • 当使用不从 Context.getApplicationContext() 返回 Application 对象的 Context 时,初始化应该不会再崩溃。(I3d3c9b/160817073

Camera-Camera2 版本 1.0.0-beta07

2020 年 7 月 22 日

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

bug 修复

  • 修复了 Android 5.0 旧版设备上的预览拉伸问题。(I0c03a)
  • 排除了某些 JPEG 支持的尺寸,这些尺寸会在部分设备上导致所见即所得问题。(Ib5128)

Camera-Core 版本 1.0.0-beta07

2020 年 7 月 22 日

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

API 变更

  • FIT_CENTERFIT_STARTFIT_END 适合样式与 FIT 合并。FIT 表示返回的剪裁矩形是可能的最大传感器矩形。(Ia73c3)
  • 预览的剪裁矩形按视口配置。只应向最终用户显示剪裁矩形覆盖的区域。(I142a4)

bug 修复

  • 修复了 Android 5.0 旧版设备上的预览拉伸问题。(I0c03a)
  • 修复了在解除绑定用例时出现的 ConcurrentModificationException 异常问题。(I371c0)

Camera-Camera2 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性接口。(I28f61)

bug 修复

  • 修复了 startFocusAndMetering 无法在 Samsung Galaxy S7 上成功聚焦的问题。(If3be7b/159039233
  • 修复了在退出应用后无法关闭相机的问题。(I7a7b3)
  • 修复了在使用 PreviewView 的 SurfaceView 实现时重复切换摄像头会导致预览中断的问题 (I920ce)
  • 如果没有任何指定的 MeteringPoint 可以生成有效的测光矩形,CameraControl#startFocusAndMetering 将失败。(Id53ce)

Camera-Core 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性接口。(I28f61)

bug 修复

  • 您现在可以在调用 ProcessCameraProvider#getInstance() 之前使用 ProcessCameraProvider#configureInstance() 配置 CameraX。这样便可自定义 CameraXConfig,而无需在应用的 Application 类中实现 CameraXConfig.Provider。(Ia1a8d)
  • 如果没有任何指定的 MeteringPoint 可以生成有效的测光矩形,CameraControl#startFocusAndMetering 将失败。(Id53ce)

Camera-Camera2 版本 1.0.0-beta05

2020 年 6 月 10 日

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

bug 修复

  • 修复了在手机处于“勿扰”模式下,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 CameraUnavailableException,它会将初始化结果设为 ListenableFuture,而不是使应用崩溃。(I9909ab/149413835
  • 修复了在 CONTROL_AF_STATE 为 null 的设备上调用 startFocusAndMetering 时发生崩溃的问题。(Ife55eb/157084254

Camera-Core 版本 1.0.0-beta05

2020 年 6 月 10 日

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

API 变更

  • 修复了在手机处于“勿扰”模式下,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

bug 修复

  • 更新了 setTargetResolutionsetTargetRotation 的 Javadoc。(Iae16f)

Camera-Camera2 版本 1.0.0-beta04

2020 年 5 月 27 日

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

bug 修复

  • 允许应用通过 Camera2Interop 设置任何 camera2 拍摄请求参数,而不会导致崩溃。请注意是否由于替换参数而出现问题。使用 Camera2Interop 替换参数时,无法保证稳定性和行为。(Ibe5a1b/149103700
  • 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3b/154767663
  • 已将与独立用例相关的错误日志转换为 Camera2CameraImpl 上的调试日志。(I1a565b/154422490
  • 修复了即使在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fab/149729613
  • 修复了 ImageProxy 中源于 ImageCapture 的缓冲区未倒回的 bug(I0c455b/153249512
  • 修复了仅绑定 ImageCapture 时存在的以下问题:(1) 无法使用 MAX_QUALITY 拍摄照片;(2) 生成的图片质量不佳,因为自动曝光不起作用。(I17782b/145326998
  • 提升了当 CameraX 因其他进程或代码路径窃取相机而断开连接时,重新打开相机的可靠性(I1fbc3b/153714651

Camera-Core 版本 1.0.0-beta04

2020 年 5 月 27 日

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

API 变更

  • 添加了一个实验性 API CameraXConfig.Builder#setSchedulerHandler(),用于设置供 CameraX 相机堆栈在内部使用的处理程序。此新 API 和 CameraXConfig.Builder#setCameraExecutor() 相配合,应该能让用户完全控制 CameraX 相机堆栈使用的线程。(I7bf32b/121160431

bug 修复

  • 修复了在 ImageReaderProxy 关闭后访问 ImageProxy 时出现的 ImageAnalysis 崩溃问题。这也使得 Analyzer 接收的所有 ImageProxy 必须先关闭,然后 ImageReaderProxy 才会关闭。(I4b299b/145956416b/154155377b/156357269
  • PreviewView#createSurfaceProvider() 中移除了 CameraInfo 参数,PreviewView 现在会在内部从 SurfaceRequest 中检索该参数。(If18f0b/154652477
  • 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3b/154767663
  • 修复了即使在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fab/149729613
  • 修复了 ImageAnalysis 的以下问题:多次调用 setAnalyzer/clearAnalyzer 导致分析器无法接收要分析的图片。(I6169fb/151605317b/153514544
  • 修复了 ImageProxy 中源于 ImageCapture 的缓冲区未倒回的 bug(I0c455b/153249512
  • 修复了 CameraManager 中受支持列表中的第一个相机有时未选用的问题。(I4c624b/153418028
  • 修复了由于未释放先前请求的 Surface 便设置 Preview.SurfaceProvider 而导致的间歇性崩溃问题。“java.lang.IllegalStateException: Camera surface session should only fail with request cancellation”I8e4e7b/155936225

Camera-Camera2 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

  • 修复了 camera-core 的版本支持问题

Camera-Core 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

  • 修复了 beta03 中的回归问题:即不使用 UseCase 调用 bindToLifecycle() 时可能导致抛出异常。这样一来,如果不绑定 UseCase,就会阻止检索 Camera

Camera-Camera2 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

  • 修复了 ImageProxy 中由 ImageCapture 生成的 ImageInfo.getRotationDegrees(),以便匹配 EXIF 方向旋转值。(Id4281b/150802561
  • 使用 CameraX/Camera2 默认实现时,不需要再对 build.gradle 内的 CameraX 依赖项进行显式排序。对于需要声明严格依赖项的情况,现在所有 CameraX 依赖项都可以包含在 build 文件中。(I46e88)
  • 修复了屏幕尺寸小于 640x480 的设备上发生的 IllegalArgumentException 问题。(Ife3f2b/150506192
  • 修复了 bindToLifecycle,使其仅在成功绑定的情况下才会修改 UseCase。之前,在调用 bindToLifecycle 计算分辨率时,需要更新 UseCase。现在,无需再更新 UseCase 便可进行计算 (I78d9e)

Camera-Core 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

  • 修复了 ImageProxy 中由 ImageCapture 生成的 ImageInfo.getRotationDegrees(),以便匹配 EXIF 方向旋转值。(Id4281b/150802561
  • 修复了 bindToLifecycle,使其仅在成功绑定的情况下才会修改 UseCase。之前,在调用 bindToLifecycle 计算分辨率时,需要更新 UseCase。现在,无需再更新 UseCase 便可进行计算 (I78d9e)
  • 修复了多次调用 Preview.setSurfaceProvider() 且 Preview Surface 发生变化后,Preview 用例的捕获会话不更新的问题。

Camera-Camera2 版本 1.0.0-beta01

2020 年 2 月 26 日

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

bug 修复

  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)
  • 修复了使用 ImageCapture.setTargetRotation() 更改目标旋转值后,保存的图片宽高比不正确的问题。(I474eab/148763432
  • 通过保留可设置默认 CameraXConfig 提供程序的标志,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)

Camera-Core 版本 1.0.0-beta01

2020 年 2 月 26 日

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

API 变更

  • 使用 ExecutorCallback 替换了 SurfaceRequest.provideSurface() 上的 ListenableFuture。这简化了 API,因为无需再处理 provideSurface() 上的异常,并且强制要求不能取消 provideSurface() 回调。这是为了防止旧版设备因过早释放 surface 导致崩溃的问题。SurfaceRequest.Result 对象现在用于跟踪 SurfaceRequest 如何使用所提供的 Surface。(I7854b)
  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)

bug 修复

  • 修复了使用 ImageCapture.setTargetRotation() 更改目标旋转值后,保存的图片宽高比不正确的问题。(I474eab/148763432
  • 通过保留可设置默认 CameraXConfig 提供程序的标志,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)
  • 更新了关于闪光灯模式 API 的文档,添加了可能的值。(I4a3ec)

Camera-Camera2 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

bug 修复

  • 确保仅在 Camera2 使用期间保留 Surface,提升了 INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY 设备稳定性。(I9dac2)
  • 通过正确调整 CONTROL_AE_TARGET_FPS_RANGE,修复了旧版设备上曝光不足的预览问题。(1224638)

Camera-Core 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

API 变更

  • 更新了 ImageCapture,允许将图片保存到 UriOutputStream。将过载 takePicture 方法合并成了单个方法。更新了测试应用,以将 Uri 用作规范示例。(Ia3bec)
  • Preview.PreviewSurfaceProvider 已重命名为 Preview.SurfaceProvider。开发者使用 SurfaceProvider 时无需再创建自己的 ListenableFuture;现在可通过新的 SurfaceRequest 对象提供 Surface。移除了 Preview.getPreviewSurfaceProvider() 方法,因为在 PreviewPreviewView 等其他类结合使用时,此方法可能会被滥用。(I20105)
  • getTargetRotation()getTargetName() 添加到了 Preview 中。(Iceee7)
  • ImageAnalysis 中添加了 getTargetRotation()getBackpressureStrategy()getImageQueueDepth()。(I9d6d9)
  • ImageCapture() 中添加了 getTargetRotation()getCaptureMode() (I5bc17)
  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)
  • PreviewImageCapture 类现已标记为 final 类。(I2500b)
  • 更新了 API,CameraInfogetZoomRatio()getMaxZoomRatio()getMinZoomRatio()getLinearZoom() 方法合并到了 getZoomState()(会返回 ZoomState 实例)中。(Ib19fe)
  • CameraXConfig 中移除了 API 字段 OPTION_TARGET_CLASSOPTION_TARGET_NAME,因为这些字段仅供内部库使用。移除了 CameraXConfig.Builder 的构造函数。(I96912)
  • 不再要求应用必须扩展 Application 才能初始化 CameraX。现在,只要应用的 build.gradle 包含 camera-camera2 工件,系统就会使用默认的 Camera2 配置来初始化 CameraX。(I58ff5) (b/146923574)

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 的参考文档的内容。

bug 修复

  • 修复了关闭再打开相机会导致“前提条件”检查失败的问题。
  • 修复了在使用手电筒和缩放 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

bug 修复

  • 修复了旋转或切换 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)上暂停或恢复操作后,会发生这种情况。

bug 修复

  • 更新了 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 返回后相机显示黑屏(无法启动相机)的问题。
  • 修复了反复启动或停止应用时抛出以下错误的 bug;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 设置的模拟器上进行测试时出现的问题。

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

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

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

  • 在相机测试套件 (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版本 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 用例会发生阻塞。
  • 内部设置的默认执行器会表现为非阻塞执行器。

bug 修复

  • 修复了在没有自动聚焦、自动曝光和自动白平衡的设备上捕获图像时等待 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版本 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版本 1.0.0-alpha02 中包含这些提交内容

bug 修复

  • 修复了使用模拟器时被零除的问题
  • 修复了在快速拍照的同时快速解除绑定并重新绑定用例时在某些设备上发生的 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版本 1.0.0-alpha01 中包含这些提交内容

Camera-Lifecycle 版本 1.0.0-beta11

2020 年 10 月 14 日

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

bug 修复

  • 如果在附加到 Camera 实例之前调用,<UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,除非在 Builder 或 UseCase 上设置了 targetRotation。(I80fcd)

Camera-Lifecycle 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

Camera-Lifecycle 版本 1.0.0-beta09

2020 年 9 月 16 日

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

Camera-Lifecycle 版本 1.0.0-beta08

2020 年 8 月 19 日

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

bug 修复

  • 当使用不从 Context.getApplicationContext() 返回 Application 对象的 Context 时,初始化应该不会再崩溃。(I3d3c9b/160817073

Camera-Lifecycle 版本 1.0.0-beta07

2020 年 7 月 22 日

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

Camera-Lifecycle 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

  • 您现在可在调用 ProcessCameraProvider#getInstance() 之前使用 ProcessCameraProvider#configureInstance() 配置 CameraX。这样便可自定义 CameraXConfig,而无需在应用的 Application 类中实现 CameraXConfig.Provider。(Ia1a8d)

Camera-Lifecycle 版本 1.0.0-beta05

2020 年 6 月 10 日

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

bug 修复

  • 修复了在手机处于“勿扰”模式下,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

Camera-Lifecycle 版本 1.0.0-beta04

2020 年 5 月 27 日

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

Camera-Lifecycle 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

  • 修复了 beta03 中的回归问题:即不使用 UseCase 调用 bindToLifecycle() 时可能导致抛出异常。这样一来,如果不绑定 UseCase,就会阻止检索 Camera
  • 修复了 camera-core 的版本支持问题

Camera-Lifecycle 版本 1.0.0-beta01

2020 年 2 月 26 日

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

bug 修复

  • 修改了文档并指出以下注意事项:在初始化期间获取 ProcessCameraProvider 时,会使用默认配置且可以选择扩展 Application。(I5e395)

Camera-Lifecycle 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

  • 已更新,可支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02 工件中的 bug 修复。

Camera-Lifecycle 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

API 变更

  • 为 BindToLifecycle、unbind 和 unbindAll 方法添加了 @MainThread 注解。(I990d2)

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

版本 1.0.0-alpha32

2021 年 12 月 15 日

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

API 变更

  • 从内部类/接口中移除了不必要的 @RequiresApi(21) 注解。(I8e286b/204917951
  • 更新了 camera-extensions 工件的 API 文件。(If683ab/161377155

bug 修复

  • 绑定 VideoCapture 后,禁止应用启用扩展模式。CameraX 扩展程序仅支持 ImageCapturePreview,尚不支持 VideoCapture。如果应用绑定 VideoCapture 并启用任何扩展模式,则会抛出 IllegalArgumentException。(I0d87b)
  • 当结果集为空时,CameraSelector#filter 不再抛出 IllegalArgumentException。(I27804)
  • ExtensionsManager#getInstance API 已重命名为 getInstanceAsync,因为它会返回 ListenableFuture。函数名称的“Async”后缀可以清楚地表明它是一个异步函数。(I279d2)
  • ExtensionsManager#getEstimatedCaptureLatencyRange API 中移除了分辨率参数,因为用户不知道 ImageCapture 用例支持哪些尺寸,并且无法区分返回的延迟时间信息是针对最大捕获输出尺寸还是输入分辨率参数。(I74bb2)
  • ExtensionsManager 函数的 CameraProvider 参数移到了 getInstance() API 中。这样,用户便无需在每次调用 ExtensionsManager 函数时都输入 CameraProvider 参数。(Ic7e48)

版本 1.0.0-alpha31

2021 年 11 月 17 日

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

API 变更

  • 向公共 API 添加了 CameraSelector#filter,以用于根据 CameraSelector 过滤 CameraInfo 列表。(I105d0)

bug 修复

  • 修复了在某些设备上快速切换扩展程序模式时发生崩溃的问题。 (Iebbef)

版本 1.0.0-alpha30

2021 年 10 月 13 日

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

API 变更

  • 向所有 CameraX 类添加了 @RequiresApi(21) 注解,且从 AndroidManifest.xml 中移除了 minSdkVersion。这样就可以轻松将 camera-core 集成到 minSdkVersion 低于 21 但需要有条件地使用依赖于 API 21 及更高级别的代码路径的应用中。minSdkVersion 为 21 或更高版本的应用均无需针对此项变更执行任何操作。(Ie7f2eb/200599470

bug 修复

  • 修复了启用 ProGuard 时出现的 AbstractMethodError 问题。(Iae468b/201177844

版本 1.0.0-alpha29

2021 年 9 月 29 日

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

API 变更

  • 由于 API 不再处于实验阶段,因此 ExperimentalUseCaseGroup 注解现已移除。(I01ef5)
  • 移除了 RotationProvider#removeAllListeners()。请改用 RotationProvider#removeListener(...)。(Id9d4a)
  • 更新了 RotationReceiver 类:将 set/clear Listener 改成了 add/remove/removeAll;移除了默认使用主线程的 setListener 变体;为方法添加了注解。(Ib1669)

bug 修复

  • ExtensionMode#BEAUTY 已重命名为 FACE_RETOUCH,以准确反映扩展模式的用途。(I61f54b/198515274
  • 修复了在一个 activity 中使用多个 CameraController 和 PreviewView 时相机意外关闭的问题。(Ibfd18b/197539358

版本 1.0.0-alpha28

2021 年 8 月 18 日

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

API 变更

  • 由于 API 不再处于实验阶段,因此 ExperimentalUseCaseGroupLifecycle 注解现已移除。(I17b85)
  • 重构了 RotationListener,并将其重命名为 RotationProvider。它会继续提供相同的功能,但 API 略有不同。(Idffc5)
  • 已将 TAP_TO_FOCUS_UNSUCCESSFUL 重命名为 TAP_TO_FOCUS_NOT_FOCUSED,并将 TAP_TO_FOCUS_SUCCESSFUL 重命名为 TAP_TO_FOCUS_FOCUSED。已将 OutputSize 设为 final (I099fa)

bug 修复

  • 移除了已废弃的 <EffectName><UseCase>Extender 类、ExtensionsErrorListener 以及相关 ExtensionsManager API。(I3b8c3)

版本 1.0.0-alpha27

2021 年 7 月 21 日

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

API 变更

  • 提升了视口 API,使其不再处于实验阶段。移除了该 API 的实验性注解。(I717ea)
  • CoordinateTransform#getTransform 重命名为 CoordinateTransform#transform,并更新了 JavaDoc (I864ae)

bug 修复

  • 修复了将 PreviewView PERFORMANCE 模式与 Compose 界面一起使用时出现拉伸的问题。(Ie1137b/183864890

版本 1.0.0-alpha26

2021 年 6 月 30 日

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

API 变更

  • 添加了一个新方法 CameraController#getTapToFocusState(),该方法可公开最新的点按对焦结果。(Iaccb0)
  • 为 CameraController 添加了更多 camera-core 功能:用于目标宽高比、目标分辨率、拍摄模式、CameraControl 和自定义执行程序的 getter/setter。(Iea8f2)
  • 添加了一个接收 Surface 旋转方式更改的 RotationReceiver 类。当设备处于固定的竖屏模式/横屏模式时,可以使用此类设置目标旋转角度。(Ib278f)
  • 在 ExtensionsManager 类中公开了新的 getEstimatedCaptureLatencyRange 公共 API。(I6a8ec)
  • 废弃了 ExtensionsErrorListener。目前,此接口仅用于监控启用扩展模式时是否缺少 Preview 或 ImageCapture。CameraX 会自动添加额外的 Preview 或 ImageCapture,使扩展函数能正常运行。之后,不会通过此接口报告任何错误。(I47d9e)
  • 公开了新的 ExtensionsManager getInstance、isExtensionAvailable 和 getExtensionEnabledCameraSelector 公共 API,并废弃了旧的 <EffectName><UseCase>Extender 类和相关 API。(I329e6)

版本 1.0.0-alpha25

2021 年 6 月 2 日

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

API 变更

  • ExperimentalCameraFilter API 现已完成了实验阶段,成为了正式 API。使用此 API 时无需带注解的 OptIn。(I4bc94)
  • 添加了一个可在用例之间转换坐标的实用程序。用法示例:转换在 ImageAnalysis 用例中检测到的坐标,并在预览中突出显示检测到的对象。(I63ab1b/137515129
  • 移除了 CameraViewCameraView 已替换为 CameraController。请参阅迁移指南,了解如何迁移。(Id5005)

bug 修复

  • 已将 ExperimentalUseCaseGroupLifecycle 替换为 ExperimentalUseCaseGroup。(I3b2efb/159033688

版本 1.0.0-alpha24

2021 年 4 月 21 日

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

bug 修复

  • 将实验性 API 的注释 @Experimental 替换成了 @RequiresOptIn。如需调用实验性 API,请使用 androidx.annotation.OptIn,而不是已废弃的 androidx.annotation.experimental.UseExperimental。(Iff226)
  • 修复了 Samsung J5 Prime 上的 PreviewView 拉伸问题 (Ib10b6)

Camera Extensions 和 View 版本 1.0.0-alpha23

2021 年 3 月 24 日

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

API 变更

  • CameraView 将被废弃。请改用 LifecycleCameraController。请参阅迁移指南 (Idac2c)
  • 向 setLinearZoom() 添加了 FloatRange 注解 (I69971)

bug 修复

  • 固定了 camera-view 依赖项以依赖 1.0.0 工件。依赖于 camera-view 不会再导致 Gradle 的依赖项解析自动将 camera-core、camera-camera2 和 camera-lifecycle 升级到最新的 1.1.0 工件;不过,如果这些工件被显式设置为使用 1.1.0,则 camera-view 仍然兼容这些工件。(Ic8fa1b/181599852
  • 修复了 Samsung A3 在 PreviewView 中的预览发生拉伸变形的问题。(Iacb30b/180121821
  • 修复了在初始化相机之前,无法设置相机选择器的问题。(Ic8bd0)

Camera Extensions 和 Camera View 版本 1.0.0-alpha22

2021 年 2 月 24 日

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

API 变更

bug 修复

  • 修复了 ExtensionsErrorListener,以便仅在绑定 Preview 或 ImageCapture 时报告错误。(I5ae39)

Camera Extensions 和 Camera View 版本 1.0.0-alpha21

2021 年 1 月 27 日

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

发布了此版本,现可支持其他相机库工件。

Camera Extensions 和 Camera View 版本 1.0.0-alpha20

2020 年 12 月 16 日

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

发布了此版本,现可支持其他相机库工件。

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

2020 年 11 月 11 日

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

bug 修复

  • 在 camera-view 中引入了 @ExperimentalVideo 注解。此注解标记了提供实验性视频功能的 API,实验性视频功能可能会随着功能的全面开发而发生变化。使用这些 API 的任何方法都应使用 @UseExperimental 注解,并以 ExperimentalVideo 作为 markerClass。(I6d729)

Camera-Extensions 版本 1.0.0-alpha18

2020 年 10 月 14 日

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

bug 修复

  • 缩短了 CameraX 初始化和 bindToLifecycle 的延迟时间 (I61dc5)
  • 如果在附加到 Camera 实例之前调用,<UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,除非在 Builder 或 UseCase 上设置了 targetRotation。(I80fcd)

Camera-View 版本 1.0.0-alpha18

2020 年 10 月 14 日

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

发布了此版本,现可支持其他相机库工件。

Camera-Extensions 版本 1.0.0-alpha17

2020 年 9 月 23 日

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

bug 修复

Camera-View 版本 1.0.0-alpha17

2020 年 9 月 23 日

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

bug 修复

Camera-Extensions 版本 1.0.0-alpha16

2020 年 9 月 16 日

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

bug 修复

  • ExtensionsManager 中添加了方法以获取 Extensions 对象,该对象用于在 Camera 实例上启用和查询扩展项 (I4fb7e)

Camera-View 版本 1.0.0-alpha16

2020 年 9 月 16 日

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

API 变更

  • 移除了 PreviewView#setDeviceRotationForRemoteDisplayMode()PreviewView#getDeviceRotationForRemoteDisplayMode()。这两个方法用于在所需旋转不是屏幕旋转时(例如远程显示模式)自定义预览旋转。现在若要处理非屏幕预览旋转,请使用 Preview#setTargetRotation() 和新添加的 PreviewView#getViewPort(targetRotation) 设置所需的旋转。(Ib62cc)
  • createSurfaceProvider() 已重命名为 getSurfaceProvider()。该方法将始终返回相同的 Preview.SurfaceProvider 实例。(Iff83c)

bug 修复

  • 如果启用了扩展效果且供应商库实现需要在输出 surface 上执行特殊进程,将强制 PreviewView 使用 TextureView。(I0c3cc)
  • 允许任意旋转目标以进行预览。系统会通过新的 TranformationInfoListener 回调计算转换信息并将其实时返回给用户。(I21470)

已知问题

  • 在 PreviewView 中,当最终用户点击 PreviewView 时,不会调用 OnClickListener#onClick()。PreviewView#onTouchEvent() 会错误地消耗触摸事件。此问题将在下一版本中修复。
  • 如果将 ViewPort 与 PreviewView 配合使用,从 PreviewView#getMeteringPointFactory() 获得的 MeteringPoint 可能不正确。

Camera-Extensions 版本 1.0.0-alpha15

2020 年 8 月 19 日

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

bug 修复

  • 现在 ExtensionsManager.init() 方法接受 Context 作为参数,而非不使用任何参数。(Ife754)
  • 当使用不从 Context.getApplicationContext() 返回 Application 对象的 Context 时,初始化应该不会再崩溃。(I3d3c9b/160817073

    Camera-View 版本 1.0.0-alpha15

    2020 年 8 月 19 日

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

bug 修复

  • DisplayOrientedMeteringPointFactory 接受 CameraInfo 实例而不是 CameraSelector,从而确保直接映射至工厂将为其生成点数的 Camera。所有使用 DisplayOrientedMeteringPointFactory 的类也都接受 CameraInfo 实例而不是 CameraSelector。(I400c1)
  • 移除了 TextureViewMeteringPointFactoryPreviewView 提供公共 API (createMeteringPointFactory()),用于创建测光点工厂,而无论使用的是 TextureView 还是 SurfaceView。(Ide693)
  • PreviewView 的 SURFACE_VIEW/TEXTURE_VIEW 实现模式已重命名为 PERFORMANCE/COMPATIBLEPERFORMANCE 是旧 SURFACE_VIEW 模式,而 COMPATIBLE 是旧 TEXTURE_VIEW 模式。(I0edc2)
  • 对于图片拍摄,系统会根据相机方向覆盖元数据中的水平翻转标志。(I28499)

Camera-Extensions 版本 1.0.0-alpha14

2020 年 7 月 22 日

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

Camera-View 版本 1.0.0-alpha14

2020 年 7 月 22 日

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

Camera-Extensions 版本 1.0.0-alpha13

2020 年 6 月 24 日

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

bug 修复

  • 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性接口。(I28f61)

Camera-View 版本 1.0.0-alpha13

2020 年 6 月 24 日

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

bug 修复

  • 当绑定到 LifecycleOwner(其 Lifecycle 在绑定后很快就会过渡到“已销毁”状态)时,CameraView 不再会崩溃并出现 IllegalArgumentException。绑定处于“已销毁”状态的 Lifecycle 将不会尝试打开相机。(I7c2b8)
  • PreviewView StreamState 现在可通过 CameraView.getPreviewStreamState() 获取 (I21a2b)

Camera-Extensions 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

bug 修复

  • 修复了在手机处于“勿扰”模式下,初始化 CameraX 时应用启动崩溃的问题。InitializationException 包含 ListenableFuture,它会将初始化结果设为 CameraUnavailableException,而不是使应用崩溃。(I9909ab/149413835

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

bug 修复

  • 添加了 PreviewView#getBitmap() API,该 API 会返回在 Preview Surface 上显示的内容的位图表示法。(I9b500b/157659818

Camera-Extensions 版本 1.0.0-alpha11

2020 年 5 月 27 日

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

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

新功能

API 变更

bug 修复

  • 添加了 PreviewView#getBitmap() API,该 API 会返回在 Preview Surface 上显示的内容的位图表示法。(I9b500b/157659818

Camera-View 版本 1.0.0-alpha11

2020 年 5 月 27 日

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

API 变更

  • 添加了 PreviewView#getPreviewStreamState API,该 API 允许应用观察预览是否为流式传输。当 PreviewView 处于 TEXTURE_VIEW 模式时,STREAMING 状态还保证预览图像可见。(Ic0906b/154652477
  • 新增了 PreviewView#setDeviceRotationForRemoteDisplayMode() API,以便在应用以远程显示模式运行时为转换计算提供设备旋转。(I59b95b/153514525

bug 修复

  • 修复了搭载 Android 7.0 及更低版本的 FULL/LIMITED/LEVEL_3 相机出现的预览失真问题。对于 Android 版本 7.0 或更低版本,强制使用 ImplementationMode#TEXTURE_VIEW 模式。(I83e30b/155085307
  • PreviewView#createSurfaceProvider() 中移除了 CameraInfo 参数,PreviewView 现在会在内部从 SurfaceRequest 中检索该参数。(If18f0b/154652477
  • 修复了 VideoCapture 在 CameraView 中的默认宽高比为 16:9 的问题。(Ie6a7bb/153237864
  • 修复了当滑出 Preview fragment 然后在 ViewPager2 中往回滑动时出现的 PreviewView 黑屏问题。此外,还修复了 removeView(previewview)addView(previewView) 时出现的问题。(Iab555b/149877652b/147354615
  • 更新了 CameraView#takePicture() API 以允许将图片保存到 UriOutputStream。更新了测试应用以使用 Uri 作为规范化示例。(Ia2459b/153607583
  • 您可以设置 ScaleType 属性,以从 XML 布局中设置 PreviewView 的缩放类型。(I08565b/153015659
  • 移除了 CameraView.ScaleType。改为使用 PreviewView.ScaleType 设置/获取缩放类型。(Ia8974b/153014831
  • 如果 PreviewView 还没有背景颜色,默认为其指定背景颜色。这样可以避免在预览流开始前显示其后面的内容。(I09fad)

Camera-Extensions 版本 1.0.0-alpha10

2020 年 4 月 15 日

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

bug 修复

  • 修复了 Camera-Core 的版本支持问题

Camera-View 版本 1.0.0-alpha10

2020 年 4 月 15 日

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

bug 修复

  • 修复了之前已知的如下问题:PreviewView 的 surfaceView 实现在某些设备上无法正常运行,并且会导致应用在恢复预览后崩溃。(I5ed6b)

Camera-Extensions 版本 1.0.0-alpha09

2020 年 4 月 1 日

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

bug 修复

  • 已更新,可支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02camera-lifecycle:1.0.0-beta02 工件中的 bug 修复

Camera-View 版本 1.0.0-alpha09

2020 年 4 月 1 日发布了 androidx.camera:camera-view:1.0.0-alpha09版本 1.0.0-alpha09 中包含这些提交内容

已知问题

  • 在某些设备上,可能无法将 ImplementationMode.SURFACE_VIEWPreviewView 一起使用,这是因为:用于预览的 SurfaceView 会在其所在的窗口生命周期被终止后,使其 Surface 失效,而重启后,相机会重新打开,并可能会在 SurfaceView 的 Surface 重新回到有效状态之前,尝试恢复预览。目前,您应使用 ImplementationMode.TEXTURE_VIEW

API 变更

  • PreviewView.setImplementationMode() 已重命名为 PreviewView.setPreferredImplementationMode()
  • PreviewView.getImplementationMode() 已重命名为 PreviewView.getPreferredImplementationMode()
  • 使用 PreviewView.createSurfaceProvider(CameraInfo) 替换了 PreviewView.getSurfaceProvider(),前者可在可能的情况下,使用 ImplementationMode.SURFACE_VIEW 获取用于优化预览的可为 null 的 CameraInfo 实例。如果传递了 null 实例,或者如果您将首选实现模式设置为 ImplementationMode.TEXTURE_VIEWImplementationMode.TEXTURE_VIEW 将在内部使用。
  • 以下代码示例展示了以前使用的预览用例如何与 PreviewView 一起使用。

    preview.setSurfaceProvider(previewView.previewSurfaceProvider)
    cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
    

    目前,您可以编写以下代码:

    val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
    previewView.preferredImplementationMode = ImplementationMode.TEXTURE_VIEW
    preview.setSurfaceProvider(previewView.createSurfaceProvider(camera.cameraInfo))
    
  • @UiThread 注解已添加到 PreviewView.getSurfaceProvider(),这意味着必须从主线程调用它。(I192f3)

  • 添加了 PreviewView.setScaleType(),可用于设置预览的缩放类型。它接受 PreviewView.ScaleType 中的某个值,默认值为 PreviewView.ScaleType.FILL_CENTER

  • 添加了 PreviewView.getScaleType()

  • 不再支持使用 implementationMode 属性为 XML 布局中的 PreviewView 设置实现模式。

  • 向 PreviewView 添加了 createMeteringPointFactory() API,以支持将 PreviewView 中的 (x, y) 转换为 MeteringPoint。(Ib36d7)

bug 修复

  • 修复了 PreviewView 尺寸更改后预览不正确的问题。(I71101)

Camera-Extensions 版本 1.0.0-alpha08

2020 年 2 月 26 日

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

Camera-View 版本 1.0.0-alpha08

2020 年 2 月 26 日

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

bug 修复

  • 使用 ExecutorCallback 替换了 SurfaceRequest.provideSurface() 上的 ListenableFuture。这简化了 API,因为无需再处理 provideSurface() 上的异常,并且强制要求不能取消 provideSurface() 回调。这是为了防止旧版设备因过早释放 surface 导致崩溃的问题。SurfaceRequest.Result 对象现在用于跟踪 SurfaceRequest 如何使用所提供的 Surface。(I7854b)
  • SurfaceRequest.setSurface(Surface) 已重命名为 SurfaceRequest.provideSurface(Surface)SurfaceRequest.setWillNotComplete() 已重命名为 SurfaceRequest.willNotProvideSurface()。(I224fe)
  • 通过保留可设置默认 CameraXConfig 提供程序的标志,修复了启用 ProGuard 的应用变体的初始化问题。(I2d6c1)

Camera-Extensions 版本 1.0.0-alpha07

2020 年 2 月 10 日

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

bug 修复

  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)

Camera-View 版本 1.0.0-alpha07

2020 年 2 月 10 日

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

API 变更

  • 现在,在缩放以填充父级 PreviewView 之前,PreviewViewTextureView 实现可将 TextureView 的尺寸设置为相机传感器输出尺寸。如果您希望相机预览完整填充界面中的某个部分(例如整个屏幕),就不应将 PreviewView 的尺寸设置为固定值,或让其封装自己的内容(例如使用属性“wrap_content”),因为这可能会导致相机预览仅填充 PreviewView 的一部分(如果相机传感器输出尺寸较小)。相反,您应将 PreviewView 设置为与其父级一样大(例如使用属性“match_parent”)。(1204869)

bug 修复

  • 更新了 ImageCapture,允许将图片保存到 UriOutputStream。将过载 takePicture 方法合并成了单个方法。更新了测试应用,以将 Uri 用作规范示例。(Ia3bec)
  • Preview.PreviewSurfaceProvider 已重命名为 Preview.SurfaceProvider。开发者使用 SurfaceProvider 时无需再创建自己的 ListenableFuture;现在可通过新的 SurfaceRequest 对象提供 Surface。移除了 Preview.getPreviewSurfaceProvider() 方法,因为在 PreviewPreviewView 等其他类结合使用时,此方法可能会被滥用。(I20105)
  • 之前在 ImageCapture.OnImageSavedCallback.onError()ImageCapture.OnImageCapturedCallback.onError() 中传递的参数现已替换为单个参数 ImageCaptureException,该参数仍然包含之前传递的所有信息。
  • 之前在 ImageCapture.OnImageSavedCallback.onImageSaved() 中传递的文件参数已移除。(I750d2)
  • 更新了 API,CameraInfogetZoomRatio()getMaxZoomRatio()getMinZoomRatio()getLinearZoom() 方法合并到了 getZoomState()(会返回 ZoomState 实例)中。(Ib19fe)

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 中包含这些提交内容

bug 修复

  • 已更新为与内部 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 类。该库仍在开发中。