CameraX

CameraX 是 Jetpack 的一个补充,它可以更轻松地将相机功能添加到您的应用中。该库提供了一些兼容性修复和解决方法,以帮助使开发人员体验在许多设备上保持一致。

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

工件 稳定版 候选版本 Beta 版 Alpha 版
camera-camera2 1.4.0 - - 1.5.0-alpha03
camera-core 1.4.0 - - 1.5.0-alpha03
camera-compose - - - 1.5.0-alpha03
camera-effects 1.4.0 - - 1.5.0-alpha03
camera-extensions 1.4.0 - - 1.5.0-alpha03
camera-feature-combination-query - - - 1.5.0-alpha03
camera-feature-combination-query-play-services - - - 1.5.0-alpha03
camera-lifecycle 1.4.0 - - 1.5.0-alpha03
camera-mlkit-vision 1.4.0 - - 1.5.0-alpha03
camera-view 1.4.0 - - 1.5.0-alpha03
camera-viewfinder - - 1.3.0-beta02 1.4.0-alpha07
camera-video 1.4.0 - - 1.5.0-alpha03
此库上次更新于:2024 年 10 月 30 日

设备测试

CameraX 在我们实验室的许多设备上都经过了测试。要查看实验室中当前设备的列表,请参阅 CameraX 实验室测试设备

声明依赖项

要添加对 CameraX 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读 Google 的 Maven 存储库 以了解更多信息。

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

Groovy

dependencies {
  // CameraX core library using the camera2 implementation
  def camerax_version = "1.5.0-alpha03"
  // 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.5.0-alpha03"
    // 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。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中 现有问题。您可以通过点击星形按钮为现有问题添加您的投票。

创建新问题

更多信息请参阅 问题跟踪文档

相机取景器 Compose 版本 1.0

版本 1.0.0-alpha02

2024 年 6 月 12 日

androidx.camera:camera-viewfinder-compose:1.0.0-alpha02 已发布。版本 1.0.0-alpha02 包含 这些提交

版本 1.0.0-alpha01

2024 年 5 月 14 日

androidx.camera:camera-viewfinder-compose:1.0.0-alpha01 已发布。版本 1.0.0-alpha01 包含 这些提交

新功能

  • 新的库。此库引入了 Compose 原生的 Viewfinder 可组合项,可与 CameraX 和 Camera2 一起使用。可组合的 Viewfinder 支持不同的纵横比,以及触摸事件的处理。

相机取景器版本 1.4

版本 1.4.0-alpha07

2024 年 6 月 12 日

androidx.camera:camera-viewfinder:1.4.0-alpha07androidx.camera:camera-viewfinder-core:1.4.0-alpha07 已发布。版本 1.4.0-alpha07 包含 这些提交

版本 1.4.0-alpha06

2024 年 5 月 14 日

androidx.camera:camera-viewfinder:1.4.0-alpha06androidx.camera:camera-viewfinder-core:1.4.0-alpha06 已发布。版本 1.4.0-alpha06 包含 这些提交

API 更改

  • ViewfinderImplementationMode 枚举重命名为更好地反映底层实现,并为 TransformationInfo.sourceRotation 添加固定常量。(Ic6149
  • 添加了 ZoomGestureDetector.ZoomEvent 来封装缩放手势的状态。(I84cdf

相机版本 1.5

版本 1.5.0-alpha03

2024 年 10 月 30 日

androidx.camera:camera-*:1.5.0-alpha03 已发布。版本 1.5.0-alpha03 包含 这些提交

API 更改

  • 为 RAW 和 RAW + JPEG ImageCapture 添加输出格式 API,设备功能检查在 ImageCaptureCapabilities#getSupportedOutputFormats 中公开。 OUTPUT_FORMAT_RAW 用于捕获 RAW 图像,其格式为 Adobe DNG,而 OUTPUT_FORMAT_RAW_JPEG 用于同时捕获 RAW 和 JPEG 图像。新的 ImageCapture#takePicture API 用于同时图像捕获,它需要提供两个 OutputFileOptions,第一个用于 RAW 图像,第二个用于 JPEG 图像。(Ib0f3d

错误修复

  • 修复了在启用 VideoCapture 时 TCL 设备上的预览和视频曝光不足问题。(Id7a64
  • 修复了使用 PreviewView.getMeteringPointFactory 调用 startFocusMetering 时,在启用效果或绑定 4 个用例(流共享)时无法获取正确的传感器坐标的问题。(I916c5b/345993685
  • 修复了在录制视频且可用存储空间不足时,不会触发 VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE 事件的问题。(I35779b/356399842

版本 1.5.0-alpha02

2024 年 10 月 2 日

androidx.camera:camera-*:1.5.0-alpha02 已发布。版本 1.5.0-alpha02 包含 这些提交

新功能

  • 用于查询设备支持的相机功能的新 API。例如,检查是否可以同时启用 HDR 和 60FPS。它包括 2 个工件:camera-feature-combination-query 和 camera-feature-combination-query-play-services。这是 camera2 的 CameraManager#getCameraDeviceSetup#isSessionConfigurationSupported API 的兼容版本,并提供 Google Play 服务提供的附加数据。

错误修复

  • 修复了 LEGACY 级设备上的 Preview/VideoCapture 目标帧率问题。通过 setTargetFrameRateCamera2Interop API 设置的目标帧率始终被覆盖为 AeFpsRangeLegacyQuirk 提供的值。通过此修复,CameraX 库将尊重通过 setTargetFrameRateCamera2Interop API 设置的值。(Ie2d32
  • 为使用 CameraEffect 的图像捕获添加了闪光灯/手电筒/3A 功能。现在,使用 CameraEffect 捕获的图像应具有与不使用任何 CameraEffect 的图像捕获相同的预捕获和后捕获处理(例如,闪光灯触发、3A 收敛等,在适用时)。(I5ff30
  • 排除了 Samsung SM-A057G 设备上 ImageAnalysis 的有问题的输出尺寸。当 ImageAnalysis 使用大于或等于 1920x1440 的分辨率时,会导致预览变黑。将 ExcludedSupportedSizesQuirk 应用于 SM-A057G 设备以避免此问题。(I63dfeb/365877975
  • 修复了在内部启用流共享机制以将流共享到 PreviewVideoCapture 时,Preview/VideoCapture 目标帧率问题。(I4fdac
  • 启用了解决 Samsung S10e 和 S10+ 设备上 JPEG 图像元数据错误问题的解决方法。通过此修复,如果发生 JPEG 图像元数据错误问题,CameraX 可以成功保存 JPEG 图像,或者在这些设备上调用 ImageProxy.toBitmap() 函数时可以返回正确的 Bitmap 对象。(Iae493b/356428987
  • 禁用了 id 为 0 的 Samsung A52s 后置摄像头的扩展,因为在捕获 HDR 图像时可能会发生原生崩溃,并且对于 BOKEH 或 FACE_RETOUCH 模式,配置捕获会话可能会失败。(I03ec9b/364152642
  • 修复了在录制视频且可用存储空间不足时,不会触发 VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE 事件的问题。(Ia5b4fb/356399842
  • 修复了在 Oppo A5 (CPH1931) 上第二次尝试视频录制失败的问题。(I181d6

版本 1.5.0-alpha01

2024 年 9 月 4 日

androidx.camera:camera-*:1.5.0-alpha01 已发布。版本 1.5.0-alpha01 包含 这些提交

API 更改

  • 提供 API 以设置双并发相机视频捕获的合成设置。设置包括用于混合的 alpha 值、x、y 坐标中的偏移量以及相机帧显示窗口宽度和高度的缩放比例。偏移量、宽度和高度以归一化设备坐标指定。(Ia2b8a
  • CameraProvider.getCameraInfo 公开为正式 API。(I901cd
  • 添加了 API PendingRecording.withAudioEnabled(boolean initialMuted) 来控制初始静音状态。(I635c3b/354829267

错误修复

  • 修复了使用已销毁的 LifecycleOwner 调用 bindToLifecycle 时发生的崩溃。(I6e6d8
  • 修复了在 Motorola Edge 20 Fusion 上与 VideoCapture 绑定时,前置摄像头中的预览为黑屏的问题。(I1fe88
  • 优化了在 PreviewView 中检测缩放手势的配置,以提高流畅度。(I04ffc

相机版本 1.4

版本 1.4.0

2024 年 10 月 30 日

androidx.camera:camera-*:1.4.0 已发布。版本 1.4.0 包含 这些提交

自 1.3.0 以来重要的更改

CameraX 1.4.0 充满了令人兴奋的更新!以下是总结

主要功能:10 位 HDR

  • 轻松捕捉令人惊叹的 HDR 照片和视频。
  • 支持 HLG 和 10 位 HEVC 编码。
  • 享受 10 位 HDR 预览并查询设备功能。
  • 适用于越来越多的设备上的 UltraHDR 图像和 HDR 视频。

其他酷炫功能

  • Kotlin 扩展:添加了 takePictureawaitInstance 暂停函数。
  • 实时效果:应用水印和对象突出显示等效果。
  • CameraController API:用于视频捕获配置的新控件。
  • 预览稳定:查询设备功能并启用稳定。
  • VideoCapture 增强功能:对质量进行更精细的控制并访问更高分辨率。
  • CameraX 扩展集成:与 VideoCapture 和新的 ImageCapture 功能无缝集成。
  • 快门声音 API:轻松检查区域快门声音要求。
  • 屏幕闪光灯:改善前置摄像头的弱光照片。
  • 相机扩展元数据 API:支持 API 以调整扩展强度并在 ExtensionMode#AUTO 中获取当前扩展模式的通知。您可以在我们的 BetaRC 公告中找到更多错误修复。

版本 1.4.0-rc04

2024 年 10 月 16 日

已发布 androidx.camera:camera-*:1.4.0-rc04。版本 1.4.0-rc04 包含 这些提交

错误修复

  • 修复了使用 PreviewView.getMeteringPointFactory 调用 startFocusMetering 时,在启用效果或绑定 4 个用例(流共享)时无法获取正确的传感器坐标的问题。(I916c5b/345993685

版本 1.4.0-rc03

2024 年 10 月 2 日

已发布 androidx.camera:camera-*:1.4.0-rc03。版本 1.4.0-rc03 包含 这些提交

错误修复

  • 为使用 CameraEffect 的图像捕获添加了闪光灯/手电筒/3A 功能。现在,使用 CameraEffect 捕获的图像应具有与不使用任何 CameraEffect 的图像捕获相同的预捕获和后捕获处理(例如,闪光灯触发、3A 收敛等,在适用时)。(I5ff30
  • 优化了 PreviewView 中的捏合缩放平滑度 (I04ffc)
  • 将超级 HDR 与 10 位输出功能解耦,因为超级 HDR 支持不再要求设备具有 10 位输出功能。(I96ff2I0c3b3)

版本 1.4.0-rc02

2024 年 9 月 18 日

已发布 androidx.camera:camera-*:1.4.0-rc02。版本 1.4.0-rc02 包含 这些提交

错误修复

  • 修复了使用已销毁的 LifecycleOwner 调用 bindToLifecycle 时发生的崩溃。(I6e6d8
  • ScreenFlashView 中为 ScreenFlash#apply 添加了可见性动画,同时也修复了由于亮度变化在一段时间后异步完成而导致的错误。(I37cdb)
  • 通过在支持的设备上覆盖框架中的缩放设置,改进了缩放平滑度。

版本 1.4.0-rc01

2024 年 8 月 7 日

已发布 androidx.camera:camera-*:1.4.0-rc01。版本 1.4.0-rc01 包含 这些提交

新功能

  • 添加了实验性的 CameraInfo.getCameraInfo,以便在无需将用例绑定到相机的情况下提供特定的相机信息。(I550d1)

API 更改

  • 添加了 PreviewView.getScreenFlashPreviewView.setScreenFlashOverlayColor API,用于未显式添加 ScreenFlashView 的情况。(I43945)

错误修复

  • 修复了在绑定了 VideoCapture 用例的弱光条件下启用闪光灯拍摄图像时出现的曝光和色彩色调问题。(Ic9814)
  • 修复了启用扩展后中断 takePicture 请求可能会导致无法获取结果,并且下一个 takePicture 请求可能无法正常工作的问题。(Iae78f)
  • 修复了启用扩展时发生的内存泄漏问题。(Iab276)
  • 解决了 Pixel 7/8 和三星 Galaxy S24 系列等设备上的 CameraX 扩展故障。该问题源于发布模式下 Camera2OutputConfigImpl 转换问题,在将 AGP 升级到 8.5.1 并启用代码压缩后出现。(I99598b/354824993)

版本 1.4.0-beta02

2024 年 6 月 12 日

androidx.camera:camera-*:1.4.0-beta02 已发布。版本 1.4.0-beta02 包含 这些提交

API 更改

  • VideoCapture 类似,为预览用例添加 setMirrorMode。它将通过 API 33 及更高版本中的 OutputConfiguration.setMirrorMode 支持预览流的镜像模式开启和关闭,对于旧版 API,它将不执行任何操作。(I821f4)

错误修复

  • 修复了在三星 Tab A8 上,当 ImageCapturePreview + VideoCapture + ImageCapture UseCase 组合下选择 1920x1080 时,应用程序无法成功拍摄照片的问题。(I5a463b/336925549)
  • 修复了持续录制在切换相机后可能无法继续录制的问题。(Icb0a1)

版本 1.4.0-beta01

2024 年 5 月 14 日

androidx.camera:camera-*:1.4.0-beta01 已发布。版本 1.4.0-beta01 包含 这些提交

API 更改

  • 添加了 ZoomGestureDetector.ZoomEvent 来封装缩放手势的状态。(I84cdf

错误修复

  • 修复了一个错误,即持续捕获和点按对焦未使用重复请求 FPS/稳定模式值,这可能会重新创建捕获会话并在某些设备上导致延迟问题或预览冻结。(I7dc0b)
  • 修复了在某些设备上启用 CameraEffect 时无法选择高分辨率的错误。(例如,三星 A32 5G 上的 4000x3000)。(Ie3ed3b/337336152)
  • 修复了在 Pixel 4XL API29 上绑定预览、ImageCaptureVideoCapture(UHD) 时拍摄照片时发生的崩溃。(I5b288)
  • 支持虚拟设备:传递到 ProcessCameraProvider 的上下文将保留设备 ID,以确保在虚拟设备环境中的功能。(I5ba48)

版本 1.4.0-alpha05

2024 年 4 月 17 日

androidx.camera:camera-*:1.4.0-alpha05 已发布。版本 1.4.0-alpha05 包含 这些提交

新功能

  • ProcessCameraProvider 转换为 Kotlin 实现。(I46d4f)
  • 添加了 ImageCapture.takePicture 悬挂函数,以便能够以 Kotlin 风格的方式调用它。(I920be)

API 更改

  • ImageCapture 添加输出格式 API,并向 ImageCaptureCapabilities 添加 getSupportedOutputFormats 方法以查询设备功能。默认输出格式值为 OUTPUT_FORMAT_JPEG,它以 JPEG 格式捕获 SDR 图像。当设备支持超级 HDR 且输出格式设置为 OUTPUT_FORMAT_JPEG_ULTRA_HDR 时,CameraX 将使用 JPEG/R 图像格式捕获超级 HDR 压缩图像。该格式与 SDR JPEG 格式向后兼容,并支持 HDR 内容的渲染。这意味着在旧版应用或设备上,图像无缝显示为普通 JPEG;在已更新为完全支持该格式的应用和设备上,图像显示为 HDR。(I5de50)
  • CameraInfo 中添加 PhysicalCameraInfo 以查询物理相机信息,并在 CameraSelector 中添加物理相机 ID 设置器/获取器 (Ic5b90)
  • CameraController#COORDINATE_SYSTEM_VIEW_REFERENCED 替换为 ImageAnalysis#COORDINATE_SYSTEM_VIEW_REFERENCED。常量的值保持不变。这是为了将所有常量合并到一个地方。(I890bb)
  • 新的 RetryPolicy API 使开发人员能够自定义 CameraX 初始化的重试行为。(I36dd2)
  • 启用 ImageCaptureLatencyEstimate 对象的创建以帮助进行可测试性 (Iaba99)
  • 添加 ImageAnalysis#COORDINATE_SYSTEM_SENSOR。当使用此选项时,MlKitAnalyzer 将返回相机传感器坐标系中的坐标。(I3ec61)
  • 公开了扩展元数据 API。新的 CameraExtensionsInfoCameraExtensionsControl 接口允许应用程序监控和调整扩展强度设置。应用程序可以通过新添加的 ExtensionsManager#getCameraExtensionsInfo()ExtensionsManager#getCameraExtensionsControl() 方法获取 CameraExtensionsInfoCameraExtensionsControl 实例。(I28e1a)
  • 添加了 ProcessCameraProvider.awaitInstance,它是 ProcessCameraProvider.getInstance 的一个悬挂版本 (Ib22b9)
  • 添加了 PreviewView#getSensorToViewTransform() API。该矩阵表示从相机传感器坐标到 PreviewView 坐标的转换。这可用于将坐标从一个 UseCase 转换为另一个。例如,将 ImageAnalysis 中检测到的对象的坐标转换为 PreviewView 叠加层。(I947ab)
  • 使 camera-viewfinder-core API 更通用,以便 camera-viewfindercamera-viewfinder-compose 可以使用它。(I1e295)
  • ViewfinderSurfaceRequest 添加 getSurface 函数。(I781a0)
  • camera-viewfinder 中使用 camera-viewfinder-core 并弃用 ViewfinderSurfaceRequestCameraViewfinder。(I6198c)
  • 添加了 ZoomGestureDetector,它解释专门为捏合缩放活动配置的缩放手势。(Ifafbf)

错误修复

  • 修复了与分析器默认目标分辨率设置相关的 ImageAnalysis 分辨率选择问题:即使应用程序设置了不同的分析器默认分辨率设置,目标分辨率也被错误地保留为 640x480。如果应用程序遇到此问题 (1.3.0 ~ 1.3.2) 并且无法升级到使用包含解决方案的较新版本,则可以直接使用首选分辨率和匹配的 AspectRatioStrategyResolutionSelector 设置到 ImageAnalysis UseCase 来解决此问题。(I81f72b/330091012)
  • 修复了如果当前请求失败,则排队的 takePicture 请求可能无法运行的问题。(Ie0801)
  • 使无效 JPEG 数据检查应用于 Vivo X60 和 X60 Pro 设备。这可以修复这些设备上的异常大的图像问题。(I82247b/288828159)
  • 修复了三星 A24 设备上不正确的 JPEG 图像元数据问题。通过修复,CameraX 可以成功保存 JPEG 图像,或者在三星 A24 设备上调用 ImageProxy.toBitmap() 函数时可以返回正确的 Bitmap 对象。(I8d6ebb/309005680)

  • 如果拍摄的图像大于 10 MB,则在所有三星设备上应用无效 JPEG 数据检查。这可以修复三星设备上异常大的图像问题。(Ic2a65b/288828159
  • 在 CameraX 扩展中删除了 ImageAnalysis 支持,因为许多 OEM 的扩展实现无法很好地与 ImageAnalysis 协同工作,并且可能导致不一致的问题。(I2d926

版本 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 实现,该 API 可以高效地操作相机输出。
  • OverlayEffect:用于使用 Android 的 Canvas API 绘制叠加层。这允许应用在相机输出上添加水印或突出显示检测到的对象。
  • 预览用例的 DynamicRange API:现在可以在预览用例上设置动态范围,独立于视频用例。这允许仅预览使用 HDR 动态范围,例如 HLG10。新的 API 也可在 CameraInfo 中使用,以查询每个相机支持的动态范围。

API 更改

  • ScreenFlashUiCompleter 重命名为 ScreenFlashListener,并将 ScreenFlashUiCompleter#getExpirationTimeMillis 移动到 ScreenFlash#applyexpirationTimeMillis 参数。(I13944
  • 添加了新的 API,允许在预览用例上设置动态范围,并查询每个相机支持的动态范围。这允许仅使用预览用例使用 HDR 动态范围(例如 HLG10),不再需要同时绑定 VideoCapture。(If25e3
  • getMirroring() 重命名为 isMirroring()I47063
  • 在 CameraX 中添加了实时静止图像捕获延迟估计支持。相机扩展使应用程序能够使用一个 API,该 API 提供捕获所需时间的估计值。该估计值考虑了当前的环境条件、相机状态,并包括处理多帧捕获请求所花费的时间,以及在必要时对处理后的缓冲区进行编码的任何额外时间。(I05c3a
  • ScreenFlashUiControl 重命名为 ScreenFlash,将 ScreenFlashUiControl#applyScreenFlashUi 重命名为 ScreenFlash#apply,将 ScreenFlashUiControl#clearScreenFlashUi 重命名为 ScreenFlash#clear,并添加了 getScreenFlashUiApplyTimeoutSeconds 方法,而不是直接公开 SCREEN_FLASH_UI_APPLY_TIMEOUT_SECONDS。(Iccdd0

错误修复

  • 修复了启用扩展时导致活动或片段未释放的内存泄漏问题。(I14215
  • 修复了在应用增大缩放比例时 getZoomRatio 错误地返回减小值的问题。(I4aa0db/317543616
  • ImageCapture#ScreenFlash#clear 事件在 ImageCapture 解绑或相机关闭时立即调用,还修复了一些由于这些情况下捕获未正确完成而从未调用该事件的错误。(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 中添加了前置摄像头图像捕获的屏幕闪光功能支持。CameraX 将负责框架端 API 处理,并根据需要(例如,应用屏幕颜色/亮度更改后的 AE 预捕获触发)与应用程序的 UI 更改同步时间。应用只需在提供给 CameraX 的 ScreenFlashUiControl 接口中添加其 UI 端实现。(I8ae84
  • 在 CameraX 中添加了屏幕闪光功能 UI 端实现支持。应用将能够从 PreviewView 或新添加的 ScreenFlashView 获取基本的 ImageCapture.ScreenFlashUiControl 实现,这将添加一个单色叠加视图并在屏幕闪光照片捕获期间最大化屏幕亮度。(I1810e

API 更改

  • 支持新的扩展功能(后视和捕获过程进度):添加了 ImageCapture#getImageCaptureCapabilities() API,供应用查询后视和捕获过程进度回调的功能。应用可以使用 ImageCapture.Builder#setPostviewEnabled() 启用后视。可以使用 ImageCapture.Builder#setPostviewResolutionSelector() 选择后视大小。调用 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 实例。一个常见的用例是,当应用程序尽力在可行的情况下录制 UHD 视频时,但设备的 CamcorderProfile 不包含 UHD 设置,即使编解码器能够录制 UHD 视频。(Iedbe2b/263961771
  • ImageAnalysis 输出格式的 getter/setter 添加到 CameraController。(I9a96cb/308240643

错误修复

  • 来自 相机 1.3.1:改进了 ProcessCameraProvider#bindToLifecycle() 的性能。主要更改是优化识别 UseCases 最合适的尺寸组合的过程。最佳结果会根据具体的 UseCase 组合以及目标设备支持的输出尺寸数量而有所不同。(I454f2
  • 允许在启用扩展时使用 VideoCapture。(I91f32
  • 修复了三星 A71 和 M51 系列设备上捕获的 JPEG 图像过大的问题。捕获的 JPEG 图像在 JFIF 压缩数据段中包含冗余的 0 填充数据。这会导致捕获的图像文件大小过大。这些冗余的 0 填充数据将被移除,使捕获的图像具有正常的图像文件大小。(I01afcb/288828159
  • 在 Pixel 上禁用 ImageAnalysis 支持,以避免 Pixel 上意外返回非空 ImageAnalysis 支持尺寸的错误。(I7ec31
  • 修复了启用扩展时 CPU 负载和功耗增加的性能问题。(Ibdccb
  • 将 Snapdragon 480 添加到 CameraUseInconsistentTimebaseQuirk 中。这修复了 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

错误修复

  • 修复了在后置摄像头启用扩展散景或面部磨皮以及 ImageAnalysis 时,三星 Galaxy S23 Ultra 5G 上出现的预览变黑问题。(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)

错误修复

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

版本 1.3

版本 1.3.4

2024 年 6 月 12 日

androidx.camera:camera-*:1.3.4 已发布。版本 1.3.4 包含 以下提交

错误修复

  • 修复了在应用增大缩放比例时 getZoomRatio 错误地返回减小值的问题。(I4aa0db/317543616
  • 修复了静止捕获/点按对焦未使用重复请求 FPS/稳定模式值的问题,这可能会重新创建捕获会话并在某些设备上导致延迟问题或预览冻结。 (I7dc0b)
  • 修复了使用 FRAME_RATE_RANGE_UNSPECIFIED 调用 setTargetFrameRate 时帧率设置为较低值的问题。 (I78c61)

版本 1.3.3

2024 年 4 月 17 日

androidx.camera:camera-*:1.3.3 已发布。版本 1.3.3 包含 以下提交

错误修复

  • 修复了与分析器默认目标分辨率设置相关的 ImageAnalysis 的分辨率选择问题:即使应用程序已设置不同的分析器默认分辨率设置,目标分辨率也会错误地保持为 640x480。如果应用程序遇到此问题(1.3.0 ~ 1.3.2)并且无法升级以使用包含解决方案的较新版本发布,则可以直接将具有首选分辨率和匹配 AspectRatioStrategyResolutionSelector 设置到 ImageAnalysis UseCase 可以解决此问题。 (I81f72, b/330091012)

版本 1.3.2

2024年3月6日

androidx.camera:camera-*:1.3.2 已发布。版本 1.3.2 包含 以下提交

错误修复

  • 修复了 Samsung A24 设备上的 JPEG 元数据问题。CameraX 现在可以准确地保存图片,并且 ImageProxy.toBitmap() 函数返回正确的 Bitmap 对象。 (I8d6eb, b/309005680)
  • 由于存在问题,已删除 Redmi Note 9 Pro 设备上的 9280x6944 分辨率选项。 (Ia23da)

版本 1.3.1

2023 年 12 月 13 日

androidx.camera:camera-*:1.3.1 已发布。 版本 1.3.1 包含以下提交。

错误修复

改进了 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 毫秒
  • 将 Snapdragon 480 添加到 CameraUseInconsistentTimebaseQuirk 中。这修复了 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 包含以下提交。

错误修复

  • 通过确保初始化和反初始化事件按正确的顺序触发来提高扩展程序的稳定性。这修复了在切换扩展程序模式或切换相机时的一些黑屏预览问题。 (Iddaac)
  • 修复了在某些设备上启用某些扩展模式时,ImageAnalysis 无法与 ImageCapture 和预览一起绑定 的问题。此修复将在应用通过 ExtensionsManager#isImageAnalysisSupported() 查询 ImageAnalysis 可用性时返回正确的值。 (I7d538)
  • 修复了在 Xiaomi 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 以允许录制在与其 Recorder 附加的 VideoCapture 重新绑定时连续录制。 (I517c6)

错误修复

  • 修复了当流与 VideoCapture 和预览共享时发生的崩溃。还修复了在启用流共享时 LEGACY 设备上的黑屏问题。
  • 修复了 Samsung S7 (SM-G930T, SM-G930V) 系列设备上捕获的 JPEG 图片大小过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含冗余的 0 填充数据。这会导致捕获的图片文件大小过大。这些冗余的 0 填充数据将被移除,使捕获的图片具有正常的图片文件大小。 (I407b0, b/288828159)
  • 修复了 Samsung S22 (SM-S901B, SM-S901B/DS) 和 S22+ (SM-S906B) 系列设备上捕获的 JPEG 图片大小过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含冗余的 0 填充数据。这会导致捕获的图片文件大小过大,在 S22 SM-S901B/DS 设备上约为 13MB。这些冗余的 0 填充数据将被移除,使捕获的图片具有正常的图片文件大小。 (I73be9, b/288828159)
  • 修复了 Samsung A5、A52、A70 和 A72 系列设备上捕获的 JPEG 图片大小过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含冗余的 0 填充数据。这会导致捕获的图片文件大小极大(例如约 32MB 或甚至 96 MB)。这些冗余的 0 填充数据将被移除,使捕获的图片具有正常的图片文件大小。 (I97c4d, b/288828159)
  • 修复了启用扩展程序时拍摄照片时的原生崩溃 (I698f5)

版本 1.3.0-beta02

2023年7月26日

androidx.camera:camera-*:1.3.0-beta02 已发布。 版本 1.3.0-beta02 包含以下提交。

错误修复

  • 使用手电筒作为 Pixel 4 和 5 变体的闪光灯,以提高弱光环境下的捕获质量 (I56ff5, b/280221967)
  • 修复了 Samsung A5 (2017) 系列设备上捕获的 JPEG 图片大小过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含冗余的 0 填充数据。这会导致捕获的图片文件大小约为 32 MB。这些冗余的 0 填充数据将被移除,使捕获的图片具有正常的图片文件大小。 (I29837, b/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 类表示图像的动态范围。这可用于通过 VideoCapture.Builder#setDynamicRange() 选择高动态范围格式作为 VideoCapture 的输出。 (Ib0377)
  • ExtensionsManager 添加了一个 isImageAnalysisSupported API,应用程序可以通过它确定在启用扩展程序时,ImageAnalysis 用例是否可以与预览和 ImageCapture 一起绑定。 (I1bc63)

  • Recorder 获取的新 VideoCapabilities 类可用于查询设备上视频录制支持的动态范围和质量。QualitySelectorgetSupportedQualities()isQualitySupported() 方法已弃用。请改用 VideoCapabilitiesgetSupportedQualities()isQualitySupported() 方法。(I04014
  • CameraController#setVideoCaptureTargetQuality() 重命名为 setVideoCaptureQualitySelector 并且接受参数 QualitySelector,这为视频质量设置提供了更大的灵活性。CameraController#getVideoCaptureTargetQuality() 相应地更改为 getVideoCaptureQualitySelector。(I520ed
  • 删除了视频功能的实验性注释。视频功能现已稳定。(I1a113

错误修复

  • 在三星 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
  • VideoRecordEvent.Finalize 现在将在 Recording 对象因垃圾回收而停止时使用错误代码 ERROR_RECORDING_GARBAGE_COLLECTED 完成。(Iba974

错误修复

  • 修复了当 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
  • AE 算法支持的 FPS 范围现在可以通过 CameraInfo#getSupportedFrameRateRanges() 查询。(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()ConcurrentCameraConfigSingleCameraConfigConcurrentCameraIab1c1
  • 使 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() 参数为非空。添加了一个 #clearEffects() API 用于清除效果。应用程序应该调用 #clearEffects() 来删除效果。(I4b4d9
  • ViewfinderSurfaceRequest.Builder 添加第二个构造函数,以获取用于复制构造函数的构建器(I621a7

错误修复

  • 修复了当关闭摄像头时调用扩展程序 API 的应用程序可能会崩溃的问题(Ib27e5
  • 修复了 VideoCapture 在某些设备上无法与前置摄像头一起使用的问题。例如,在三星 Galaxy S23 和小米 2107113SG 上。(Ibec7eb/270656244
  • 修复了在 Android 10 或更高版本中使用外部存储公共文件夹中的 File 拍摄照片始终失败的问题。请注意,在 Android 10 中,使用外部存储公共文件夹中的 File 拍摄照片还需要在 application 标签中将 requestLegacyExternalStorage 设置为 true。(I11b2c
  • 修复了 DefaultSurfaceProcessor 中的 RejectedExecutionException 崩溃。当绑定 VideoCapture 并暂停 Activity 时,可能会发生此崩溃。(Idb46ab/273713906

版本 1.3.0-alpha05

2023 年 3 月 22 日

androidx.camera:camera-*:1.3.0-alpha05 已发布。版本 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 UseCase;目标为 PREVIEW|VIDEO_CAPTURE 的效果将在复制到预览和 VideoCapture 流之前应用于共享流。(Iee6f3

错误修复

  • Camera 1.2.2 开始:修复了在某些设备(例如 Pixel)上启用 Proguard 时 CameraX 扩展无法正常工作的问题。(I90aa2
  • 修复了 PreviewView 的一个错误,如果应用程序本身处理屏幕方向,则预览在旋转时可能会失真。这仅在某些设备上发生。可以在 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 包含以下提交。

新功能

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

  • 之前,当在摄像头硬件级别 FULL 及以下绑定“Preview、VideoCapture、ImageAnalysis”,或在硬件级别 LEGACY 绑定“Preview、VideoCapture、ImageCapture”时,CameraX 会抛出 IllegalArgumentException
  • 新的行为是绑定将工作且不会抛出异常。相反,CameraX 使用 OpenGL 将共享流复制到预览和 VideoCapture。
  • 由于缓冲区复制的成本,应用程序可能会看到延迟和功耗增加。

API 更改

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

错误修复

  • 修复了在某些三星设备上,当应用程序过快暂停/恢复时发生的扩展崩溃问题。(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(),它可以与 QualitySelector 结合使用以支持更多视频分辨率。(I8a082
  • 添加了 Recorder.Builder#setTargetVideoEncodingBitRate 用于设置目标视频编码 BitRate 以及 Recorder#getTargetVideoEncodingBitRate 用于获取目标视频编码 BitRate。(I5984d

错误修复

  • 修复了当没有闪光灯单元且闪光灯模式打开时 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 后不再使用的 Metadata、OnVideoSavedCallbackOutputFileOptionsOutputFileResults 类。(I38cd8
  • 应用新的视频捕获 API。getVideoCaptureTargetSizesetVideoCaptureTargetSize 方法分别替换为 getVideoCaptureTargetQualitysetVideoCaptureTargetQuality 方法,因为 setTargetResolution 不再受支持。(I2a1d5

错误修复

  • 删除已弃用的 core.VideoCapture API。(I531e0
  • 修复了在没有存储权限的情况下拍摄照片时不调用 onError 回调的问题。(I936dbb/244807669
  • 改进摄像头扩展的质量和可靠性。由于 Bokeh 支持、图像捕获和预览无法恢复的问题,在使用 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 的摄像头馈送。请查看 示例代码 以了解示例。

API 更改

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

错误修复

  • 添加了一个特性,允许某些有问题的设备在遇到捕获失败时重试一次捕获。(Id4795
  • 修复了 PreviewView SurfaceView 实现 ViewPager2 上的黑屏问题。作为修复的一部分,如果请求的分辨率没有更改,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 包含以下提交。

错误修复

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

版本 1.2.2

2023 年 3 月 22 日

androidx.camera:camera-*:1.2.2 已发布。版本 1.2.2 包含以下提交。

错误修复

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

版本 1.2.1

2023 年 1 月 25 日

androidx.camera:camera-*:1.2.1 已发布。版本 1.2.1 包含这些提交。

错误修复

  • 修复了在某些三星 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。
  • 新增实验性零快门延迟 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 和 Preview 用例且纵横比为 16:9 时的低帧率问题。
  • 修复了在某些三星设备上启用 BOKEH 扩展程序且用户切换摄像头时出现的预览变黑问题。
  • 修复了 Samsung J7 Prime (SM-G610M) 和 J7 (SM-J710MN) 在 API 级别 27 设备上 Preview/VideoCapture 拉伸问题。
  • 禁用了解决三星 Android T 上前置摄像头水平翻转自动对焦区域的解决方法,因为该问题已修复。

版本 1.2.0-rc01

2022 年 10 月 24 日

androidx.camera:camera-*:1.2.0-rc01 已发布。版本 1.2.0-rc01 包含这些提交。

API 更改

  • OutputConfiguration 添加 setStreamUseCase API。用户可以为流会话指定流用例,覆盖 CameraX 的内部逻辑以选择流用例,以便根据需要进行优化。(Ib1a95)。

错误修复

  • 修复了 Samsung J7 Prime (SM-G610M) 和 J7 (SM-J710MN) 在 API 级别 27 设备上 Preview/VideoCapture 拉伸问题。分辨率 1920x1080 导致 Preview/VideoCapture 图像被拉伸。添加了解决方法,不为 Preview 或 VideoCapture 选择 1920x1080 分辨率,以避免图像拉伸问题。(I0e04e)。
  • 修复了在某些华为设备上使用 VideoCapture 和 Preview 用例且纵横比为 16:9 时的低帧率问题。(If8c88b/223643510)。
  • 修复了当 Preview 的 SurfaceProvider 未设置时,相机打开失败的问题。作为修复的一部分,现在不会将未设置 SurfaceProvider 的 Preview 配置到相机捕获会话中。(I99681)。

版本 1.2.0-beta02

2022 年 9 月 21 日

androidx.camera:camera-*:1.2.0-beta02 已发布。版本 1.2.0-beta02 包含这些提交。

API 更改

  • 添加 setOutputImageRotationEnabled 的 API 级别要求(I26e3eb/240993561)。

错误修复

  • 禁用了解决三星 Android T 上前置摄像头水平翻转自动对焦区域的解决方法,因为该问题已修复。(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 功能集成,包括条形码扫描、人脸检测、文本检测等。请在此处找到示例代码 here
  • 新增实验性 零快门延迟 API。优化捕获管道以获得更好的延迟,同时保持良好的图像质量。当捕获模式设置为 CAPTURE_MODE_ZERO_SHUTTER_LAG 时,预计快门按钮被点击到拍摄照片之间的延迟将最小化,与其他捕获模式相比。在不支持 ZERO_SHUTTER_LAG 的设备上,它将回退到 CAPTURE_MODE_MINIMIZE_LATENCY。
  • ImageAnalysis.AnalyzerMLKitAnalyzer 设为正式 API。
  • 公开用于将位置元数据设置为已保存视频的 API。
  • ImageAnalysis.Analyzer#getTargetResolutionOverride() 重命名为 ImageAnalysis.Analyzer#getDefaultTargetResolution()

错误修复

  • 修复了 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)。

错误修复

  • 修复了在解除绑定预览的情况下拍摄照片的问题(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)。

错误修复

  • 添加了自动对焦默认超时 5000 毫秒,如果 FocusMeteringAction 未取消且自动对焦部分在此期间未收敛,则将使用 isFocusSuccessful false 完成自动对焦部分。(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 零快门延迟 API 作为实验性功能。

API 更改

  • ImageCapture 中添加新的捕获模式 CAPTURE_MODE_ZERO_SHUTTER_LAG,并在 CameraInfo 中添加 isZslSupported 以查询设备功能。CAPTURE_MODE_ZERO_SHUTTER_LAG 模式旨在为即时捕获提供最小的延迟。它是基于环形缓冲区实现的,该缓冲区缓存中间捕获结果,以便在用户按下按钮拍摄照片时进行后期重新处理。如果绑定了 {@link VideoCapture} 或闪光灯模式不是关闭状态或 OEM 扩展程序已打开,则此模式将自动禁用。(I9ae74)。
  • 添加 ImageAnalysis.getBackgroundExecutor() 方法(Icc945)。

错误修复

  • 修复了 ImageCapture takePicture 方法在报告的设备上关闭手电筒的问题。(Ib5eb5b/228272227)。
  • 修复了一个错误,即在获取 CONTROL_ZOOM_RATIO_RANGE 特性时未处理 AssertionError。(/Ia248ab/231701345)。

版本 1.2.0-alpha01

2022 年 5 月 18 日

androidx.camera:camera-*:1.2.0-alpha01 已发布。版本 1.2.0-alpha01 包含这些提交。

新功能

  • 新库 camera-mlkit-vision 已发布

错误修复

  • 修复了当启用回退策略时,QualitySelector 无法录制 UHD 视频的问题。当 VideoCapture 在 FULL 或更高硬件级别的摄像头设备上与 ImageCapture 和 Preview 绑定时,会出现此问题。QualitySelector 的回退策略导致 VideoCapture 错误地获取 FHD 分辨率。实际上,此用例组合支持 UHD 分辨率,并且应采用该分辨率。(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 以来重要更改

  • View、Extension 和 Video Capture 库发布了第一个 RC 版本。从 1.1.0-beta01 开始,所有 CameraX 库将统一版本号。这将帮助开发者更容易跟踪版本,并降低大型版本兼容性矩阵的复杂性。
  • 引入了新的公共 API 和功能,包括
  • 添加了官方 camera-video 库以支持视频捕获用例。
  • YUV 到 RGB 的转换和旋转功能(ImageAnalysis.Builder.setOutputImageRotationEnabledsetOutputImageFormat
  • 通过允许 CameraX 应用程序在相机被其他应用程序中断并焦点返回时恢复相机,支持多窗口模式。
  • 通过修复一些预览问题,确保 CameraX 在折叠设备上正常工作。
  • 添加了一个 CameraState API,它将通过 CameraInfo 公开。
  • 添加了一个 API ProcessCameraProvider.getAvailableCameraInfos() 用于直接检索有关可用摄像头的信息
  • 当启用扩展程序时,ImageCapture#OnImageCapturedCallback 的输出 JPEG 格式。
  • CameraInfo 中添加了一个 API isFocusMeteringSupported,允许应用程序检查给定的 FocusMeteringAction 是否在当前相机上受支持。
  • 公开了 getResolutionInfo API,以提供 Preview、ImageCaptureImageAnalysis 的分辨率信息。
  • 添加了一个新的 API ImageCapture.Builder#setJpegQuality,允许在拍照时更改输出 JPEG 图像压缩质量。
  • CameraSelector#filter 添加到公共 API 中,以便根据 CameraSelector 过滤 CameraInfos 列表。
  • 添加了 Camera2CameraControl.clearCaptureRequestOptions 用于清除现有的捕获请求选项。
  • 添加了一个实验性 API,用于将 CameraController 与外部图像处理库一起使用。例如 MLKit
  • 添加了实验性 API CameraInfo#getCameraSelector(),它返回其相机唯一的 CameraSelector
  • 将多个实验性 API 提升为正式的公共 API
  • 将注释 @Experimental 替换为 @RequiresOptIn 以用于实验性 API。要调用实验性 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 的更改
  • MediaStoreOutputOptions.getCollection 已重命名为 MediaStoreOutputOptions.getCollectionUri
  • ActiveRecording 已重命名为“Recording”以减少冗余。
  • QualitySelector 创建器 API 更改为基于列表的 API

错误修复

  • 修复了当启用扩展模式并设置 ImageCapture#CAPTURE_MODE_MAX_QUALITY 模式时,YuvToJpegProcessor EOFException 问题。
  • 修复了由于视频录制关闭导致编解码器配置失败的问题
  • 修复了以 FHD 录制时预览/视频纵横比拉伸的问题
  • 修复了某些设备上暂停和恢复后音频/视频不同步的问题
  • 修复了在低光环境下闪光模式为自动或始终开启时,轻触对焦(startFocusAndMetering)期间触发闪光灯的问题。

版本 1.1.0-rc02

2022 年 6 月 1 日

androidx.camera:camera-*:1.1.0-rc02 已发布。 版本 1.1.0-rc02 包含以下提交。

错误修复

  • 修复了 ImageCapture.takePicture() 上的 NullPointerException。(I92366b/230454568b/229766155)。
  • 修复了获取 CONTROL_ZOOM_RATIO_RANGE 特性时未处理 AssertionError 的错误。(Ia248ab/231701345

版本 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 版本

错误修复

  • 修复了当 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

错误修复

  • 修复了在多窗口中旋转设备后,活动未重新启动时,PreviewView 中预览变成侧面的问题。(I1ea36b/223488673
  • 修复了一个多窗口问题,即当焦点切换回应用程序时,它无法恢复相机,当 (1) 其他高优先级应用程序打开不同的相机 (2) 设备为三星 Android 12 设备时。(I7e9f2
  • 包含针对检查闪光灯可用性时崩溃的设备的解决方法。这些设备将无法使用手电筒。(If26a3b/216667482
  • 修复了应用程序使用扩展程序并启用 proguard 时发生的 AbstractMethodError 问题。(I7cbafb/222726805
  • 强制在摩托罗拉 razr 5G 设备上禁用散景扩展模式,这会导致预览屏幕变黑。(I35d49
  • 修复了某些三星 API 29 之前的设备上暂停和恢复后音频/视频不同步的问题。(I64622b/202798609b/202798572
  • 修复了索尼 G3125 上暂停和恢复后音频/视频不同步的问题。(I2a1a5b/202799148
  • 修复了当 Recorder 遇到 InvalidConfigException 时发生的崩溃。但是,此修复程序仅防止应用程序崩溃,而不会解决 InvalidConfigException 的根本原因。如果仍然无法配置 Recorder,应用程序将在其开始录制时收到错误回调。(I89c29b/213617227

外部贡献

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

版本 1.1.0-beta02

2022 年 2 月 23 日

androidx.camera:camera-*:1.1.0-beta02 已发布。 版本 1.1.0-beta02 包含以下提交。

API 更改

  • 添加了通过 Camera2Interop 指定物理摄像头 ID 的功能。(I5aed8

错误修复

  • 修复了 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

错误修复

  • 修复了在某些 Android O(API 26)之前的设备上录制视频时发生的崩溃。(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.HDQualitySelector.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

错误修复

  • 修复了在 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
  • 修复了在 Pixel 1 上启动 UHD 视频录制后,预览会出现交错彩色线条的问题。(I833c6b/205340278

版本 1.1.0-alpha11

2021 年 11 月 17 日

androidx.camera:camera-*:1.1.0-alpha11 已发布。版本 1.1.0-alpha11 包含这些提交。

API 更改

  • CameraSelector#filter 添加到公共 API 中,以便根据 CameraSelector 过滤 CameraInfos 列表。(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} 映射到另一个 {UseCase}。例如,将使用 ImageAnalysis 检测到的面部坐标映射到 Preview。(I9ff1e

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

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

错误修复

  • 修复了在弱光环境下,当闪光灯模式为自动或始终开启时,在点击对焦(startFocusAndMetering)期间触发闪光灯的问题。(Id4c11
  • 在 Pixel 2 XL/Pixel 3 XL 上禁用 HDR+ 的 MINIMIZE_LATENCY 模式以降低延迟。(Ib6270b/203505523

外部贡献

版本 1.1.0-alpha10

2021 年 10 月 13 日

androidx.camera:camera-*:1.1.0-alpha10 已发布。版本 1.1.0-alpha10 包含这些提交。

新功能

  • 发布 androidx.camera:camera-video:1.1.0-alpha10 作为视频的第一个 alpha 版本。在后续版本中将修复 一些已知问题

API 更改

  • 在所有 CameraX 类中添加了 @RequiresApi(21) 注解,并从 AndroidManifest.xml 中删除了 minSdkVersion。这将允许 camera-core 轻松集成到 minSdkVersion 小于 21 但希望有条件地使用依赖于 API 21 及更高版本的代码路径的应用程序中。对于任何 minSdkVersion 为 21 或更高的应用程序,此更改不需要任何操作。(Ie7f2eb/200599470

错误修复

  • 抛出 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

错误修复

  • 修复了在 MAXIMIZE_QUALITY 模式下拍摄的照片模糊的问题。(I173a9b/193823892
  • 修复了三星 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 包含这些提交。

新功能

  • image analysis 配置添加了 setOutputImageFormat API。用户可以选择 ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888。默认情况下,将选择 ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888。(I7902d

API 更改

  • 现在 API 不再是实验性的,因此删除了 ExperimentalUseCaseGroupLifecycle 注解。(I17b85

错误修复

  • 修复了华为 P20 Lite 上预览屏幕过亮的问题。此问题仅在某些特殊的预览分辨率与较大的缩放值一起使用时才会发生。(Idefceb/192129158
  • 修复了在某些设备上,将闪光灯模式设置为 FLASH_MODE_ON 后,紧接着拍照时闪光灯无法工作的问题。(Ieb49b
  • 修复了如果 VideoCaptureImageCapturePreview 绑定,则在拍照时预览会暂停一段时间的问题。(I56197b/193864120
  • 允许 ImageAnalysis 选择大于 1080p 的分辨率。当与 PreviewImageCapture 绑定时,高于 LIMITED 级别以上的设备可以为 ImageAnalysis 支持 RECORD 大小的分辨率。折衷方案是 ImageCapture 选择的分辨率也需要是 RECORD 大小的分辨率。要成功为 ImageAnalysis 选择 RECORD 大小的分辨率,应在 ImageCaptureImageAnalysis 上都设置 RECORD 大小的目标分辨率。这表示应用程序清楚地理解了这种折衷方案,并且更希望 ImageAnalysis 具有更大的分辨率,而不是 ImageCapture 具有最大的分辨率。有关 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 中,如果保存位置是文件,则返回已保存图像的 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 包含这些提交。

错误修复

  • 修复了三星 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 提升为正式 API。(I08ee8
  • 在 CameraInfo 中添加了一个 isFocusMeteringSupported API,允许应用程序检查给定的 FocusMeteringAction 是否在当前相机上受支持。(Ib45aeb/188606490
  • 公开 getResolutionInfo API 以提供预览、图像捕获和图像分析的分辨率信息。(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 提升为正式 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。它们可以在没有注释 OptIn 的情况下使用。(I4bc94
  • 添加了通过 CameraInfo#getCameraState() 公开的相机状态 API。(Ia86b4
  • 添加了实验性 API CameraInfo#getCameraSelector(),它返回相机独有的 CameraSelector。(I77f9f

错误修复

  • 修复了在某些 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 包含这些提交。

错误修复

  • 修复了多个线程同时访问同一集合导致的内存泄漏。内存泄漏可能导致 Activity 或 Fragment 被 Preview 实例保留。(I7b4b8
  • 将注释 @Experimental 替换为 @RequiresOptIn 用于实验性 API。要调用实验性 API,请使用 androidx.annotation.OptIn 而不是已弃用的 androidx.annotation.experimental.UseExperimental。(Iff226
  • 修复了在三星 Galaxy S7 上,带有闪光灯开启/自动的 ImageCapture 拍摄的照片颜色过淡的问题。(I30001
  • 添加了一个相机状态 API,该 API 将通过 CameraInfo 公开。(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 包含这些提交。

错误修复

  • 在启用扩展模式时,为 ImageCapture#OnImageCapturedCallback 输出 JPEG 格式。(I0d7b1
  • 修复了 UMIDIGI BISON 设备上的初始化失败问题。(I57d9eb/180818665
  • 修复了三星 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

错误修复

  • CameraX 现在尝试在初始尝试时强制打开相机,这可能导致 CameraX 在其应用程序具有更高优先级时从其他相机客户端处抢夺相机。(Iab069b/175820568
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时发生的 Robolectric 测试失败问题。(Ice307
  • 此更改在 ImageAnalysis 中图像队列已满时捕获异常。因此,您可能会注意到其他用例冻结或变慢,而不是崩溃。例如,预览冻结/变慢。(Ic12dab/175851631
  • 修复了仅绑定预览或图像捕获时,ExtensionsErrorListener 报告错误的问题。(I5ae39
  • 通过在拍照前移除对已保存图像位置的验证,修复了 ImageCapture 的性能下降问题。进行此更改后,如果保存目标无效,则获取失败响应的时间会更长,因为它会在拍照后尝试保存图像。(I1fd4eb/177061560
  • 修复了使用“文件”类型 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 包含这些提交。

错误修复

  • 包含了对 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 包含这些提交。

错误修复

  • 修复了在 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 包含这些提交。

错误修复

  • 修复了在某些 Android 11 设备上,setZoomRatiosetLinearZoom 中返回的 ListenableFuture 无法完成的问题。(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 支持 预览图像捕获分析
  • 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 包含以下提交。

错误修复

  • 修复了在三星 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 包含以下提交。

错误修复

  • 修复了 UMIDIGI BISON 设备上的初始化失败问题。(I57d9eb/180818665

版本 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 包含以下提交。

错误修复

  • 修复了 ProcessCameraProvider#getInstance 文档中的格式错误
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时发生的 Robolectric 测试失败。
  • 通过删除拍摄照片前图像保存位置的验证,修复了 ImageCapture 的性能下降问题。进行此更改后,如果保存目标无效,则获取失败响应的时间会更长,因为它将在拍摄照片后尝试保存图像
  • 此更改会在 ImageAnalysis 中图像队列已满时捕获异常。因此,您可能会注意到其他用例被冻结或缓慢,而不是崩溃。例如,预览冻结/缓慢。
  • 包含了对 SM-G930T 后置摄像头的 JPEG 中间歇性损坏图像数据的解决方法。(I52001b/159831206
  • 此更改在 ImageAnalysis 中图像队列已满时捕获异常。因此,您可能会注意到其他用例冻结或变慢,而不是崩溃。例如,预览冻结/变慢。(Ic12dab/175851631
  • 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时发生的 Robolectric 测试失败问题。(Ice307
  • 通过在拍照前移除对已保存图像位置的验证,修复了 ImageCapture 的性能下降问题。进行此更改后,如果保存目标无效,则获取失败响应的时间会更长,因为它会在拍照后尝试保存图像。(I1fd4eb/177061560
  • 修复了使用“文件”类型 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 包含以下提交。

错误修复

  • 修复了当所有预览支持的大小都小于 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

错误修复

  • 包含了针对 SM-G930V 背面摄像头的 JPEG 中间歇性损坏图像数据的解决方法。(I5aca5b/159831206
  • 修复了在三星 SM-A716 设备上,当闪光灯始终开启/开启且环境黑暗时,拍摄照片无法接收结果的问题。(If98b2b/172036589
  • 修复了无法通过调用 Preview.setSurfaceProvider(null) 停止预览的问题。(I3ac18
  • 修复了某些设备上捕获 4:3 图像时的方向问题。(I0e3fbb/171492111

Camera Camera2、Core 和 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 包含以下提交。

错误修复

  • 在三星 A3 设备上禁用了自动闪光灯,以修复在三星 A3 设备上使用自动闪光灯 AE 模式拍摄照片时发生的崩溃。(Ia5fe3b/157535165
  • 修复了在运行 Android L(API 级别 21 和 22)的 Nexus 4 设备上预览被拉伸的问题。(I4d407b/158749159
  • OnImageCapturedCallback#onCaptureSuccess 基类实现不再关闭图像。这是为了防止开发人员出现意外行为。开发人员不应依赖 super.onCaptureSuccess 来关闭图像。(Ifbf9c
  • androidx 变体的 Experimental 注解已弃用,以与 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 以在包含有效 CONTROL_ZOOM_RATIO_RANGE 的 Android 11 或更高版本的设备上进行缩放。(I62cc6

错误修复

  • 修复了当相机 ID 为非整数相机 ID 时发生的 NumberFormatException 问题。(Ib2228
  • 改进了 CameraX 初始化和 bindToLifecycle 的延迟(I61dc5
  • 创建 UseCase 不需要初始化 CameraX 即可完成。所有特定于实现的配置都将在 UseCase 附加到 Camera 实例后设置,对于公共 API 而言,该实例为 ProcessCameraProvider.bindToLifecycle()。(Ia5411
  • <UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,如果在附加到 Camera 实例之前调用,除非在 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 以在包含有效 CONTROL_ZOOM_RATIO_RANGE 的 Android 11 或更高版本的设备上进行缩放。(I62cc6

错误修复

  • 修复了当相机 ID 为非整数相机 ID 时发生的 NumberFormatException 问题。(Ib2228
  • 创建 UseCase 不需要初始化 CameraX 即可完成。所有特定于实现的配置都将在 UseCase 附加到 Camera 实例后设置,对于公共 API 而言,该实例为 ProcessCameraProvider.bindToLifecycle()。(Ia5411
  • <UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,如果在附加到 Camera 实例之前调用,除非在 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 包含以下提交。

错误修复

  • 修复了验证图像捕获的文件保存目标的错误(I8c565b/167697553

Camera-Camera2 版本 1.0.0-beta10

2020 年 9 月 23 日

androidx.camera:camera-camera2:1.0.0-beta10 已发布。 版本 1.0.0-beta10 包含以下提交。

错误修复

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

错误修复

  • 修复了平板设备上的目标纵横比问题。当目标纵横比设置为 AspectRatio.RATIO_16_9 时,应选择 16:9 尺寸。(Ib7fcfb/151969438
  • 抛出 InitializationException,使应用程序能够优雅地处理创建 CameraCharacteristics 时发生的 AssertionError。(I89c8cb/160524721
  • 为曝光补偿添加了实验性接口(If96c7

Camera-Core 版本 1.0.0-beta09

2020年9月16日

androidx.camera:camera-core:1.0.0-beta09 已发布。 版本 1.0.0-beta09 包含以下提交。

API 更改

  • 修复了在 UseCaseGroup 上将视口标记为非空值的错误。开发人员应该能够在不设置视口的情况下创建视口。(Ie3d2e
  • ExposureCompensation 添加了实验性接口(If96c7
  • 允许预览使用任意目标旋转。变换信息是通过新的 TranformationInfoListener 回调动态计算并返回给用户的。(I21470

错误修复

  • 修复了一些设备上闪光灯无法关闭的问题。当闪光灯模式设置为 FLASH_MODE_ON 拍照时,并在闪光灯触发时更改为 FLASH_MODE_OFF 时会发生这种情况。症状类似于启用了手电筒模式。(Ib4451b/162568128
  • 如果启用了扩展效果并且供应商库实现需要对输出表面进行特殊处理,则强制 PreviewView 使用 TextureView。(I0c3cc
  • 修复了将 activity/fragment 上下文传递给 ProcessCameraProvider.getInstance(Context) 时发生的 activity/fragment 泄漏问题。

已知问题

  • 设置 ViewPort 时,在 HAL 中旋转图像缓冲区的设备上,ImageCapture 的裁剪矩形可能不正确。这将在下一个版本中修复。

Camera-Camera2 版本 1.0.0-beta08

2020年8月19日

androidx.camera:camera-camera2:1.0.0-beta08 已发布。 版本 1.0.0-beta08 包含以下提交。

错误修复

  • 优化了 bindToLifecycle,使其能够在主线程上快速运行。(I1d57e
  • DisplayOrientedMeteringPointFactory 接收一个 CameraInfo 实例而不是 CameraSelector,以便直接映射到工厂将为其生成点的摄像头。所有使用 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,以便直接映射到工厂将为其生成点的摄像头。所有使用 DisplayOrientedMeteringPointFactory 的类也接收一个 CameraInfo 实例而不是 CameraSelector。(I400c1

错误修复

  • 对于图像捕获,基于相机方向覆盖元数据中的水平翻转标志。(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 包含以下提交。

错误修复

  • 修复了 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

错误修复

  • 修复了 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

错误修复

  • 修复了在三星 Galaxy S7 上 startFocusAndMetering 无法成功聚焦的问题。(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

错误修复

  • 现在可以在调用 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 包含以下提交。

错误修复

  • 修复了在手机处于勿扰模式下初始化 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 时应用启动崩溃的问题。一个包含 CameraUnavailableExceptionInitializationException 将被设置为初始化结果的 ListenableFuture,而不是导致应用崩溃。(I9909ab/149413835

错误修复

  • 更新了 setTargetResolutionsetTargetRotation 的 javadoc。(Iae16f

Camera-Camera2 版本 1.0.0-beta04

2020 年 5 月 27 日

androidx.camera:camera-camera2:1.0.0-beta04 已发布。 版本 1.0.0-beta04 包含以下提交。

错误修复

  • 允许应用程序通过 Camera2Interop 设置任何 camera2 捕获请求参数,而不会导致崩溃。请注意,如果由于覆盖参数而导致出现问题,覆盖参数使用 Camera2Interop 时,稳定性和行为无法保证。(Ibe5a1b/149103700
  • 在使用伪本地化的设备上使用应用时,修复了自动初始化问题。(I3bef3b/154767663
  • 将与分离用例相关的错误日志转换为 Camera2CameraImpl 上的调试日志。(I1a565b/154422490
  • 修复了即使闪光灯已触发,有时拍摄的图像仍然过暗的问题。(I5d9fab/149729613
  • 修复了来自 ImageCaptureImageProxy 中的缓冲区未倒带的错误。(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

错误修复

  • 修复了 ImageAnalysis 中的崩溃问题,该问题在 ImageReaderProxy 关闭后访问了 ImageProxy。这也使得 Analyzer 收到的所有 ImageProxy 必须在 ImageReaderProxy 关闭之前关闭。(I4b299b/145956416b/154155377b/156357269
  • PreviewView#createSurfaceProvider() 中删除了 CameraInfo 参数,PreviewView 现在在内部从 SurfaceRequest 中检索它。(If18f0b/154652477
  • 在使用伪本地化的设备上使用应用时,修复了自动初始化问题。(I3bef3b/154767663
  • 修复了即使闪光灯已触发,有时拍摄的图像仍然过暗的问题。(I5d9fab/149729613
  • 修复了 ImageAnalysis 中的问题,其中多次调用 setAnalyzer/clearAnalyzer 会导致分析器无法接收要分析的图像。(I6169fb/151605317b/153514544
  • 修复了来自 ImageCaptureImageProxy 中的缓冲区未倒带的错误。(I0c455b/153249512
  • 修复了 CameraManager 中支持列表中的第一个摄像头并不总是被选择使用的问题。(I4c624b/153418028
  • 修复了由设置 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 包含以下提交。

错误修复

  • 支持发布 camera-core 的修复

Camera-Core 版本 1.0.0-beta03

2020 年 4 月 15 日

androidx.camera:camera-core:1.0.0-beta03 已发布。 版本 1.0.0-beta03 包含以下提交。

错误修复

  • 修复了 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 包含以下提交。

错误修复

  • 修复了由 ImageCapture 生成的 ImageProxy 中的 ImageInfo.getRotationDegrees(),使其与 EXIF 方向旋转值匹配。(Id4281b/150802561
  • 不再需要在 build.gradle 中显式排序 CameraX 依赖项以使用默认的 CameraX/Camera2 实现。对于需要声明严格依赖项的情况,现在可以在构建文件中包含所有 CameraX 依赖项。(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 包含以下提交。

错误修复

  • 修复了由 ImageCapture 生成的 ImageProxy 中的 ImageInfo.getRotationDegrees(),使其与 EXIF 方向旋转值匹配。(Id4281b/150802561
  • 修复了 bindToLifecycle,使其仅在成功绑定时修改 UseCase。以前,当调用 bindToLifecycle 以进行分辨率计算时,UseCase 会更新。现在它不再需要更新 UseCase 来进行计算。(I78d9e
  • 修复了一个问题,即在多次调用 Preview.setSurfaceProvider() 后预览表面发生变化时,Preview 用例的捕获会话没有更新。

Camera-Camera2 版本 1.0.0-beta01

2020 年 2 月 26 日

androidx.camera:camera-camera2:1.0.0-beta01 已发布。 版本 1.0.0-beta01 包含以下提交。

错误修复

  • 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 更改

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

错误修复

  • 修复了一个问题,即在使用 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 包含以下提交

错误修复

  • 通过确保仅在 Camera2 使用期间保留 Surface,提高了 INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY 设备上的稳定性。(I9dac2
  • 通过正确调整 CONTROL_AE_TARGET_FPS_RANGE,修复了 LEGACY 设备上的曝光不足预览问题。(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.SurfaceProviderSurfaceProvider 不再需要开发人员创建自己的 ListenableFuture,并且现在通过新的 SurfaceRequest 对象提供 SurfacePreview.getPreviewSurfaceProvider() 方法已删除,因为它在 Preview 与其他类(如 PreviewView)配对时可能被误用。(I20105
  • Preview 添加了 getTargetRotation()getTargetName()。(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 工件,CameraX 现在将使用默认的 Camera2 配置进行初始化。(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 相机 ID 的 camera2 互操作路径。您可以使用 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.from() 方法被构造函数 FocusMeteringAction.Builder() 替换。
  • 删除了 DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float)。应用程序应使用接受 Display 参数的构造函数并传入当前显示。
  • 关于 MeteringMode 和 3A 标志以及 Display 参数的使用,改进了焦点和测光 API 的 Javadoc。
  • 扩展了 setZoomRatiosetLinearZoom 的参考文档。

错误修复

  • 修复了关闭然后打开摄像头导致“先决条件”检查失败的问题。
  • 修复了在使用手电筒和缩放 API 时可能发生的 ConcurrentModificationException
  • 修复了当 mod16 尺寸可用时,现在选择更接近请求分辨率的分辨率的问题。
  • startFocusMeteringcancelFocusMetering API 现在按文档说明的行为,具有正确的时序,并在发生错误时可能返回错误。
  • 修复了在具有裁剪纵横比的设备上请求特定目标分辨率时出现的问题,该设备不支持此类尺寸。现在,当可用时,将选择具有足够分辨率以绑定原始请求的非裁剪尺寸。

Camera-Camera2 版本 1.0.0-alpha08

2019 年 12 月 18 日

androidx.camera:camera-camera2:1.0.0-alpha08 已发布。 版本 1.0.0-alpha08 包含这些提交

已知问题

  • 并非所有 Camera2 拍摄请求选项在使用 Camera2 互操作时都能正常工作。如果请求的选项不受支持,则会话将无法启动,并且可能会发生类似以下错误:09-09 14:04:13.643 10117 26020 26036 E AndroidRuntime: java.lang.IllegalArgumentException: Unsupported session configuration combination

错误修复

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

API 更改

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

Camera-Core 版本 1.0.0-alpha08

2019 年 12 月 18 日

androidx.camera:camera-core:1.0.0-alpha08 已发布。 版本 1.0.0-alpha08 包含这些提交

已知问题

  • 使用 PreviewViewCameraView 的应用可能具有错误的纵横比预览。这在某些 FULL 设备(例如 Pixel2)上暂停或恢复后发生。

错误修复

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

API 更改

  • 隐藏了 IntDefs 并将 IntDef 常量移到了 IntDef 定义之外。
  • rotationDegreesOnImageCaptureCallback 类移动到 ImageInfo 类。
  • rotationDegreesAnalyzer 类移动到 ImageInfo 类。

Camera-Camera2 版本 1.0.0-alpha07

2019 年 12 月 4 日

androidx.camera:camera-camera2:1.0.0-alpha07 已发布。 camera-camera2 的 1.0.0-alpha07 版本包含这些提交

  • Camera2Config 现在可用于初始化和配置基于 Camera2 的 CameraX 实现。有关如何在初始化中使用它的更多详细信息,请参阅发行说明的 camera-core 部分
  • camera2 互操作功能现在被标记为实验性,并移动到一个单独的包中,androidx.camera.camera2.interop.

Camera-Core 版本 1.0.0-alpha07

2019 年 12 月 4 日

androidx.camera:camera-core:1.0.0-alpha07 已发布。 camera-core 的 1.0.0-alpha07 版本包含这些提交

请注意,此 Alpha 版本中有一些重大更改,因为我们正在准备 Beta 版本。 我们建议您查看这些更改并分享您在 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 类已被删除。之前由 CameraX 类调用提供的 bindToLifecycle()unbind()unbindAll()isBound()hasCamera() 现在可以通过 ProcessCameraProvider 获取。

  • 每个进程的 ProcessCameraProvider 实例是使用静态方法 ProcessCameraProvider.getInstance() 异步获取的,该方法返回一个可监听的 future,并在完成时提供 ProcessCameraProvider。它在典型用法中显示在 onCreate() 中。您可以将对 getInstance() 的调用放在 activity 生命周期的后期,以将初始化延迟推迟到稍后的时间(例如,当用户操作打开相机 UI 时)。

    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.get() 的情况下从 Future 中检索相机提供程序

    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)
    
  • 用例“配置”类已被删除。相反,直接构建用例,在每个用例构建器上设置选项。例如

    preview = Preview.Builder().setTargetAspectRatio(AspectRatio.RATIO_16_9).build()
    
  • 预览用例已更新为接受应用程序创建和管理的 surface,以确保遵循 Android 最佳实践。强烈建议使用 camera-view 包中提供的 PreviewView 视图类。

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

  • 重要提示ImageAnalysis Analyzer 方法实现必须在完成使用接收到的图像时调用 image.close()。否则,可能不会接收到新图像,或者根据背压设置,相机可能会停止。有关详细信息,请参阅 参考文档

  • ImageAnalysis ImageReaderMode 现在已更改为反压策略 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() 方法已移除。手电筒功能覆盖了闪光灯功能。更多详细信息请参阅 参考文档

  • ImageCapture.Metadata 字段已替换为 get/set/is 访问器。

  • startFocusMeteringcancelFocusMetering 现在返回 ListenableFutures,表示调用的异步操作。

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

修复了问题。

  • 修复了在恢复时拍摄照片时的问题(在之前的暂停导致照片等待完成之后)。
  • 已知问题:CameraControl.enableTorch() 功能正常,但返回的 ListenableFuture<Void> 始终是立即完成 (成功) 的 Future,即使没有闪光灯单元也是如此。未来的版本将修复此问题,使其符合最终行为:当没有闪光灯单元时,enableTorch(true) 会立即失败(不会向 CaptureSession 发送请求),并且 TorchState 保持关闭状态。
  • 已知问题:startFocusAndMeteringcancelFocusAndMetering 启动和取消对焦测光,但返回一个立即完成 (成功) 的 Future,不代表已记录的行为。ListenableFuture<FocusMeteringResult> CameraControl.startFocusAndMetering() 中的 FocusMeteringResult 是一个伪造的结果,其 isFocusSuccessful() 始终为“false”,与预期的已记录行为不同。
  • 已知问题:正在开发一个用于 PreviewView 触摸事件的测光点工厂。目前,连接自定义托管表面的应用程序可以使用现有的测光点工厂,否则 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 中,返回用例输出的目标纵横比。
  • ImageCapture 的 setTargetAspectRatio(Rational aspectRatio) 方法已更改为 setTargetAspectRatioCustom(Rational aspectRatio)。设置后,ImageCapture 输出将相应裁剪。

Executor API

  • 以下函数接受一个 executor 参数,允许应用程序控制函数在哪个 executor 上运行。
    • Preview.setOnPreviewOutputUpdateListener() API。如果该函数没有提供 executor,则它将在主线程上执行。
    • 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() 中的一个。在同一个构建器上调用两者会导致错误。
    • 通常建议根据应用程序的 UI 设计使用 setTargetAspectRatio()。特定分辨率基于用例。例如,预览接近屏幕分辨率,图像捕获提供高分辨率静态图像。有关更多信息,请参阅 自动分辨率表
    • 在需要最小(节省计算量)或最大(处理细节)分辨率等更具体的用例中,使用 setTargetResolution()
  • Executor API:已从用例配置 API 中移除 setCallbackHandler() 调用。相反,应用程序可以在设置回调的其他各种 API 中将 executor 设置为参数。
  • 更新了各种函数的空值注解。
  • 修复了在打开相机时导致抛出 java.lang.IllegalStateException at Camera$StateCallback.onError 错误的问题。
  • 修复了当应用程序请求更大或默认分辨率时,选择的分辨率过小(小于 640x480),导致预览图像出现块状或模糊的问题。需要较小分辨率的应用程序可以显式请求它们。
  • 修复了从启动另一个相机应用程序的 Intent 返回后,相机显示黑屏(无法启动相机)的问题。
  • 修复了当应用程序重复启动或停止时抛出以下错误的错误:java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!
  • 修复了禁用 ImageAnalysis 时发生的以下错误:java.lang.IllegalStateException: maxImages (4) has already been acquired, call #close before acquiring more.
  • 为相机断开连接流程添加了其他测试。
  • 改进了连续运行相机测试时的测试系统鲁棒性。

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

2019年9月5日

androidx.camera:camera-camera2:1.0.0-alpha05androidx.camera:camera-core:1.0.0-alpha05 已发布。这些是 包含在 camera-camera2:1.0.0-alpha05 中的提交,以及 包含在 camera-core:1.0.0-alpha05 中的提交

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

    • ImageCapture.UseCaseError 重命名为 ImageCapture.ImageCaptureError
    • VideoCapture.UseCaseError 重命名为 VideoCapture.VideoCaptureError
  • 添加了 CameraControl API 和轻触对焦 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,用于根据视图类将轻触坐标转换为传感器坐标。

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

  • 强制在主 (UI) 线程上调用以下方法,在未在主线程上调用时抛出 IllegalStateException。未来的版本将允许在其他线程上使用并确保序列化。

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

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

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

  • 修复了以下错误:在启动后(无相机数据)、旋转后或在前后摄像头之间切换后,预览显示为黑色。

  • 删除了对多个并发图像分析用例的测试。为了确保兼容性,应用程序应仅附加单个图像分析用例。

  • 在 camera-testing 套件中为虚拟相机添加了初始 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 会根据设备功能对分辨率/纵横比进行折衷,以便首先启动捕获会话,因此可能不会满足确切的请求。这可能是由于

  • 设备不支持请求的分辨率
  • 兼容性问题,例如在 LEGACY 设备上,必须使用某些分辨率才能正常运行
  • 在某些设备上,某些格式仅在某些纵横比下可用
  • 更倾向于 JPEG 或视频编码的“最近的 mod16”。请参阅 CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP

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

已对设置分辨率和纵横比进行了一些更改,旨在使 API 更清晰

  • 预览用例现在被认为在未设置时具有默认的 4:3 纵横比。
  • 当 CameraX 在内部根据设备功能考虑对请求的分辨率和纵横比进行更改时,它首先尝试保持相同的纵横比(由任何 setTargetAspectRatiosetTargetResolution 调用确定)
  • 分辨率的“最近的 mod16”版本被视为相同的纵横比。

ImageAnalysis 非阻塞模式

  • ImageReaderMode.ACQUIRE_LATEST_IMAGE 的行为现在是非阻塞的。它获取队列中的最新图像,但会连续丢弃未使用的图像,以允许相机管道避免阻塞。
  • 分析器可以无限期地保存单个图像,而不会使管道停滞。
  • 如果应用程序提供的执行程序随后被阻塞,则 ImageAnalysis 用例会被阻塞。
  • 内部设置的默认执行程序的行为类似于非阻塞执行程序。

错误修复

  • 修复了在没有自动对焦、自动曝光和自动白平衡的设备上捕获图像时,等待 3A 收敛导致的超时问题。
  • 修复了使用 ImageCapture 快速拍摄照片时出现的错误:java.lang.IllegalStateException: maxImages (2) has already been acquired
  • 修复了当未为用例调用 setLensFacing 时导致 java.lang.IllegalArgumentException: Unable to get camera ID for use case 的问题。
  • 修复了 LEGACY 设备需要特定纵横比作为最大 JPEG 分辨率的问题。
  • 修复了在应用程序后台运行时相机正在打开的问题。
  • 修复了 API < 25 上的问题,删除了错误 checkAndUpdateEglState: invalid current EGLDisplay
  • 修复了在启用并启动扩展后解除绑定预览的问题。
  • camera-view 和 camera-extensions 的构建工件现在发布为 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 配置调用中“目标”的 javadoc 说明。

Camera-Core

  • 修复了在快速打开/关闭或绑定/解除绑定时未配置的输入/输出表面崩溃的问题。
  • 迁移到新的 Futures 实现。
  • 测试修复,以实现更强大的测试。
  • 核心集成测试现在显示照片的捕获时间。
  • 为 Executor 开发了内部兼容类。
  • 计时测试应用程序捕获图像等待上一个完成并提高稳定性。

扩展

  • 添加了版本检查。
  • 额外的测试覆盖范围 - 扩展事件回调。
  • 内部对应图像和元数据的改进。
  • 测试应用程序中模式切换的修复。

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

错误修复

  • 修复了使用模拟器时出现的除以零错误。
  • 修复了在某些设备上快速拍摄照片时,在快速解除绑定和重新绑定用例时出现的 NullPointerException/Surface Abandoned 错误。
  • 修复了内部问题,以确保捕获请求更新一致地影响所有表面。
  • 在新的应用程序实例中重新启动用例时的稳定性改进。
  • 内部架构更改,以准备在 API 中支持执行程序。
  • 关于 CameraX 类和生命周期管理的其他 Javadoc 说明。
  • 为 Antelope 性能测试应用程序添加了检测测试。
  • 删除了应用程序 Proguard 配置中对 '-keepattributes Signature' 的需要。

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 包含这些提交。

错误修复

  • <UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,如果在附加到 Camera 实例之前调用,除非在 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 包含这些提交。

错误修复

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 包含这些提交。

错误修复

  • 当使用从 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 包含这些提交。

错误修复

  • 修复了在手机处于勿扰模式下初始化 CameraX 时应用启动崩溃的问题。一个包含 CameraUnavailableExceptionInitializationException 将被设置为初始化结果的 ListenableFuture,而不是导致应用崩溃。(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 包含这些提交。

错误修复

  • 修复了 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 包含这些提交。

错误修复

  • 修复了文档,以说明在初始化期间获取 ProcessCameraProvider 时,将使用默认配置,并且扩展 Application 是可选的。(I5e395

Camera-Lifecycle 版本 1.0.0-beta02

2020 年 4 月 1 日

androidx.camera:camera-lifecycle:1.0.0-beta02 已发布。 版本 1.0.0-beta02 包含这些提交。

错误修复

  • 更新以支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02 工件中的错误修复。

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-alpha01 已发布。 camera-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

错误修复

  • 禁止应用在绑定VideoCapture时启用扩展模式。CameraX Extensions 仅支持ImageCapturePreviewVideoCapture 暂不支持。如果应用绑定了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 更改

  • CameraSelector#filter 添加到公共 API 中,以便根据 CameraSelector 过滤 CameraInfos 列表。(I105d0

错误修复

  • 修复了在某些设备上快速切换扩展模式时发生的崩溃问题。(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

错误修复

  • 修复了启用 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

错误修复

  • 将 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

错误修复

  • 删除了已弃用的<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

错误修复

  • 修复了在与 Compose UI 结合使用时PreviewView PERFORMANCE 模式拉伸问题。(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
  • 添加了一个 RotationReceiver 类,用于接收 Surface 旋转变化。这可用于在设备处于固定纵向/横向模式时设置目标旋转。(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。它们可以在没有 OptIn 注解的情况下使用。(I4bc94
  • 添加了一个在用例之间转换坐标的实用程序。例如用法:转换在 ImageAnalysis 用例中检测到的坐标并在预览中突出显示检测到的对象。(I63ab1b/137515129
  • 已移除CameraViewCameraView 已被CameraController 替换。有关如何迁移的信息,请参阅迁移指南。(Id5005

错误修复

  • 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 包含以下提交。

错误修复

  • 将注释 @Experimental 替换为 @RequiresOptIn 用于实验性 API。要调用实验性 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

错误修复

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

Camera Extensions & 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 更改

  • 向 CameraController 添加了一个 CameraInfo getter。(Ib8138b/178251727

错误修复

  • 修复了仅绑定预览或图像捕获时,ExtensionsErrorListener 报告错误的问题。(I5ae39

Camera Extensions & 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 & 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 包含以下提交。

错误修复

  • 在 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 包含以下提交。

错误修复

  • 改进了 CameraX 初始化和 bindToLifecycle 的延迟(I61dc5
  • <UseCase>.getTargetRotation() 将返回 Surface.ROTATION_0,如果在附加到 Camera 实例之前调用,除非在 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 包含以下提交。

错误修复

Camera-View 版本 1.0.0-alpha17

2020 年 9 月 23 日

androidx.camera:camera-view:1.0.0-alpha17 已发布。 版本 1.0.0-alpha17 包含以下提交。

错误修复

Camera-Extensions 版本 1.0.0-alpha16

2020年9月16日

androidx.camera:camera-extensions:1.0.0-alpha16 已发布。 版本 1.0.0-alpha16 包含以下提交。

错误修复

  • 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

错误修复

  • 如果启用了扩展效果并且供应商库实现需要对输出表面进行特殊处理,则强制 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 包含以下提交。

错误修复

  • 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 包含以下提交。

错误修复

  • DisplayOrientedMeteringPointFactory 接收一个 CameraInfo 实例而不是 CameraSelector,以便直接映射到工厂将为其生成点的摄像头。所有使用 DisplayOrientedMeteringPointFactory 的类也接收一个 CameraInfo 实例而不是 CameraSelector。(I400c1
  • 已删除 TextureViewMeteringPointFactoryPreviewView 提供了一个公共 API(createMeteringPointFactory())来创建测光点工厂,而不管它是否使用 TextureViewSurfaceView。(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 包含以下提交。

错误修复

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

Camera-View 版本 1.0.0-alpha13

2020年6月24日

androidx.camera:camera-view:1.0.0-alpha13 已发布。 版本 1.0.0-alpha13 包含以下提交。

错误修复

  • 当绑定到 LifecycleOwner 时,CameraView 不会再出现 IllegalArgumentException 崩溃,该 LifecycleOwner 的 Lifecycle 在绑定后不久就转换到 DESTROYED 状态。绑定处于 DESTROYED 状态的 Lifecycles 不会尝试打开相机。(I7c2b8
  • 现在可以通过 CameraView.getPreviewStreamState() 获取 PreviewView StreamState。(I21a2b

Camera-Extensions 版本 1.0.0-alpha12

2020年6月10日

androidx.camera:camera-extensions:1.0.0-alpha12 已发布。 版本 1.0.0-alpha12 包含以下提交。

错误修复

  • 修复了在手机处于勿扰模式下初始化 CameraX 时应用启动崩溃的问题。一个包含 CameraUnavailableExceptionInitializationException 将被设置为初始化结果的 ListenableFuture,而不是导致应用崩溃。(I9909ab/149413835

Camera-View 版本 1.0.0-alpha12

2020年6月10日

androidx.camera:camera-view:1.0.0-alpha12 已发布。 版本 1.0.0-alpha12 包含以下提交。

错误修复

  • 添加了 PreviewView#getBitmap() API,该 API 返回预览表面上显示内容的 Bitmap 表示。(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 更改

错误修复

  • 添加了 PreviewView#getBitmap() API,该 API 返回预览表面上显示内容的 Bitmap 表示。(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,允许应用观察预览是否正在流式传输。当 PreviewView 处于 TEXTURE_VIEW 模式时,STREAMING 状态也保证预览图像可见。(Ic0906b/154652477
  • 添加了 PreviewView#setDeviceRotationForRemoteDisplayMode() API,如果应用在远程显示模式下运行,则为转换计算提供设备旋转。(I59b95b/153514525

错误修复

  • 修复了在运行 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
  • 修复了在 ViewPager2 中滑动出 Preview 碎片然后滑回时 PreviewView 黑屏的问题。还修复了 removeView(previewview) 然后 addView(previewView) 时出现的问题。(Iab555b/149877652b/147354615
  • 更新了 CameraView#takePicture() API,以允许将图像保存到 UriOutputStream。更新测试应用程序以使用 Uri 作为规范示例。(Ia2459b/153607583
  • 您可以通过设置 ScaleType 属性,从 XML 布局中设置 PreviewView 的缩放类型。(I08565b/153015659
  • CameraView.ScaleType 已被移除。请改用 PreviewView.ScaleType 来设置/获取 CameraView 的缩放类型。(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 包含以下提交。

错误修复

  • 支持 Camera-Core 发布的修复

Camera-View 版本 1.0.0-alpha10

2020 年 4 月 15 日

androidx.camera:camera-view:1.0.0-alpha010 已发布。 版本 1.0.0-alpha010 包含以下提交。

错误修复

  • 修复了之前已知的一个问题,即 PreviewView 的 SurfaceView 实现某些设备上无法正常工作,并且会在恢复预览后导致应用崩溃。(I5ed6b

Camera-Extensions 版本 1.0.0-alpha09

2020 年 4 月 1 日

androidx.camera:camera-extensions:1.0.0-alpha09 已发布。 版本 1.0.0-alpha09 包含以下提交。

错误修复

  • 更新以支持 camera-camera2:1.0.0-beta02camera-core:1.0.0-beta02camera-lifecycle:1.0.0-beta02 工件中的错误修复

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(),它接收一个可为空的 CameraInfo 实例,用于通过尽可能使用 ImplementationMode.SURFACE_VIEW 来优化预览。如果传递了 null 实例,或者如果将首选实现模式设置为 ImplementationMode.TEXTURE_VIEW,则内部使用 ImplementationMode.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))
    
  • 已在 PreviewView.getSurfaceProvider() 中添加了 @UiThread 注解,这意味着必须从主线程调用它。(I192f3

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

  • 添加了 PreviewView.getScaleType()

  • 删除了使用 XML 布局中的 implementationMode 属性设置 PreviewView 实现模式的支持。

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

错误修复

  • 修复了 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 包含以下提交。

错误修复

  • SurfaceRequest.provideSurface() 上的 ListenableFuture 替换为 ExecutorCallback。这通过不再需要处理 provideSurface() 上的异常来简化 API,并强制执行 provideSurface() 回调不能被取消。这是为了防止旧设备上因过早释放表面而导致的崩溃。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 包含以下提交

错误修复

  • 之前在 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 更改

  • PreviewViewTextureView 实现现在会将 TextureView 的大小设置为相机传感器输出大小,然后再将其缩放以填充其父 PreviewView。如果您希望相机预览填充 UI 的整个部分(例如整个屏幕),则不应将 PreviewView 的大小设置为固定值,也不应使其包裹其内容(例如使用属性“wrap_content”),这可能导致相机预览仅填充 PreviewView 的一部分(如果相机传感器输出大小较小)。相反,您应该将 PreviewView 设置得与其父级一样大(例如使用属性“match_parent”)。(1204869

错误修复

  • 更新了 ImageCapture 以允许将图像保存到 UriOutputStream。将重载的 takePicture 方法合并为一个。更新了测试应用程序以使用 Uri 作为规范示例。(Ia3bec
  • Preview.PreviewSurfaceProvider 已重命名为 Preview.SurfaceProviderSurfaceProvider 不再需要开发人员创建自己的 ListenableFuture,并且现在通过新的 SurfaceRequest 对象提供 SurfacePreview.getPreviewSurfaceProvider() 方法已删除,因为它在 Preview 与其他类(如 PreviewView)配对时可能被误用。(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 包含以下提交

错误修复

  • 更新以匹配内部 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-alpha04 已发布。 camera-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-alpha04 已发布。 camera-view 的 1.0.0-alpha04 版本包含以下提交

API 更改

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

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

    preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
    
  • API 命名中的“ZoomLevel”现在是“ZoomRatio

  • 某些方法参数已更改可空性

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 初始化器。扩展版本增加到 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 中包含的提交

  • 用于未来相机扩展的新库,用于访问受支持设备上的效果。此库尚在开发中。
  • 新的相机视图类。此库尚在开发中。