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。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

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

Camera Viewfinder 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 搭配使用。可组合项取景器支持不同的宽高比,并支持处理触摸事件。

相机取景器版本 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 添加了输出格式 API ImageCapture,设备功能检查在 ImageCaptureCapabilities#getSupportedOutputFormats 中公开。OUTPUT_FORMAT_RAW 用于拍摄 RAW 图片(Adobe DNG 格式),OUTPUT_FORMAT_RAW_JPEG 用于同时拍摄 RAW 和 JPEG 图片。新的 ImageCapture#takePicture API 用于同时拍摄图片,需要提供两个 OutputFileOptions,第一个用于 RAW 图片,第二个用于 JPEG 图片。(Ib0f3d)

bug 修复

  • 修复了在 TCL 设备上启用 VideoCapture 时预览和视频曝光不足的问题。(Id7a64)
  • 修复了以下问题:启用某个效果或绑定 4 个用例(流式共享)时,使用 PreviewView.getMeteringPointFactory 调用 startFocusMetering 无法获取正确的传感器坐标。(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 服务提供的额外数据。

bug 修复

  • 修复了旧版设备上的 Preview/VideoCapture 目标帧速率问题。通过 setTargetFrameRateCamera2Interop API 设置的目标帧速率始终会被 AeFpsRangeLegacyQuirk 提供的值覆盖。通过此修复程序,CameraX 库将遵循通过 setTargetFrameRateCamera2Interop API 设置的值。(Ie2d32
  • 添加了使用 CameraEffect 拍摄图片的闪光灯/手电筒/3A 功能。现在,使用 CameraEffect 拍摄的图片应与不使用任何 CameraEffect 拍摄的图片具有相同的拍摄前和拍摄后处理(例如闪光灯触发器、3A 融合等,如果适用)。(I5ff30)
  • 排除了 Samsung SM-A057G 设备上 ImageAnalysis 存在问题的输出大小。当 ImageAnalysis 使用大于或等于 1920x1440 的分辨率时,会导致预览画面呈黑色。对 SM-A057G 设备应用了 ExcludedSupportedSizesQuirk,以避免此问题。(I63dfeb/365877975
  • 修复了在内部启用串流共享机制以将串流共享给 PreviewVideoCapture 时出现的 Preview/VideoCapture 目标帧速率问题。(I4fdac
  • 启用了解决方法,以修复三星 S10e 和 S10+ 设备上的 JPEG 图片元数据不正确的问题。修复后,CameraX 可以成功保存 JPEG 图片,或者在这些设备上发生 JPEG 图片元数据错误问题时,调用 ImageProxy.toBitmap() 函数时可以返回正确的 Bitmap 对象。(Iae493b/356428987
  • 停用了 Samsung A52s 后置摄像头(ID 为 0)的扩展,因为在拍摄 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

bug 修复

  • 修复了使用已销毁的 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-bit HDR:

  • 轻松拍摄出精彩的 HDR 照片和视频。
  • 支持 HLG 和 10 位 HEVC 编码。
  • 享受 10 位 HDR 预览,并查询设备功能。
  • 在越来越多的设备上支持 UltraHDR 图片和 HDR 视频。

其他酷炫功能:

  • Kotlin 扩展:添加了 takePictureawaitInstance 挂起函数。
  • 实时效果:应用水印和对象突出显示等效果。
  • CameraController API:新增了视频拍摄配置控件。
  • 预览版防抖:查询设备功能并启用防抖。
  • 增强了 VideoCapture 功能:可更精细地控制画质,并支持更高分辨率。
  • CameraX 扩展程序集成:与 VideoCapture 和新的 ImageCapture 功能无缝集成。
  • Shutter Sound API:轻松查看地区快门声音要求。
  • 屏幕闪光灯:改进了前置摄像头在低光下的拍照效果。
  • Camera Extensions Metadata API:支持在 ExtensionMode#AUTO 中调整扩展程序强度和获取当前扩展程序模式通知的 API。如需了解更多 bug 修复,请参阅我们的Beta 版RC 版公告。

版本 1.4.0-rc04

2024 年 10 月 16 日

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

bug 修复

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

版本 1.4.0-rc03

2024 年 10 月 2 日

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

bug 修复

  • 添加了使用 CameraEffect 拍摄图片的闪光灯/手电筒/3A 功能。现在,使用 CameraEffect 拍摄的图片应该与不使用任何 CameraEffect 的图片拍摄具有相同的预拍摄和拍摄后处理(例如闪光灯触发器、3A 收敛等,如适用)。(I5ff30)
  • 优化了 PreviewView 中的双指张合缩放平滑度 (I04ffc)
  • 将 Ultra HDR 与 10 位输出功能分离,因为 Ultra HDR 支持不再要求设备具有 10 位输出功能。 (I96ff2I0c3b3)

版本 1.4.0-rc02

2024 年 9 月 18 日

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

bug 修复

  • 修复了使用已销毁的 LifecycleOwner 调用 bindToLifecycle 时发生崩溃的问题。(I6e6d8)
  • ScreenFlashView 中为 ScreenFlash#apply 添加了可见性动画,同时修复了亮度变化在过了一段时间后异步完成而导致的 bug。(I37cdb
  • 通过在受支持的设备上替换框架中的缩放设置,提高了缩放流畅度。

版本 1.4.0-rc01

2024 年 8 月 7 日

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

新功能

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

API 变更

  • 针对未明确添加 ScreenFlashView 的情况添加了 PreviewView.getScreenFlashPreviewView.setScreenFlashOverlayColor API。(I43945)

bug 修复

  • 修复了在弱光环境下通过启用闪光灯拍摄的图片并结合 VideoCapture 用例的情况下拍摄的曝光和色调问题。(Ic9814)
  • 修复了以下问题:在启用扩展程序的情况下中断 takePicture 请求可能会导致无法获取结果,并且下一个 takePicture 请求可能无法再运行。(Iae78f)
  • 修复了启用扩展程序时发生的内存泄漏问题。(Iab276)
  • 解决了 Pixel 7/8 和 Samsung 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。它将支持通过 OutputConfiguration.setMirrorMode 在 API 33 及更高版本中为预览流开启和关闭镜像模式;对于较低版本的 API,它将不执行任何操作。I821f4

bug 修复

  • 修复了以下问题:当 ImageCapturePreview + VideoCapture + ImageCapture UseCase 组合下选择 1920x1080 时,应用无法在三星 Tab A8 上成功拍照。(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

bug 修复

  • 修复了静态拍摄和点按对焦不使用重复请求的 FPS/防抖模式值的问题,该值可能会重新创建拍摄会话并导致在某些设备上出现延迟问题或预览冻结问题。(I7dc0b)
  • 修复了以下 bug:在某些设备上启用 CameraEffect 后无法选择“高分辨率”。(例如,在 Samsung A32 5G 上为 4000x3000)。(Ie3ed3b/337336152
  • 修复了在 Pixel 4XL API29 上使用 Preview、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,并将 getSupportedOutputFormats 方法添加到 ImageCaptureCapabilities 用于查询设备功能。默认输出格式值为 OUTPUT_FORMAT_JPEG,用于以 JPEG 格式捕获 SDR 图片。当设备支持 Ultra HDR 且输出格式设置为 OUTPUT_FORMAT_JPEG_ULTRA_HDR 时,CameraX 将使用 JPEG/R 图片格式拍摄 Ultra HDR 压缩图片。此格式向后兼容 SDR JPEG 格式,并且支持对内容进行 HDR 渲染。这意味着,在旧版应用或设备上,图片会以常规 JPEG 格式流畅显示;在已更新为完全支持该格式的应用和设备上,图片会以 HDR 格式显示。(I5de50
  • CameraInfo 中添加了 PhysicalCameraInfo 以查询实体相机信息,并在 CameraSelector 中添加了实体相机 ID 的 setter/getter (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 转换到另一个 UseCase。例如,将 ImageAnalysis 中检测到的对象的坐标转换为 PreviewView 叠加层。(I947ab)
  • 使 camera-viewfinder-core API 更加通用,以便 camera-viewfindercamera-viewfinder-compose 可以使用它。(I1e295)
  • ViewfinderSurfaceRequest 添加了 getSurface 函数。(I781a0
  • camera-viewfinder 中使用 camera-viewfinder-core 并废弃 ViewfinderSurfaceRequestCameraViewfinder。(I6198c)
  • 添加了 ZoomGestureDetector,用于解释专门为双指张合缩放 activity 配置的缩放手势。(Ifafbf)

bug 修复

  • 修复了与分析器默认目标分辨率设置相关的 ImageAnalysis 分辨率选择问题:即使应用设置了其他分析器默认分辨率设置,目标分辨率也错误地保持为 640x480。如果应用遇到此问题 (1.3.0 ~ 1.3.2) 且无法升级到包含解决方案的较新版本,则可以直接将 ResolutionSelector 设置为首选分辨率,并将匹配的 AspectRatioStrategy 设置为 ImageAnalysis UseCase,以解决此问题。(I81f72b/330091012
  • 修复了以下问题:如果当前请求失败,队列中的 takePicture 请求可能会无法运行。(Ie0801
  • 将无效的 JPEG 数据检查应用于 Vivo X60 和 X60 Pro 设备。这可以修复这些设备上图片异常大的问题。(I82247b/288828159
  • 修复了 Samsung 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 实现,可高效地操控相机输出。
  • OverlayEffect:适用于使用 Android 的 Canvas API 绘制叠加层。这样一来,应用便可在相机输出中应用水印或突出显示检测到的对象。
  • 适用于预览用例的 DynamicRange API:现在,您可以在预览用例中设置动态范围,而无需考虑视频用例。这样,您就可以仅将 HDR 动态范围(例如 HLG10)用于预览。CameraInfo 中还提供了新的 API,用于查询每个相机支持的动态范围。

API 变更

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

bug 修复

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

版本 1.4.0-alpha03

2023 年 12 月 13 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.4.0-alpha02

2023 年 10 月 18 日

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

API 变更

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

bug 修复

  • 修复了在后置摄像头上使用 ImageAnalysis 启用扩展焦外成像或美颜功能时,Samsung 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)

bug 修复

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

版本 1.3

版本 1.3.4

2024 年 6 月 12 日

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

bug 修复

  • 修复了以下问题:应用增大缩放比率时,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 包含这些提交内容

bug 修复

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

版本 1.3.2

2024 年 3 月 6 日

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

bug 修复

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

版本 1.3.1

2023 年 12 月 13 日

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

bug 修复

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

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

  • 四个 UseCasesPreview + ImageCapture + ImageAnalysis + VideoCapture

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

    • Google Pixel 7:大约 9 毫秒到 7 毫秒
    • Samsung Galaxy S23 Ultra:大约 6 毫秒到 5 毫秒
    • 三星 A53 5G:大约 32 毫秒到 12 毫秒
  • CameraUseInconsistentTimebaseQuirk 添加了 Snapdragon 480。这修复了使用此芯片组的 Android 12 设备存在的问题,即录音中的音频会因设备处于暂停状态的时间而偏移。(I58010)

版本 1.3.0

2023 年 10 月 18 日

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

自 1.2.0 以来的重要变更

版本 1.3.0-rc02

2023 年 9 月 20 日

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

bug 修复

  • 确保按正确的顺序触发初始化和反初始化事件,从而提高扩展程序的稳定性。这修复了切换扩展程序模式或切换摄像头时出现的一些黑色预览问题。(Iddaac
  • 修复了在某些设备上启用某些扩展模式时,ImageAnalysis 无法与 ImageCapture 和预览一起绑定的问题。修复程序会在应用通过 ExtensionsManager#isImageAnalysisSupported() 查询 ImageAnalysis 可用性时返回正确的值。(I7d538)
  • 修复了在 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,以允许录音在其录音器连接到的 VideoCapture 弹跳时连续录制。(I517c6)

bug 修复

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

版本 1.3.0-beta02

2023 年 7 月 26 日

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

bug 修复

  • 在 Pixel 4 和 5 变体中使用手电筒作为闪光灯,以提高在光线不足的情况下的拍摄质量(I56ff5b/280221967
  • 修复了三星 A5 (2017) 系列设备上拍摄的 JPEG 图片过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含多余的 0 填充数据。这会导致拍摄的图片文件大小约为 32 MB。系统会移除这些冗余 0 的填充数据,使拍摄的图片具有正常的图片文件大小。(I29837b/288828159
  • 修复了在 CaptureFailedRetryQuirk 中提及的问题设备中,如果拍摄失败,重试无法正确触发的问题。(I7b589)

版本 1.3.0-beta01

2023 年 6 月 21 日

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

API 变更

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

bug 修复

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

版本 1.3.0-alpha07

2023 年 5 月 24 日

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

新功能

  • 借助新的 VideoCapture.Builder# setTargetFrameRate(Range) API,您可以以设备默认帧速率以外的其他帧速率拍摄视频录制内容。您可以通过新的 CameraInfo#getSupportedFrameRates() API 查询录制的可用帧速率。

API 变更

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

bug 修复

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

版本 1.3.0-alpha06

2023 年 4 月 19 日

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

新功能

  • 并发摄像头是 Android 11 中引入的一项新功能,支持同时流式传输摄像头设备。例如,它让设备可以同时运行前置和后置摄像头。CameraX 目前仅支持双并发摄像头,允许两个摄像头同时运行,并且每个摄像头最多只能绑定两个 {@link UseCase}。最高分辨率为 720p 或 1440p,如需了解详情,请参阅以下链接中的 CameraManager#getConcurrentCameraIds()
  • 全新推出 ResolutionSelector API,涵盖以下功能:
    • 应用可以指定宽高比和分辨率策略,以根据自己的需求选择最佳分辨率。
    • 所有尺寸和宽高比参数均以相机设备传感器的坐标表示。
    • 应用可以实现自定义分辨率过滤器,以按所需顺序排列支持的尺寸。
    • 应用还可以启用高分辨率拍摄功能,以获取分辨率更高的图片。不过,请注意,使用高分辨率可能会导致拍摄时间变慢。
    • 添加了 VideoCapture 镜像 API。默认情况下,VideoCapture 录制的视频不会镜像。不过,相机预览默认会在前置摄像头上左右相反。借助 VideoCapture 镜像 API,您可以在使用前置摄像头时对齐相机预览。有三个 MirrorMode,分别是 OFFONON_FRONT_ONLY。如需与相机预览对齐,建议使用 ON_FRONT_ONLY,这表示未为后置摄像头启用镜像,但为前置摄像头启用了镜像。

API 变更

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

bug 修复

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

版本 1.3.0-alpha05

2023 年 3 月 22 日

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

API 变更

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

bug 修复

  • 相机 1.2.2:修复了在某些设备(例如 Pixel)上启用 ProGuard 后 CameraX 扩展程序无法正常运行的问题 (I90aa2)
  • 修复了 PreviewView 错误:如果应用自行处理屏幕方向,预览在旋转时可能会失真。只有某些设备会出现这种情况。此问题可在 Pixel 4a、Pixel 5 和 Pixel 6a 上重现。(I14340b/223488673

版本 1.3.0-alpha04

2023 年 2 月 22 日

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

新功能

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

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

API 变更

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

bug 修复

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

版本 1.3.0-alpha03

2023 年 1 月 25 日

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

API 变更

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

bug 修复

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

版本 1.3.0-alpha02

2022 年 12 月 7 日

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

API 变更

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

bug 修复

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

版本 1.3.0-alpha01

2022 年 11 月 9 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.2

版本 1.2.3

2023 年 5 月 24 日

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

bug 修复

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

版本 1.2.2

2023 年 3 月 22 日

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

bug 修复

  • 修复了在某些设备(例如 Pixel [I90aa2])上启用 ProGuard 后 CameraX 扩展程序无法正常运行的问题

版本 1.2.1

2023 年 1 月 25 日

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

bug 修复

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

版本 1.2.0

2022 年 12 月 7 日

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

自 1.1.0 以来的重要变更

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

版本 1.2.0-rc01

2022 年 10 月 24 日

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

API 变更

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

bug 修复

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

版本 1.2.0-beta02

2022 年 9 月 21 日

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

API 变更

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

bug 修复

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

版本 1.2.0-beta01

2022 年 8 月 24 日

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

新功能

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

bug 修复

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

版本 1.2.0-alpha04

2022 年 7 月 27 日

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

API 变更

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

bug 修复

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

版本 1.2.0-alpha03

2022 年 6 月 29 日

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

API 变更

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

bug 修复

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

版本 1.2.0-alpha02

2022 年 6 月 1 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.2.0-alpha01

2022 年 5 月 18 日

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

新功能

  • 发布了新库 camera-mlkit-vision

bug 修复

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

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

版本 1.1.0

2022 年 6 月 29 日

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

自 1.0.0 以来的重要变更

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

bug 修复

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

版本 1.1.0-rc02

2022 年 6 月 1 日

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

bug 修复

版本 1.1.0-rc01

2022 年 5 月 11 日

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

新功能

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

bug 修复

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

版本 1.1.0-beta03

2022 年 4 月 6 日

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

API 变更

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

bug 修复

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

外部贡献

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

版本 1.1.0-beta02

2022 年 2 月 23 日

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

API 变更

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

bug 修复

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

版本 1.1.0-beta01

2022 年 1 月 26 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha12

2021 年 12 月 15 日

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha11

2021 年 11 月 17 日

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

API 变更

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

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

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

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

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

bug 修复

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

外部贡献

版本 1.1.0-alpha10

2021 年 10 月 13 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha09

2021 年 9 月 29 日

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha08

2021 年 8 月 18 日

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

新功能

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha07

2021 年 7 月 21 日

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

bug 修复

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

版本 1.1.0-alpha06

2021 年 6 月 30 日

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

API 变更

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

版本 1.1.0-alpha05

2021 年 6 月 2 日

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha04

2021 年 4 月 21 日

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

bug 修复

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

版本 1.1.0-alpha03

2021 年 3 月 24 日

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

bug 修复

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

版本 1.1.0-alpha02

2021 年 2 月 24 日

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

API 变更

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

bug 修复

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

版本 1.1.0-alpha01

2021 年 1 月 27 日

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

bug 修复

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

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

版本 1.0.2

2021 年 9 月 29 日

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

bug 修复

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

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

版本 1.0.1

2021 年 7 月 21 日

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

bug 修复

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

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

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

版本 1.0.0

2021 年 5 月 5 日

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

1.0.0 的主要功能

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

已知问题

版本 1.0.0-rc05

2021 年 4 月 21 日

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

bug 修复

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

版本 1.0.0-rc04

2021 年 3 月 24 日

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

bug 修复

版本 1.0.0-rc03

2021 年 2 月 24 日

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

bug 修复

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

版本 1.0.0-rc02

2021 年 1 月 27 日

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

bug 修复

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

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

版本 1.0.0-rc01

2020 年 12 月 16 日

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

API 变更

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

bug 修复

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

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

2020 年 11 月 11 日

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta11

2020 年 10 月 14 日

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

新功能

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

bug 修复

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

Camera-Core 版本 1.0.0-beta11

2020 年 10 月 14 日

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

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

bug 修复

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

Camera-Core 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

Camera-Camera2 版本 1.0.0-beta09

2020 年 9 月 16 日

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

API 变更

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

bug 修复

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

Camera-Core 版本 1.0.0-beta09

2020 年 9 月 16 日

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

API 变更

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

bug 修复

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

已知问题

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

Camera-Camera2 版本 1.0.0-beta08

2020 年 8 月 19 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta08

2020 年 8 月 19 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta07

2020 年 7 月 22 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta07

2020 年 7 月 22 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

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

bug 修复

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

Camera-Core 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta05

2020 年 6 月 10 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta05

2020 年 6 月 10 日

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

API 变更

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

bug 修复

  • 更新了 setTargetResolutionsetTargetRotation 的 Javadoc。(Iae16f)

Camera-Camera2 版本 1.0.0-beta04

2020 年 5 月 27 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta04

2020 年 5 月 27 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

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

Camera-Camera2 版本 1.0.0-beta01

2020 年 2 月 26 日

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

bug 修复

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

Camera-Core 版本 1.0.0-beta01

2020 年 2 月 26 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

bug 修复

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

Camera-Core 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

API 变更

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

Camera-Camera2 版本 1.0.0-alpha09

2020 年 1 月 22 日

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

API 变更

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

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

    Camera2CameraInfo 类需要 ExperimentalCamera2Interop markerClass。

Camera-Core 版本 1.0.0-alpha09

2020 年 1 月 22 日

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

API 变更

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

bug 修复

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

Camera-Camera2 版本 1.0.0-alpha08

2019 年 12 月 18 日

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

已知问题

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

bug 修复

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

API 变更

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

Camera-Core 版本 1.0.0-alpha08

2019 年 12 月 18 日

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

已知问题

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

bug 修复

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

API 变更

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

Camera-Camera2 版本 1.0.0-alpha07

2019 年 12 月 4 日

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

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

Camera-Core 版本 1.0.0-alpha07

2019 年 12 月 4 日

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

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

API 变更

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 添加了缩放控件:

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

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

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

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

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

修复的问题

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

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

2019 年 10 月 9 日

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

新功能

宽高比设置方面的变更:

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

执行器 API

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

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

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

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

API 变更和问题修复

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

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

2019 年 9 月 5 日

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

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

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

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

      CameraX.getCameraControl(LensFacing lensFacing)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2019 年 8 月 7 日

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

新功能

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

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

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

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

对分辨率和宽高比设置进行了一些更改,旨在使 API 更清晰明了:

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

ImageAnalysis 非阻塞模式

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

bug 修复

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

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

2019 年 7 月 2 日

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

API 变更

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

Camera-Core

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

扩展功能

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

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

2019 年 6 月 5 日

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

bug 修复

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

Camera-Camera2 和 Camera-Core 1.0.0-alpha01

2019 年 5 月 7 日

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

Camera-Lifecycle 版本 1.0.0-beta11

2020 年 10 月 14 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-beta10

2020 年 9 月 23 日

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

bug 修复

Camera-Lifecycle 版本 1.0.0-beta09

2020 年 9 月 16 日

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

Camera-Lifecycle 版本 1.0.0-beta08

2020 年 8 月 19 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-beta07

2020 年 7 月 22 日

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

Camera-Lifecycle 版本 1.0.0-beta06

2020 年 6 月 24 日

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

API 变更

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

Camera-Lifecycle 版本 1.0.0-beta05

2020 年 6 月 10 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-beta04

2020 年 5 月 27 日

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

Camera-Lifecycle 版本 1.0.0-beta03

2020 年 4 月 15 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-beta01

2020 年 2 月 26 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-beta02

2020 年 4 月 1 日

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

bug 修复

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

Camera-Lifecycle 版本 1.0.0-alpha10

2020 年 2 月 10 日

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

API 变更

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

Camera-Lifecycle 版本 1.0.0-alpha03

2020 年 1 月 22 日

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

更新

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

Camera-Lifecycle 版本 1.0.0-alpha02

2019 年 12 月 18 日

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

依赖项变更

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

Camera-Lifecycle 版本 1.0.0-alpha01

2019 年 12 月 4 日

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

API 说明

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

Camera-Extensions 和 Camera-View 版本 1.0.0

版本 1.0.0-alpha32

2021 年 12 月 15 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha31

2021 年 11 月 17 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha30

2021 年 10 月 13 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha29

2021 年 9 月 29 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha28

2021 年 8 月 18 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha27

2021 年 7 月 21 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha26

2021 年 6 月 30 日

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

API 变更

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

版本 1.0.0-alpha25

2021 年 6 月 2 日

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

API 变更

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

bug 修复

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

版本 1.0.0-alpha24

2021 年 4 月 21 日

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

bug 修复

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

Camera Extensions 和 View 版本 1.0.0-alpha23

2021 年 3 月 24 日

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

API 变更

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

bug 修复

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

Camera Extensions 和 Camera View 版本 1.0.0-alpha22

2021 年 2 月 24 日

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

API 变更

bug 修复

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

Camera Extensions 和 Camera View 版本 1.0.0-alpha21

2021 年 1 月 27 日

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

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

Camera Extensions 和 Camera View 版本 1.0.0-alpha20

2020 年 12 月 16 日

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

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

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

2020 年 11 月 11 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha18

2020 年 10 月 14 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha18

2020 年 10 月 14 日

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

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

Camera-Extensions 版本 1.0.0-alpha17

2020 年 9 月 23 日

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

bug 修复

Camera-View 版本 1.0.0-alpha17

2020 年 9 月 23 日

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

bug 修复

Camera-Extensions 版本 1.0.0-alpha16

2020 年 9 月 16 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha16

2020 年 9 月 16 日

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

API 变更

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

bug 修复

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

已知问题

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

Camera-Extensions 版本 1.0.0-alpha15

2020 年 8 月 19 日

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

bug 修复

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

    Camera-View 版本 1.0.0-alpha15

    2020 年 8 月 19 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha14

2020 年 7 月 22 日

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

Camera-View 版本 1.0.0-alpha14

2020 年 7 月 22 日

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

Camera-Extensions 版本 1.0.0-alpha13

2020 年 6 月 24 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha13

2020 年 6 月 24 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha11

2020 年 5 月 27 日

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

Camera-View 版本 1.0.0-alpha12

2020 年 6 月 10 日

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

新功能

API 变更

bug 修复

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

Camera-View 版本 1.0.0-alpha11

2020 年 5 月 27 日

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

API 变更

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha10

2020 年 4 月 15 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha10

2020 年 4 月 15 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha09

2020 年 4 月 1 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha09

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

已知问题

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

API 变更

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

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

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

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

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

  • 添加了 PreviewView.getScaleType()

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

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha08

2020 年 2 月 26 日

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

Camera-View 版本 1.0.0-alpha08

2020 年 2 月 26 日

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

bug 修复

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

Camera-Extensions 版本 1.0.0-alpha07

2020 年 2 月 10 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha07

2020 年 2 月 10 日

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

API 变更

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

bug 修复

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

Camera-Extensions 版本1.0.0-alpha06

2020 年 1 月 22 日

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

更新

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

Camera-View 版本 1.0.0-alpha06

2020 年 1 月 22 日

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

更新

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

Camera-Extensions 版本 1.0.0-alpha05

2019 年 12 月 18 日

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

bug 修复

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

Camera-View 版本 1.0.0-alpha05

2019 年 12 月 18 日

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

已知问题

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

新功能

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

Camera-Extensions 版本 1.0.0-alpha04

2019 年 12 月 4 日

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

API 变更

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

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

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

Camera-View 版本 1.0.0-alpha04

2019 年 12 月 4 日

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

API 变更

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

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

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

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

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

2019 年 10 月 9 日

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

新功能

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

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

2019 年 9 月 5 日

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

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

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

2019 年 8 月 7 日

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

  • 新增了适用于将来相机扩展的库,用于访问受支持设备上的效果。该库仍在开发中。
  • 新增了 Camera View 类。该库仍在开发中。