CameraX
下表列出了 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 |
设备测试
我们的实验室在很多设备上对 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-alpha07
和 androidx.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-alpha06
和 androidx.camera:camera-viewfinder-core:1.4.0-alpha06
。版本 1.4.0-alpha06 包含这些提交内容。
API 变更
- 重命名了
Viewfinder
的ImplementationMode
枚举,以更好地反映底层实现,并为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
无法获取正确的传感器坐标。(I916c5、b/345993685) - 修复了在录制视频且可用存储空间不足时无法触发
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE
事件的问题。(I35779、b/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
目标帧速率问题。通过setTargetFrameRate
或Camera2Interop
API 设置的目标帧速率始终会被AeFpsRangeLegacyQuirk
提供的值覆盖。通过此修复程序,CameraX 库将遵循通过setTargetFrameRate
或Camera2Interop
API 设置的值。(Ie2d32) - 添加了使用
CameraEffect
拍摄图片的闪光灯/手电筒/3A 功能。现在,使用CameraEffect
拍摄的图片应与不使用任何CameraEffect
拍摄的图片具有相同的拍摄前和拍摄后处理(例如闪光灯触发器、3A 融合等,如果适用)。(I5ff30) - 排除了 Samsung SM-A057G 设备上
ImageAnalysis
存在问题的输出大小。当ImageAnalysis
使用大于或等于 1920x1440 的分辨率时,会导致预览画面呈黑色。对 SM-A057G 设备应用了ExcludedSupportedSizesQuirk
,以避免此问题。(I63dfe、b/365877975) - 修复了在内部启用串流共享机制以将串流共享给
Preview
和VideoCapture
时出现的Preview/VideoCapture
目标帧速率问题。(I4fdac) - 启用了解决方法,以修复三星 S10e 和 S10+ 设备上的 JPEG 图片元数据不正确的问题。修复后,CameraX 可以成功保存 JPEG 图片,或者在这些设备上发生 JPEG 图片元数据错误问题时,调用
ImageProxy.toBitmap()
函数时可以返回正确的 Bitmap 对象。(Iae493、b/356428987) - 停用了 Samsung A52s 后置摄像头(ID 为 0)的扩展,因为在拍摄 HDR 图片时可能会发生原生代码崩溃,并且在 BOKEH 或 FACE_RETOUCH 模式下配置拍摄会话可能会失败。(I03ec9、b/364152642)
- 修复了在录制视频且可用存储空间不足时无法触发
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE
事件的问题。(Ia5b4f、b/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)
来控制初始静音状态。(I635c3、b/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 扩展:添加了
takePicture
和awaitInstance
挂起函数。 - 实时效果:应用水印和对象突出显示等效果。
- 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
无法获取正确的传感器坐标。(I916c5、b/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 位输出功能。 (I96ff2、I0c3b3)
版本 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.getScreenFlash
和PreviewView.setScreenFlashOverlayColor
API。(I43945)
bug 修复
- 修复了在弱光环境下通过启用闪光灯拍摄的图片并结合 VideoCapture 用例的情况下拍摄的曝光和色调问题。(Ic9814)
- 修复了以下问题:在启用扩展程序的情况下中断
takePicture
请求可能会导致无法获取结果,并且下一个takePicture
请求可能无法再运行。(Iae78f) - 修复了启用扩展程序时发生的内存泄漏问题。(Iab276)
- 解决了 Pixel 7/8 和 Samsung Galaxy S24 系列等设备上的 CameraX 扩展程序故障问题。此问题源自发布模式下的
Camera2OutputConfigImpl
转换问题,在将 AGP 升级到 8.5.1 并启用缩减后出现。(I99598、b/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 修复
- 修复了以下问题:当
ImageCapture
在Preview
+VideoCapture
+ImageCapture
UseCase
组合下选择 1920x1080 时,应用无法在三星 Tab A8 上成功拍照。(I5a463、b/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)。(Ie3ed3、b/337336152) - 修复了在 Pixel 4XL API29 上使用 Preview、
ImageCapture
和VideoCapture(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。借助新的
CameraExtensionsInfo
和CameraExtensionsControl
接口,应用可以监控和调整扩展程序强度设置。应用可以通过新添加的ExtensionsManager#getCameraExtensionsInfo()
或ExtensionsManager#getCameraExtensionsControl()
方法获取CameraExtensionsInfo
或CameraExtensionsControl
实例。(I28e1a) - 添加了
ProcessCameraProvider.awaitInstance
,它是ProcessCameraProvider.getInstance
的挂起版本 (Ib22b9) - 添加了
PreviewView#getSensorToViewTransform()
API。矩阵表示从相机传感器坐标到PreviewView
坐标的转换。这可用于将坐标从一个UseCase
转换到另一个UseCase
。例如,将ImageAnalysis
中检测到的对象的坐标转换为PreviewView
叠加层。(I947ab) - 使
camera-viewfinder-core
API 更加通用,以便camera-viewfinder
和camera-viewfinder-compose
可以使用它。(I1e295) - 向
ViewfinderSurfaceRequest
添加了getSurface
函数。(I781a0) - 在
camera-viewfinder
中使用camera-viewfinder-core
并废弃ViewfinderSurfaceRequest
和CameraViewfinder
。(I6198c) - 添加了
ZoomGestureDetector
,用于解释专门为双指张合缩放 activity 配置的缩放手势。(Ifafbf)
bug 修复
- 修复了与分析器默认目标分辨率设置相关的
ImageAnalysis
分辨率选择问题:即使应用设置了其他分析器默认分辨率设置,目标分辨率也错误地保持为 640x480。如果应用遇到此问题 (1.3.0 ~ 1.3.2) 且无法升级到包含解决方案的较新版本,则可以直接将ResolutionSelector
设置为首选分辨率,并将匹配的AspectRatioStrategy
设置为ImageAnalysis
UseCase
,以解决此问题。(I81f72、b/330091012) - 修复了以下问题:如果当前请求失败,队列中的
takePicture
请求可能会无法运行。(Ie0801) - 将无效的 JPEG 数据检查应用于 Vivo X60 和 X60 Pro 设备。这可以修复这些设备上图片异常大的问题。(I82247、b/288828159)
- 修复了 Samsung A24 设备上 JPEG 图片元数据不正确的问题。修复后,CameraX 可以成功保存 JPEG 图片,或者在三星 A24 设备上调用
ImageProxy.toBitmap()
函数时可以返回正确的 Bitmap 对象。(I8d6eb、b/309005680) - 如果拍摄的图片大于 10 MB,则将无效的 JPEG 数据检查应用于所有三星设备。这可以修复三星设备上异常大的图片问题。(Ic2a65、b/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 输出(包括
Preview
、VideoCapture
和/或ImageCapture
)应用实时特效的库。此工件包含CameraEffect
API 的 OpenGL 实现,可高效地操控相机输出。 OverlayEffect
:适用于使用 Android 的 Canvas API 绘制叠加层。这样一来,应用便可在相机输出中应用水印或突出显示检测到的对象。- 适用于预览用例的
DynamicRange
API:现在,您可以在预览用例中设置动态范围,而无需考虑视频用例。这样,您就可以仅将 HDR 动态范围(例如 HLG10)用于预览。CameraInfo
中还提供了新的 API,用于查询每个相机支持的动态范围。
API 变更
- 将
ScreenFlashUiCompleter
重命名为ScreenFlashListener
,并将ScreenFlashUiCompleter#getExpirationTimeMillis
移至ScreenFlash#apply
的expirationTimeMillis
参数。(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
错误地返回了较小的值。(I4aa0d、b/317543616) - 当
ImageCapture
解除绑定或相机关闭时,系统会立即调用ImageCapture#ScreenFlash#clear
事件,还修复了由于在这些情况下拍摄未正确完成而导致系统从未调用该事件的一些 bug。(If99f9) - 修复了在
takePicture
请求完成之前生命周期停止时发生崩溃的问题(Idf017、b/306202751) - 修复了在某些设备上启用扩展程序后相机预览变成黑色的问题 (I1ffd0)
- 修复了使用 Snapdragon 778G SoC 的设备上的视频录制时长不正确的问题。If6aa7、b/316057919
版本 1.4.0-alpha03
2023 年 12 月 13 日
发布了 androidx.camera:camera-*:1.4.0-alpha03
。版本 1.4.0-alpha03 中包含这些提交内容。
新功能
- 添加了
CameraInfo.mustPlayShutterSound
,用于提供有关是否必须根据地区限制播放快门提示音的信息。(Ifda84) - 添加了
OnImageCapturedCallback.onCaptureStarted
和OnImageSavedCallback.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()
时,可以在OnImageSavedCallback
或OnImageCapturedCallback
中实现onPostviewBitmapAvailable
和onCaptureProcessProgressed
,以获取观看后通知并处理进度通知(如果受支持)。(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
不包含超高清设置,即使编解码器能够录制超高清视频也是如此。(Iedbe2、b/263961771) - 向
CameraController
添加了ImageAnalysis
输出格式 getter/setter。(I9a96c、b/308240643)
bug 修复
- 相机
1.3.1
:改进了ProcessCameraProvider#bindToLifecycle()
性能。主要变更是优化了确定最适合UseCases
的大小组合的过程。最佳结果因目标设备的具体UseCase
组合和支持的输出大小数量而异。(I454f2) - 在启用扩展程序时允许使用
VideoCapture
。(I91f32) - 修复了 Samsung A71 和 M51 系列设备上拍摄的 JPEG 图片过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含多余的 0 填充数据。它会导致所拍摄的图片文件过大。系统会移除这些多余的 0 填充数据,以使拍摄的图片具有正常的图片文件大小。(I01afc、b/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
,取而代之的是ResolutionSelector
。ResolutionSelector
是一种更全面的分辨率选择方式,并且与 camera-core API 保持一致。(I93abd、b/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 填充数据,以使拍摄的图片具有正常的图片文件大小。(I79505、b/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
错误地返回了较小的值。(I4aa0d、b/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,以解决此问题。(I81f72、b/330091012)
版本 1.3.2
2024 年 3 月 6 日
发布了 androidx.camera:camera-*:1.3.2
。版本 1.3.2 包含这些提交内容。
bug 修复
- 修复了三星 A24 设备上的 JPEG 元数据问题。CameraX 现在可以准确保存图片,并且
ImageProxy.toBitmap()
函数会返回正确的 Bitmap 对象。(I8d6eb、b/309005680) - 移除了 Redmi Note 9 Pro 设备上的 9280x6944 分辨率选项,因为存在问题。(Ia23da)
版本 1.3.1
2023 年 12 月 13 日
发布了 androidx.camera:camera-*:1.3.1
。版本 1.3.1 中包含这些提交内容。
bug 修复
提升了 ProcessCameraProvider#bindToLifecycle()
性能。主要变更是优化了确定最适合 UseCases
的大小组合的过程。最佳结果因目标设备的具体 UseCase
组合和支持的输出大小数量而异。(I454f2)
以下是各种场景的一些参考结果:
四个
UseCases
:Preview
+ImageCapture
+ImageAnalysis
+VideoCapture
- Google Pixel 7:大约 430 毫秒到 60 毫秒
- Samsung Galaxy S23 Ultra:大约 540 毫秒到 45 毫秒
- Samsung A53 5G:大约 115 毫秒到 70 毫秒
三个
UseCases
:Preview
+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 以来的重要变更
- 视频功能,包括 10 位 HDR、剪裁、镜像/非镜像、静音/取消静音、设置帧速率等。
- 双并发摄像头
- 效果库
- 分辨率选择器
- 超广角摄像头和潜望镜摄像头的选择
- 视频录制期间切换摄像头(实验性功能)
版本 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 的填充数据,使拍摄的图片具有正常的图片文件大小。(I407b0、b/288828159)
- 修复了三星 S22(SM-S901B、SM-S901B/DS)和 S22+ (SM-S906B) 系列设备上拍摄的 JPEG 图片较大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含多余的 0 填充数据。这会导致在 S22 SM-S901B/DS 设备上拍摄的图片文件大小很大,约为 13MB。系统会移除这些冗余 0 的填充数据,使拍摄的图片具有正常的图片文件大小。(I73be9、b/288828159)
- 修复了 Samsung A5、A52、A70 和 A72 系列设备上拍摄的 JPEG 图片过大的问题。拍摄的 JPEG 图像在 JFIF 压缩数据段中包含冗余 0 的填充数据。这会导致拍摄的图片文件大小过大(例如约 32MB 甚至 96MB)。系统会移除这些多余的 0 填充数据,以使拍摄的图片具有正常的图片文件大小。(I97c4d、b/288828159)
- 修复了在启用扩展程序时拍照时发生的原生代码崩溃问题 (I698f5)
版本 1.3.0-beta02
2023 年 7 月 26 日
发布了 androidx.camera:camera-*:1.3.0-beta02
。版本 1.3.0-beta02 中包含这些提交内容。
bug 修复
- 在 Pixel 4 和 5 变体中使用手电筒作为闪光灯,以提高在光线不足的情况下的拍摄质量(I56ff5、b/280221967)
- 修复了三星 A5 (2017) 系列设备上拍摄的 JPEG 图片过大的问题。捕获的 JPEG 图片在 JFIF 压缩数据段中包含多余的 0 填充数据。这会导致拍摄的图片文件大小约为 32 MB。系统会移除这些冗余 0 的填充数据,使拍摄的图片具有正常的图片文件大小。(I29837、b/288828159)
- 修复了在
CaptureFailedRetryQuirk
中提及的问题设备中,如果拍摄失败,重试无法正确触发的问题。(I7b589)
版本 1.3.0-beta01
2023 年 6 月 21 日
发布了 androidx.camera:camera-*:1.3.0-beta01
。版本 1.3.0-beta01 中包含这些提交内容。
API 变更
- 将
ResolutionSelector.Builder#setHighResolutionEnabledFlag(int)
函数名称重命名为setAllowedResolutionMode
,并将ResolutionSelector#HIGH_RESOLUTION_FLAG_OFF
/ON
常量重命名为PREFER_CAPTURE_RATE_OVER_HIGHER_RESOLUTION
/PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE
。If84e8 - 移除了已废弃的 API
ImageAnalysis.setTargetRotationDegrees(int)
、ImageCapture.setTargetRotationDegrees(int)
和VideoCapture.setTargetRotationDegrees(int)
。(Id8e77) DynamicRange
类表示图片的动态范围。这可用于选择高动态范围格式作为VideoCapture
的输出,通过VideoCapture.Builder#setDynamicRange()
进行处理。(Ib0377)- 向
ExtensionsManager
添加了isImageAnalysisSupported
API,当启用扩展程序时,应用可以确定ImageAnalysis
用例是否可以与 Preview 和ImageCapture
一起绑定。(I1bc63) - 从
Recorder
获取的新VideoCapabilities
类可用于查询设备上视频录制的支持的动态范围和画质。QualitySelector
的getSupportedQualities()
和isQualitySupported()
方法即将弃用。请改用VideoCapabilities
的getSupportedQualities()
和isQualitySupported()
方法。(I04014) CameraController#setVideoCaptureTargetQuality()
已重命名为setVideoCaptureQualitySelector
,并采用了参数QualitySelector
,这让视频画质设置更加灵活。CameraController#getVideoCaptureTargetQuality()
会相应地更改为getVideoCaptureQualitySelector
。(I520ed)- 移除了视频功能的实验性注解。视频功能现已稳定。(I1a113)
bug 修复
- 在 Samsung SM-A320 设备上使用手电筒作为闪光灯,以提高在弱光环境中拍摄图片的速度和质量。(I6a022、b/286190938)
- 为
ImageProxy.toBitmap()
添加了ImageFormat.JPEG
格式支持。如果无法解码 JPEG 字节数组,系统会抛出UnsupportedOperationException
。(I81958、b/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
的使用,并废弃了 APIImageAnalysis.setTargetRotationDegrees(int)
、ImageCapture.setTargetRotationDegrees(int)
和VideoCapture.setTargetRotationDegrees(int)
。(Ia9010) - 添加了新的 API
Preview#getTargetFrameRate
和Preview.Builder#setTargetFrameRate
,以便能够设置和检索预览版用例的目标帧速率 (If4f22) - 现在,当
Recording
对象因垃圾回收而停止时,VideoRecordEvent.Finalize
将会以错误代码ERROR_RECORDING_GARBAGE_COLLECTED
完成。(Iba974)
bug 修复
- 修复了
StreamConfigurationMapCompat
中的缓存输出大小为 null 时出现的NullPointerException
。(Idf124、b/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
,分别是OFF
、ON
和ON_FRONT_ONLY
。如需与相机预览对齐,建议使用ON_FRONT_ONLY
,这表示未为后置摄像头启用镜像,但为前置摄像头启用了镜像。
API 变更
- 公开了新的
ResolutionSelector
API。应用可以使用回退规则或自定义分辨率过滤器指定宽高比和分辨率策略,以获得所需的结果。应用可以指定一个标志来启用高分辨率捕获。这样,CameraX 在拍照或录制视频时便可以选择更高的分辨率。不过,请注意,使用高分辨率可能会导致拍摄时间变慢。(Ibed95) - 现在,您可以通过
CameraInfo#getSupportedFrameRateRanges()
查询 AE 算法支持的 FPS 范围。(Iaa67f) - 将所有帧速率方法的名称整合为使用“FrameRate”。更正了
VideoCapture#getTargetFrameRate()
中的 javadoc 错误 (I83304) - 废弃了旧版
setTargetAspectRatio
和setTargetResolution
API。请改用新的ResolutionSelector
API。(I542c3) - 添加了适用于并发双摄像头的公共 API,包括
List<List<CameraInfo>> getAvailableConcurrentCameraInfos()
ConcurrentCamera bindToLifecycle(@NonNull ConcurrentCameraConfig concurrentCameraConfig)
boolean isConcurrentCameraModeOn()
和ConcurrentCameraConfig
、SingleCameraConfig
和ConcurrentCamera
(Iab1c1)
- 将
ImageProcessor.Response#getOutputImage
设为 NonNull (Ib9c60) - 添加了
VideoCapture
镜像 API,包括VideoCapture.Builder.setMirrorMode(int)
和VideoCapture.getMirrorMode()
。对于要求视频录制与常见相机预览行为保持一致的应用,这些 API 非常有用,例如,后置摄像头预览不会被镜像,但前置摄像头预览会被镜像。(I713b6、b/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。(Ibec7e、b/270656244) - 修复了以下问题:在 Android 10 或更高版本中,使用外部存储空间公共文件夹中的文件拍照始终会失败。请注意,在 Android 10 中,如需使用外部存储空间公共文件夹中的 File 拍照,还需要在应用标记中将
requestLegacyExternalStorage
设置为 true。(I11b2c) - 修复了
DefaultSurfaceProcessor
中的RejectedExecutionException
崩溃问题。当VideoCapture
绑定且 activity 处于暂停状态时,可能会发生崩溃。(Idb46a、b/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)
。(Id3ffe、b/205242781) - 允许将
VIDEO_CAPTURE
和PREVIEW|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 上重现。(I14340、b/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_888
和PixelFormat.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
,用于设置目标视频编码BitRate
和Recorder#getTargetVideoEncodingBitRate
以获取目标视频编码比特率。(I5984d)
bug 修复
- 修复了没有闪光灯元件以及闪光灯模式开启时
ImageCapture
失败的问题。(I9e8b4、b/263391112) - 修复了在某些搭载 Android 12 的三星设备上写入 Exif 位置数据时出现的 JPEG 图片损坏问题。(Ib7086、b/263747161、b/263289024)
- 如果在相机初始化完成之前设置手电筒/缩放功能(例如调用
CameraController#enableTorch
),系统会在初始化完成之后才缓存并提交待处理的操作。(I11e92、b/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 后不再使用的元数据、
OnVideoSavedCallback
、OutputFileOptions
和OutputFileResults
类。(I38cd8) - 应用新的视频拍摄 API。由于
setTargetResolution
不再受支持,getVideoCaptureTargetSize
和setVideoCaptureTargetSize
方法被相应地替换为getVideoCaptureTargetQuality
和setVideoCaptureTargetQuality
方法。(I2a1d5)
bug 修复
- 移除了已废弃的
core.VideoCapture
API。(I531e0) - 修复了在没有存储权限的情况下拍照时不调用
onError
回调的问题。(I936db、b/244807669) - 改进了相机扩展的质量和可靠性。由于焦外成像支持、图片拍摄和预览功能无法恢复正常,使用 Camera Extensions v1.1.0 及更早版本的摩托罗拉设备上停用了相机扩展。(Id3ce3)
- 修复了在旧版设备上通过
ViewPort
剪裁视频时出现原生代码崩溃的问题。(I16b8a、b/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) - 支持在使用
ViewPort
或CameraController
API 时进行视频剪裁(所见即所得功能)。(Ifbba8、b/201085351) - 修复了使用前置摄像头拍摄的视频无法在华为 P40 lite 上录制的问题。(I87c57、b/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。(Ibec7e、b/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 的预览用例时帧速率偏低的问题。(If8c88、b/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 级别要求(I26e3e、b/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.Analyzer
和MLKitAnalyzer
成为了正式 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
对象。(I313a0、b/204197544)
bug 修复
- 修复了使用未绑定的预览拍照的问题(Ie70b6、b/235119898)
- 修复了在音频来源不可用时试图录制而出现的
Recorder
崩溃问题。(I9f652)
版本 1.2.0-alpha03
2022 年 6 月 29 日
发布了 androidx.camera:camera-*:1.2.0-alpha03
。版本 1.2.0-alpha03 中包含这些提交内容。
API 变更
- 移除了
ImageAnalysis.Analyzer
和MLKitAnalyzer
的实验性注释。(I0ff22)
bug 修复
- 新增了自动对焦默认超时值 5000 毫秒 - 当
FocusMeteringAction
未取消且 AF 部分在这段时长内未聚焦时,系统会使用isFocusSuccessful
=false 自动完成 AF 部分。(Ibc2e3) - 修复了使用未绑定的预览拍照的问题(I1d3a2、b/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 方法在所报告设备上关闭手电筒的问题。(Ib5eb5、b/228272227) - 修复了在获取
CONTROL_ZOOM_RATIO_RANGE
特性时不处理AssertionError
的 bug。(/Ia248a、b/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
错误地获得全高清分辨率。实际上,这种用例组合支持超高清分辨率,应该采用这种分辨率。(I0e788、b/230651237) - 修复了
ImageCapture.takePicture()
上的NullPointerException
。(I92366、b/230454568、b/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.setOutputImageRotationEnabled
和setOutputImageFormat
) - 支持多窗口模式,具体表现为:在相机被另一应用中断且焦点回归时允许 CameraX 应用恢复相机。
- 通过修复一些预览问题,确保 CameraX 能够在可折叠设备上正常运行。
- 添加了将通过 CameraInfo 公开的
CameraState
API。 - 添加了 API
ProcessCameraProvider.getAvailableCameraInfos()
,以用于直接检索可用相机的相关信息 - 启用扩展程序后,针对
ImageCapture#OnImageCapturedCallback
输出 JPEG 格式。 - 在
CameraInfo
中添加了 APIisFocusMeteringSupported
,以便应用检查当前相机是否支持给定的FocusMeteringAction
。 - 公开了
getResolutionInfo
API,以用于提供 Preview、ImageCapture
和ImageAnalysis
的分辨率信息。 - 添加了新的 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#getLayoutDirection
、ViewPort.Builder#setLayoutDirection
和ViewPort.Builder#setScaleType
。 - 将
ExperimentalUseCaseGroupLifecycle
升级成了正式的公共 API。 - 对现有 API 的更改
Renamed MediaStoreOutputOptions.getCollection
至MediaStoreOutputOptions.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 修复
- 修复了
ImageCapture.takePicture()
上的NullPointerException
。(I92366、b/230454568、b/229766155) - 修复了在获取
CONTROL_ZOOM_RATIO_RANGE
特性时不处理AssertionError
的 bug。(Ia248a、b/231701345)
版本 1.1.0-rc01
2022 年 5 月 11 日
发布了 androidx.camera:camera-*:1.1.0-rc01
。版本 1.1.0-rc01 中包含这些提交内容。
新功能
- 针对 camera-video、camera-view 和 camera-extension 发布了第一个 RC 版本
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
中预览方向有误的问题。(I1ea36、b/223488673) - 修复了一个多窗口问题:当 (1) 其他高优先级应用打开另一摄像头时 (2) 该设备为 Samsung Android 12 设备时,如果焦点回到应用,该应用将无法恢复使用摄像头。(I7e9f2)
- 针对在检查闪光灯是否可用时设备崩溃的问题提供了解决方法。这些设备不会提供手电筒功能。(If26a3、b/216667482)
- 修复了当应用使用扩展程序并启用 ProGuard 时发生的
AbstractMethodError
问题。(I7cbaf、b/222726805) - 强制停用 Motorola Razr 5G 设备上的焦外成像扩展模式,解决了该模式会导致预览黑屏的问题。(I35d49)
- 修复了部分三星设备(API 29 以下级别)在暂停和继续播放后音频/视频不同步的问题。(I64622、b/202798609、b/202798572)
- 修复了 Sony G3125 在暂停和恢复播放后音频/视频不同步的问题。(I2a1a5、b/202799148)
- 修复了当录音机遇到
InvalidConfigException
时发生崩溃的问题。不过,这项修复只会防止应用崩溃,不会解决导致InvalidConfigException
的原因。如果仍无法配置Recorder
,应用会在开始录制时收到错误回调。(I89c29、b/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 修复
版本 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 版本的设备上录制视频时发生崩溃的问题。(I88fdf、b/212328261)
- 修复了对三星设备中的前置摄像头使用
cameraControl#startFocusAndMetering()
时出现的 AF 区域错误问题(Ifbf59、b/210548792) - 在 Pixel 3a/Pixel 3a XL 上使用手电筒作为闪光灯,以提高在黑暗环境中拍摄图片的速度和质量(Ib12b6、b/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)
注解。(I8e286、b/204917951) QualitySelector
的画质常量和后备策略常量已更改为由类对象表示。例如,QualitySelector.QUALITY_HD
会更改为Quality.HD
,而QualitySelector.FALLBACK_STRATEGY_LOWER
会更改为FallbackStrategy.lowerQualityOrHigherThan(Quality)
返回的实例。用于创建QualitySelector
的 API 已更改为基于列表的 API。新 APIQualitySelector.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
模式下拍摄的照片在黑暗光线下曝光不足的问题(I13f19、b/205373142) - 始终使用最新的显示尺寸来确定预览
Resolution
。(I4a694) - 已滤除没有
REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
的相机。具有REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
的相机具备每台相机设备都支持的最少功能集。没有REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
的相机可能支持特殊功能,但不支持标准颜色输出。CameraX
不支持这些相机的Preview
、ImageCapture
、ImageAnalysis
或VideoCapture
用例。因此,应滤除这些相机,以防止错误使用。(Ib8cda) - 当结果集为空时,
CameraSelector#filter
不再抛出IllegalArgumentException
。(I27804) - 现在会使用更智能的启发法来根据 OEM 指定的配置文件选择编码器设置。(Iaeef0)
- 修复了以下 bug:在 Pixel1 上开始录制超高清视频后,预览会交错显示彩色线条。(I833c6、b/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+,以缩短延迟时间。(Ib6270、b/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 或更高版本的应用均无需针对此项变更执行任何操作。(Ie7f2e、b/200599470)
bug 修复
- 抛出 InitializationException 以便应用能够妥善处理创建 CameraCharacteristics 时发生的 AssertionError 问题。(Ibec79)
版本 1.1.0-alpha09
2021 年 9 月 29 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha09
、androidx.camera:camera-core:1.1.0-alpha09
和 androidx.camera:camera-lifecycle:1.1.0-alpha09
。版本 1.1.0-alpha09 中包含这些提交内容。
API 变更
- 由于 API 不再处于实验阶段,因此 ExperimentalUseCaseGroup 注解现已移除。(I01ef5)
bug 修复
- 修复了在
MAXIMIZE_QUALITY
模式下拍摄的照片被虚化的问题。(I173a9、b/193823892) - 修复了 Samsung Galaxy J5 在黑暗环境中开启闪光灯/自动拍照后相机会卡住的问题 (I3aab9)
- ImageCapture 如需剪裁,系统会根据设定的拍摄模式,以指定的 JPEG 质量级别压缩剪裁后的输出图片。如果拍摄模式为
CAPTURE_MODE_MINIMIZE_LATENCY
,JPEG 压缩质量将为 95。如果拍摄模式为CAPTURE_MODE_MAXIMIZE_QUALITY
,JPEG 压缩质量则为 100。(Ieb37c、b/142856426)
版本 1.1.0-alpha08
2021 年 8 月 18 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha08
、androidx.camera:camera-core:1.1.0-alpha08
和 androidx.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 上的预览屏幕亮度过高的问题。仅当特定的预览分辨率与较大的放大值结合使用时,才会发生此问题。(Idefce、b/192129158)
- 修复了某些设备上的闪光灯无法正常工作的问题,如果将闪光灯模式设为 FLASH_MODE_ON 后不久接着拍照,就会发生此问题。(Ieb49b)
- 修复了在绑定 VideoCapture、ImageCapture 和 Preview 的情况下拍照时预览会暂停一段时间的问题。(I56197、b/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) 中相应格式或目标的相机设备最大输出分辨率。(I1ee97、b/192911449)
- 已将 EXIF 信息添加到所拍摄的图片中。(I01ff0、b/193342619)
- 在 ImageCapture 中,如果保存位置是 File,则返回所保存图片的 URI。(Ib5b49、b/149241379)
- 修复了在许多设备上开启闪光灯拍照时图片颜色较暗的问题。(I4e510)
版本 1.1.0-alpha07
2021 年 7 月 21 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha07
、androidx.camera:camera-core:1.1.0-alpha07
和 androidx.camera:camera-lifecycle:1.1.0-alpha07
。版本 1.1.0-alpha07 中包含这些提交内容。
bug 修复
- 修复了 Samsung Galaxy Note 5 在黑暗环境中开启闪光灯/自动拍照后相机会卡住的问题 (If6871)
- 修复了启用扩展模式且设置
ImageCapture#CAPTURE_MODE_MAX_QUALITY
模式时出现的YuvToJpegProcessor
EOFException 问题。(I538bd、b/192017012)
版本 1.1.0-alpha06
2021 年 6 月 30 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha06
、androidx.camera:camera-core:1.1.0-alpha06
和 androidx.camera:camera-lifecycle:1.1.0-alpha06
。版本 1.1.0-alpha06 中包含这些提交内容。
API 变更
- 提升了针对 camera-core 的实验性曝光补偿 API (I08ee8)
- 在 CameraInfo 中添加了 API isFocusMeterSupported,让应用可以检查当前相机是否支持给定的 FocusMeteringAction。(Ib45ae、b/188606490)
- 公开了 getResolutionInfo API,用于提供 Preview、ImageCapture 和 ImageAnalysis 的分辨率信息。(I2b613、b/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#getLayoutDirection
、ViewPort.Builder#setLayoutDirection
和ViewPort.Builder#setScaleType
。(I7cee8)
版本 1.1.0-alpha05
2021 年 6 月 2 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha05
、androidx.camera:camera-core:1.1.0-alpha05
和 androidx.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。(I3b2ef、b/159033688)
版本 1.1.0-alpha04
2021 年 4 月 21 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha04
、androidx.camera:camera-core:1.1.0-alpha04
和 androidx.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-alpha03
、androidx.camera:camera-core:1.1.0-alpha03
和 androidx.camera:camera-lifecycle:1.1.0-alpha03
。版本 1.1.0-alpha03 中包含这些提交内容。
bug 修复
- 启用扩展模式后,针对
ImageCapture#OnImageCapturedCallback
输出 JPEG 格式。(I0d7b1) - 修复了 UMIDIGI BISON 设备上的初始化故障(I57d9e、b/180818665)
- 修复了 Samsung A3 在 PreviewView 中的预览发生拉伸变形的问题。(Iacb30、b/180121821)
版本 1.1.0-alpha02
2021 年 2 月 24 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha02
、androidx.camera:camera-core:1.1.0-alpha02
和 androidx.camera:camera-lifecycle:1.1.0-alpha02
。版本 1.1.0-alpha02 中包含这些提交内容。
API 变更
- 添加了 API
ProcessCameraProvider.getAvailableCameraInfos()
以便直接检索有关可用相机的信息,可用相机可以是设备的所有相机,也可以是由CameraXConfig.Builder.setAvailableCamerasLimiter(CameraSelector)
中提供的CameraSelector
选择的相机。(Ieac08)
bug 修复
- CameraX 现在会试着在进行初始尝试时强制打开某个相机,这可能会导致 CameraX 在其应用的优先级较高时从其他相机客户端窃取相机使用权。(Iab069、b/175820568)
- 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。(Ice307)
- 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例中出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。(Ic12da、b/175851631)
- 修复了 ExtensionsErrorListener,以便仅在绑定 Preview 或 ImageCapture 时报告错误。(I5ae39)
- 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片。(I1fd4e、b/177061560)
- 修复了因使用“File”类型 OutputFileOptions 而导致的 ImageCapture 性能回归问题。(I5164a、b/177061560)
- 更新了文档,以建议不要使用库代码中的
ProcessCameraProvider.configureInstance(...)
。(Ib8a9f)
版本 1.1.0-alpha01
2021 年 1 月 27 日
发布了 androidx.camera:camera-camera2:1.1.0-alpha01
、androidx.camera:camera-core:1.1.0-alpha01
和 androidx.camera:camera-lifecycle:1.1.0-alpha01
。版本 1.1.0-alpha01 中包含这些提交内容。
bug 修复
- 针对 SM-G930T 后置相机上 JPEG 图片数据间歇性损坏的问题提供了解决方法。(I52001、b/159831206)
- 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的
IllegalArgumentException
问题。(I2a63c、b/150506192) - 如果库中没有明确声明的公开资源(例如,通过 public.xml 进行声明),那么库中的资源现在默认为私有资源。(Ia1dcc、b/170882230)
Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.0.2
版本 1.0.2
2021 年 9 月 29 日
发布了 androidx.camera:camera-camera2:1.0.2
、androidx.camera:camera-core:1.0.2
和 androidx.camera:camera-lifecycle:1.0.2
。版本 1.0.2 中包含这些提交内容。
bug 修复
- 修复了在
MAXIMIZE_QUALITY
模式下拍摄的照片被虚化的问题。(I173a9、b/193823892) - 修复了在许多设备上开启闪光灯拍照时图片颜色较暗的问题。(I4e510)
Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.0.1
版本 1.0.1
2021 年 7 月 21 日
发布了 androidx.camera:camera-camera2:1.0.1
、androidx.camera:camera-core:1.0.1
和 androidx.camera:camera-lifecycle:1.0.1
。版本 1.0.1 中包含这些提交内容。
bug 修复
修复了
setZoomRatio
和setLinearZoom
中返回的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.0
、androidx.camera:camera-core:1.0.0
和 androidx.camera:camera-lifecycle:1.0.0
。版本 1.0.0 中包含这些提交内容。
1.0.0 的主要功能
- CameraX 支持 Preview、ImageCapture 和 Analysis
- CameraX 通过一个易于使用的 API 管理相机生命周期
- CameraX 旨在提供一个兼容性层来修复 Android 相机生态系统中的诸多问题
已知问题
- 请参阅已知问题列表
版本 1.0.0-rc05
2021 年 4 月 21 日
发布了 androidx.camera:camera-camera2:1.0.0-rc05
、androidx.camera:camera-core:1.0.0-rc05
和 androidx.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-rc04
、androidx.camera:camera-core:1.0.0-rc04
和 androidx.camera:camera-lifecycle:1.0.0-rc04
。版本 1.0.0-rc04 中包含这些提交内容。
bug 修复
- 修复了 UMIDIGI BISON 设备上的初始化故障(I57d9e、b/180818665)
版本 1.0.0-rc03
2021 年 2 月 24 日
发布了 androidx.camera:camera-camera2:1.0.0-rc03
、androidx.camera:camera-core:1.0.0-rc03
和 androidx.camera:camera-lifecycle:1.0.0-rc03
。版本 1.0.0-rc03 中包含这些提交内容。
bug 修复
- 修复了
ProcessCameraProvider#getInstance
文档中的格式错误 - 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。
- 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片
- 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。
- 针对 SM-G930T 后置相机上 JPEG 图片数据间歇性损坏的问题提供了解决方法。(I52001、b/159831206)
- 此更改会在 ImageAnalysis 中图片队列超出上限时捕获异常。因此,您可能会注意到其他用例中出现冻结或运行缓慢(例如,预览冻结/运行缓慢),而不是崩溃。(Ic12da、b/175851631)
- 修复了在 CameraXConfig 中使用 setAvailableCamerasLimiter 时 Robolectric 测试失败的问题。(Ice307)
- 通过移除在拍摄照片前对图片保存位置的验证,修复了 ImageCapture 性能回归的问题。进行此项更改后,如果保存目标位置无效,系统需要更长时间才能获得失败响应,因为它只会在拍摄照片后尝试保存图片。(I1fd4e、b/177061560)
- 修复了因使用“File”类型 OutputFileOptions 而导致的 ImageCapture 性能回归问题。(I5164a、b/177061560)
版本 1.0.0-rc02
2021 年 1 月 27 日
发布了 androidx.camera:camera-camera2:1.0.0-rc02
、androidx.camera:camera-core:1.0.0-rc02
和 androidx.camera:camera-lifecycle:1.0.0-rc02
。版本 1.0.0-rc02 中包含这些提交内容。
bug 修复
- 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的 IllegalArgumentException 问题。(b/150506192)
限制了相机尝试重新打开的次数。在尝试从打开相机时遇到的某些问题中恢复时,CameraX 不会再无限期地尝试重新打开相机,而是重试 10 秒后即停止。I435d2
修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的
IllegalArgumentException
问题。(I2a63c、b/150506192)
版本 1.0.0-rc01
2020 年 12 月 16 日
发布了 androidx.camera:camera-camera2:1.0.0-rc01
、androidx.camera:camera-core:1.0.0-rc01
和 androidx.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 图片数据间歇性损坏的问题提供了解决方法。(I5aca5、b/159831206)
- 修复了 Samsung SM-A716 设备上在环境昏暗的情况下始终开启闪光灯时拍照无法收到结果的问题。(If98b2、b/172036589)
- 修复了无法通过调用
Preview.setSurfaceProvider(null)
停止预览的问题。(I3ac18) - 修复了在某些设备上拍摄 4:3 图片时的屏幕方向问题。(I0e3fb、b/171492111)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 1.0.0-beta12
2020 年 11 月 11 日
发布了 androidx.camera:camera-camera2:1.0.0-beta12
、androidx.camera:camera-core:1.0.0-beta12
和 androidx.camera:camera-lifecycle:1.0.0-beta12
。版本 1.0.0-beta12 中包含这些提交内容。
bug 修复
- 停用了 Samsung A3 设备上的自动闪光灯,以修复在 Samsung A3 设备上使用自动闪光灯 AE 模式拍照时出现的崩溃问题。(Ia5fe3、b/157535165)
- 修复了搭载 Android L(API 级别 21 和 22)的 Nexus 4 设备上的预览拉伸问题。(I4d407、b/158749159)
OnImageCapturedCallback#onCaptureSuccess
基类实现不再关闭图片。这是为了防止开发者遇到意外行为。开发者不应依赖 super.onCaptureSuccess 来关闭图片。(Ifbf9c)- 废弃了实验性注解的 androidx 变体,以与 Kotlin 保持一致。我们已将其替换为 RequiresOptIn 注解,并更新了面向 Java 的 linter,以支持新的 Kotlin 注解和新的 androidx 变体。(I52495、b/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(I8c565、b/167697553)
Camera-Camera2 版本 1.0.0-beta10
2020 年 9 月 23 日
发布了 androidx.camera:camera-camera2:1.0.0-beta10
。版本 1.0.0-beta10 中包含这些提交内容。
bug 修复
- 发布了此版本,现可支持 Camera-Core 1.0.0-beta10
Camera-Camera2 版本 1.0.0-beta09
2020 年 9 月 16 日
发布了 androidx.camera:camera-camera2:1.0.0-beta09
。版本 1.0.0-beta09 中包含这些提交内容。
API 变更
- Camera2CameraInfo 不提供静态方法,而是在创建时接受 CameraInfo 实例,以从中检索 Camera2 相关信息。(I5b844)
bug 修复
- 修复了平板电脑设备上的目标宽高比问题。当目标宽高比设为
AspectRatio.RATIO_16_9
时,应选择 16:9 的宽高比大小。(Ib7fcf、b/151969438) - 抛出
InitializationException
以便应用能够妥善处理创建 CameraCharacteristics 时发生的 AssertionError 问题。(I89c8c、b/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
,就会发生此问题。其症状就像启用了手电筒模式。(Ib4451、b/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)。(I53167、b/159363774)
- 修复了无法按竞态条件工作的 CameraControl 问题(I2279f、b/152333890、b/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 时,初始化应该不会再崩溃。(I3d3c9、b/160817073)
Camera-Camera2 版本 1.0.0-beta07
2020 年 7 月 22 日
发布了 androidx.camera:camera-camera2:1.0.0-beta07
。版本 1.0.0-beta07 中包含这些提交内容。
bug 修复
Camera-Core 版本 1.0.0-beta07
2020 年 7 月 22 日
发布了 androidx.camera:camera-core:1.0.0-beta07
。版本 1.0.0-beta07 中包含这些提交内容。
API 变更
- 将
FIT_CENTER
、FIT_START
和FIT_END
适合样式与FIT
合并。FIT
表示返回的剪裁矩形是可能的最大传感器矩形。(Ia73c3) - 预览的剪裁矩形按视口配置。只应向最终用户显示剪裁矩形覆盖的区域。(I142a4)
bug 修复
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 上成功聚焦的问题。(If3be7、b/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
,而不是使应用崩溃。(I9909a、b/149413835) - 修复了在
CONTROL_AF_STATE
为 null 的设备上调用startFocusAndMetering
时发生崩溃的问题。(Ife55e、b/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
,而不是使应用崩溃。(I9909a、b/149413835)
bug 修复
- 更新了
setTargetResolution
和setTargetRotation
的 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 替换参数时,无法保证稳定性和行为。(Ibe5a1、b/149103700) - 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3、b/154767663)
- 已将与独立用例相关的错误日志转换为 Camera2CameraImpl 上的调试日志。(I1a565、b/154422490)
- 修复了即使在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fa、b/149729613)
- 修复了
ImageProxy
中源于ImageCapture
的缓冲区未倒回的 bug(I0c455、b/153249512) - 修复了仅绑定 ImageCapture 时存在的以下问题:(1) 无法使用 MAX_QUALITY 拍摄照片;(2) 生成的图片质量不佳,因为自动曝光不起作用。(I17782、b/145326998)
- 提升了当 CameraX 因其他进程或代码路径窃取相机而断开连接时,重新打开相机的可靠性(I1fbc3、b/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 相机堆栈使用的线程。(I7bf32、b/121160431)
bug 修复
- 修复了在
ImageReaderProxy
关闭后访问ImageProxy
时出现的ImageAnalysis
崩溃问题。这也使得Analyzer
接收的所有ImageProxy
必须先关闭,然后ImageReaderProxy
才会关闭。(I4b299、b/145956416、b/154155377、b/156357269) - 从
PreviewView#createSurfaceProvider()
中移除了CameraInfo
参数,PreviewView
现在会在内部从SurfaceRequest
中检索该参数。(If18f0、b/154652477) - 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3、b/154767663)
- 修复了即使在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fa、b/149729613)
- 修复了
ImageAnalysis
的以下问题:多次调用 setAnalyzer/clearAnalyzer 导致分析器无法接收要分析的图片。(I6169f、b/151605317、b/153514544) - 修复了
ImageProxy
中源于ImageCapture
的缓冲区未倒回的 bug(I0c455、b/153249512) - 修复了
CameraManager
中受支持列表中的第一个相机有时未选用的问题。(I4c624、b/153418028) - 修复了由于未释放先前请求的 Surface 便设置
Preview.SurfaceProvider
而导致的间歇性崩溃问题。“java.lang.IllegalStateException: Camera surface session should only fail with request cancellation”
(I8e4e7、b/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 方向旋转值。(Id4281、b/150802561) - 使用 CameraX/Camera2 默认实现时,不需要再对
build.gradle
内的 CameraX 依赖项进行显式排序。对于需要声明严格依赖项的情况,现在所有 CameraX 依赖项都可以包含在 build 文件中。(I46e88) - 修复了屏幕尺寸小于 640x480 的设备上发生的
IllegalArgumentException
问题。(Ife3f2、b/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 方向旋转值。(Id4281、b/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()
更改目标旋转值后,保存的图片宽高比不正确的问题。(I474ea、b/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 变更
- 使用
Executor
和Callback
替换了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()
更改目标旋转值后,保存的图片宽高比不正确的问题。(I474ea、b/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
,允许将图片保存到Uri
和OutputStream
。将过载takePicture
方法合并成了单个方法。更新了测试应用,以将Uri
用作规范示例。(Ia3bec) Preview.PreviewSurfaceProvider
已重命名为Preview.SurfaceProvider
。开发者使用SurfaceProvider
时无需再创建自己的ListenableFuture
;现在可通过新的SurfaceRequest
对象提供Surface
。移除了Preview.getPreviewSurfaceProvider()
方法,因为在Preview
与PreviewView
等其他类结合使用时,此方法可能会被滥用。(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) Preview
和ImageCapture
类现已标记为 final 类。(I2500b)- 更新了 API,
CameraInfo
的getZoomRatio()
、getMaxZoomRatio()
、getMinZoomRatio()
和getLinearZoom()
方法合并到了getZoomState()
(会返回ZoomState
实例)中。(Ib19fe) - 从
CameraXConfig
中移除了 API 字段OPTION_TARGET_CLASS
和OPTION_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
参数的使用。 - 补充了
setZoomRatio
和setLinearZoom
的参考文档的内容。
bug 修复
- 修复了关闭再打开相机会导致“前提条件”检查失败的问题。
- 修复了在使用手电筒和缩放 API 时可能会发生的
ConcurrentModificationException
。 - 修复了相关问题,现在当 mod16 尺寸可用时,可以选择与请求的分辨率更接近的分辨率。
- 现在,
startFocusMetering
和cancelFocusMetering
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 中包含这些提交内容。
已知问题
- 使用
PreviewView
或CameraView
的应用的预览宽高比可能有误。在某些 FULL 设备(例如 Pixel2)上暂停或恢复操作后,会发生这种情况。
bug 修复
- 更新了
FocusMeteringAction
和CameraControl
的文档。 - 为
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-alpha07
。camera-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-alpha07
。camera-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
进行注释移除了针对
Analyzer
的UIThread
注释要求。添加了
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
字段。startFocusMetering
和cancelFocusMetering
现在会返回代表调用的异步操作的ListenableFutures
。MeteringPoints
现在充当测光操作的手柄,由工厂生成。应用应使用现有工厂而不是自定义工厂。
修复的问题
- 修复了在恢复操作后无法拍照的问题(上一次暂停时有拍照操作尚未完成)。
- 已知问题:
CameraControl.enableTorch()
可正常工作,但返回的ListenableFuture<Void>
始终是当前的complete(success)
future,即使没有闪光灯元件也是如此。未来的版本会将此问题修正为最终行为:如果没有闪光灯元件,enableTorch(true)
会立即失败(不会向CaptureSession
发送请求),并且TorchState
将保持关闭状态。 - 已知问题:
startFocusAndMetering
和cancelFocusAndMetering
可启动和取消对焦测光,但会返回不代表文档所记述行为的当前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-alpha06
和 androidx.camera:camera-core:1.0.0-alpha06
。前者是 camera-camera2:1.0.0-alpha06
中包含的提交内容,后者是 camera-core:1.0.0-alpha06
中包含的提交内容。
新功能
宽高比设置方面的变更:
- 添加了
setTargetAspectRatioMode()
并接受枚举参数。这表示应用会使用RATIO_4_3
或RATIO_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
添加了
CameraInfo
和getCameraInfo
方法,以允许应用检查是否有朝向 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-alpha05
和 androidx.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)
添加了
MeteringPointFactory
、MeteringPoint
、MeteringMode
和FocusMeteringAction
来运行“点按即可对焦”功能: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-alpha04
和 androidx.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 根据设备显示能力在内部考虑对所请求的分辨率和宽高比进行更改时,它首先会尝试保持相同的宽高比(由任意
setTargetAspectRatio
或setTargetResolution
调用确定) - 分辨率的“最近的 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-alpha03
和 androidx.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-alpha02
和 androidx.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-alpha01
和 androidx.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-Core 1.0.0-beta10
Camera-Lifecycle 版本 1.0.0-beta09
2020 年 9 月 16 日
发布了 androidx.camera:camera-lifecycle:1.0.0-beta09
。版本 1.0.0-beta09 中包含这些提交内容。
Camera-Lifecycle 版本 1.0.0-beta08
2020 年 8 月 19 日
发布了 androidx.camera:camera-lifecycle:1.0.0-beta08
。版本 1.0.0-beta08 中包含这些提交内容。
bug 修复
- 当使用不从
Context.getApplicationContext()
返回 Application 对象的 Context 时,初始化应该不会再崩溃。(I3d3c9、b/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
,而不是使应用崩溃。(I9909a、b/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-beta02
和camera-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-alpha01
。camera-lifecycle 的版本 1.0.0-alpha01 中包含这些提交内容
API 说明
- 添加了 camera-lifecycle 工件,提供了
LifeCycleCameraProvider
接口以及一个名为ProcessCameraProvider
的实现,该实现可提供先前核心中的 CameraX 类的许多功能,并可通过getInstance()
方法获取。 - 应用应包含 camera-lifecycle 库来使用 CameraX。
- 如需了解如何使用
ProcessCameraProvider
初始化 CameraX,请参阅 camera-core 部分中的说明。
Camera-Extensions 和 Camera-View 版本 1.0.0
版本 1.0.0-alpha32
2021 年 12 月 15 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha32
和 androidx.camera:camera-view:1.0.0-alpha32
。版本 1.0.0-alpha32 中包含这些提交内容。
API 变更
- 从内部类/接口中移除了不必要的
@RequiresApi(21)
注解。(I8e286、b/204917951) - 更新了 camera-extensions 工件的 API 文件。(If683a、b/161377155)
bug 修复
- 绑定
VideoCapture
后,禁止应用启用扩展模式。CameraX 扩展程序仅支持ImageCapture
和Preview
,尚不支持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-alpha31
和 androidx.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-alpha30
和 androidx.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 或更高版本的应用均无需针对此项变更执行任何操作。(Ie7f2e、b/200599470)
bug 修复
- 修复了启用 ProGuard 时出现的 AbstractMethodError 问题。(Iae468、b/201177844)
版本 1.0.0-alpha29
2021 年 9 月 29 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha29
和 androidx.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,以准确反映扩展模式的用途。(I61f54、b/198515274)
- 修复了在一个 activity 中使用多个 CameraController 和 PreviewView 时相机意外关闭的问题。(Ibfd18、b/197539358)
版本 1.0.0-alpha28
2021 年 8 月 18 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha28
和 androidx.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-alpha27
和 androidx.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 界面一起使用时出现拉伸的问题。(Ie1137、b/183864890)
版本 1.0.0-alpha26
2021 年 6 月 30 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha26
和 androidx.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-alpha25
和 androidx.camera:camera-view:1.0.0-alpha25
。版本 1.0.0-alpha25 中包含这些提交内容。
API 变更
- ExperimentalCameraFilter API 现已完成了实验阶段,成为了正式 API。使用此 API 时无需带注解的 OptIn。(I4bc94)
- 添加了一个可在用例之间转换坐标的实用程序。用法示例:转换在 ImageAnalysis 用例中检测到的坐标,并在预览中突出显示检测到的对象。(I63ab1、b/137515129)
- 移除了
CameraView
。CameraView
已替换为CameraController
。请参阅迁移指南,了解如何迁移。(Id5005)
bug 修复
- 已将
ExperimentalUseCaseGroupLifecycle
替换为ExperimentalUseCaseGroup
。(I3b2ef、b/159033688)
版本 1.0.0-alpha24
2021 年 4 月 21 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha24
和 androidx.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-alpha23
和 androidx.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 仍然兼容这些工件。(Ic8fa1、b/181599852)
- 修复了 Samsung A3 在 PreviewView 中的预览发生拉伸变形的问题。(Iacb30、b/180121821)
- 修复了在初始化相机之前,无法设置相机选择器的问题。(Ic8bd0)
Camera Extensions 和 Camera View 版本 1.0.0-alpha22
2021 年 2 月 24 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha22
和 androidx.camera:camera-view:1.0.0-alpha22
。版本 1.0.0-alpha22 中包含这些提交内容。
API 变更
- 为 CameraController 添加了 CameraInfo getter。(Ib8138、b/178251727)
bug 修复
- 修复了 ExtensionsErrorListener,以便仅在绑定 Preview 或 ImageCapture 时报告错误。(I5ae39)
Camera Extensions 和 Camera View 版本 1.0.0-alpha21
2021 年 1 月 27 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha21
和 androidx.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-alpha20
和 androidx.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-alpha19
和 androidx.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-Core 1.0.0-beta10
Camera-View 版本 1.0.0-alpha17
2020 年 9 月 23 日
发布了 androidx.camera:camera-view:1.0.0-alpha17
。版本 1.0.0-alpha17 中包含这些提交内容。
bug 修复
- 发布了此版本,现可支持 Camera-Core 1.0.0-beta10
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 时,初始化应该不会再崩溃。(I3d3c9、b/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)- 移除了
TextureViewMeteringPointFactory
。PreviewView
提供公共 API (createMeteringPointFactory()
),用于创建测光点工厂,而无论使用的是TextureView
还是SurfaceView
。(Ide693) - PreviewView 的
SURFACE_VIEW
/TEXTURE_VIEW
实现模式已重命名为PERFORMANCE
/COMPATIBLE
。PERFORMANCE
是旧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
,而不是使应用崩溃。(I9909a、b/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 上显示的内容的位图表示法。(I9b500、b/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 上显示的内容的位图表示法。(I9b500、b/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 状态还保证预览图像可见。(Ic0906、b/154652477) - 新增了
PreviewView#setDeviceRotationForRemoteDisplayMode()
API,以便在应用以远程显示模式运行时为转换计算提供设备旋转。(I59b95、b/153514525)
bug 修复
- 修复了搭载 Android 7.0 及更低版本的
FULL/LIMITED/LEVEL_3
相机出现的预览失真问题。对于 Android 版本 7.0 或更低版本,强制使用ImplementationMode#TEXTURE_VIEW
模式。(I83e30、b/155085307) - 从
PreviewView#createSurfaceProvider()
中移除了CameraInfo
参数,PreviewView
现在会在内部从SurfaceRequest
中检索该参数。(If18f0、b/154652477) - 修复了 VideoCapture 在 CameraView 中的默认宽高比为 16:9 的问题。(Ie6a7b、b/153237864)
- 修复了当滑出
Preview
fragment 然后在 ViewPager2 中往回滑动时出现的PreviewView
黑屏问题。此外,还修复了removeView(previewview)
和addView(previewView)
时出现的问题。(Iab555、b/149877652、b/147354615) - 更新了
CameraView#takePicture()
API 以允许将图片保存到Uri
和OutputStream
。更新了测试应用以使用Uri
作为规范化示例。(Ia2459、b/153607583) - 您可以设置
ScaleType
属性,以从 XML 布局中设置 PreviewView 的缩放类型。(I08565、b/153015659) - 移除了
CameraView.ScaleType
。改为使用PreviewView.ScaleType
设置/获取缩放类型。(Ia8974、b/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-beta02
、camera-core:1.0.0-beta02
和camera-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_VIEW
与PreviewView
一起使用,这是因为:用于预览的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_VIEW
,ImplementationMode.TEXTURE_VIEW
将在内部使用。 以下代码示例展示了以前使用的预览用例如何与 PreviewView 一起使用。
preview.setSurfaceProvider(previewView.previewSurfaceProvider) cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
目前,您可以编写以下代码:
val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview) previewView.preferredImplementationMode = ImplementationMode.TEXTURE_VIEW preview.setSurfaceProvider(previewView.createSurfaceProvider(camera.cameraInfo))
@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 修复
- 使用
Executor
和Callback
替换了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
之前,PreviewView
的TextureView
实现可将TextureView
的尺寸设置为相机传感器输出尺寸。如果您希望相机预览完整填充界面中的某个部分(例如整个屏幕),就不应将PreviewView
的尺寸设置为固定值,或让其封装自己的内容(例如使用属性“wrap_content
”),因为这可能会导致相机预览仅填充PreviewView
的一部分(如果相机传感器输出尺寸较小)。相反,您应将PreviewView
设置为与其父级一样大(例如使用属性“match_parent
”)。(1204869)
bug 修复
- 更新了
ImageCapture
,允许将图片保存到Uri
和OutputStream
。将过载takePicture
方法合并成了单个方法。更新了测试应用,以将Uri
用作规范示例。(Ia3bec) Preview.PreviewSurfaceProvider
已重命名为Preview.SurfaceProvider
。开发者使用SurfaceProvider
时无需再创建自己的ListenableFuture
;现在可通过新的SurfaceRequest
对象提供Surface
。移除了Preview.getPreviewSurfaceProvider()
方法,因为在Preview
与PreviewView
等其他类结合使用时,此方法可能会被滥用。(I20105)- 之前在
ImageCapture.OnImageSavedCallback.onError()
和ImageCapture.OnImageCapturedCallback.onError()
中传递的参数现已替换为单个参数ImageCaptureException
,该参数仍然包含之前传递的所有信息。 - 之前在
ImageCapture.OnImageSavedCallback.onImageSaved()
中传递的文件参数已移除。(I750d2) - 更新了 API,
CameraInfo
的getZoomRatio()
、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-alpha04
。camera-extensions 的版本 1.0.0-alpha04 中包含这些提交内容
API 变更
现在,检查扩展的可用性以及启用扩展需要采用
CameraSelector
作为输入参数。这必须与用于绑定用例的CameraSelector
相同。val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA val builder = ImageCapture.Builder() val bokehImageCaptureExtender = BokehImageCaptureExtender.create(builder) if (bokehImageCaptureExtender.isExtensionAvailable(cameraSelector)) { bokehImageCaptureExtender.enableExtension(cameraSelector) } val imageCapture = builder.build() mCameraProvider?.bindToLifecycle(this, cameraSelector, imageCapture)
您必须先初始化扩展,然后才能使用扩展库。
val availability = ExtensionsManager.init() Futures.addCallback<ExtensionsManager.ExtensionsAvailability>( availability, object : FutureCallback<ExtensionsManager.ExtensionsAvailability> { override fun onSuccess(availability: ExtensionsManager.ExtensionsAvailability?) { // Ready to make extensions calls } override fun onFailure(throwable: Throwable) { // Extensions could not be initialized } }, Executors.newSingleThreadExecutor() )
Camera-View 版本 1.0.0-alpha04
2019 年 12 月 4 日
发布了 androidx.camera:camera-view:1.0.0-alpha04
。camera-view 的版本 1.0.0-alpha04 中包含这些提交内容
API 变更
- 提供了一个
PreviewView
类,用于在应用中轻松显示预览用例的输出。 可以在布局中包含
PreviewView
:<androidx.camera.view.PreviewView android:id="@+id/preview_view" … />
PreviewView
提供了PreviewSurfaceProvider
以便于轻松连接预览用例preview.setPreviewSurfaceProvider(previewView.previewSurfaceProvider)
“
ZoomLevel
”现在为“ZoomRatio
”(采用 API 命名)某些方法参数已更改为可以为 null
Camera-Extensions 和 Camera-View 版本 1.0.0-alpha03
2019 年 10 月 9 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha03
和 androidx.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-alpha02
和 androidx.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-alpha01
和 androidx.camera:camera-view:1.0.0-alpha01
。前者是 camera-extensions:1.0.0-alpha01 中包含的提交内容,后者是 camera-view:1.0.0-alpha01 中包含的提交内容。
- 新增了适用于将来相机扩展的库,用于访问受支持设备上的效果。该库仍在开发中。
- 新增了 Camera View 类。该库仍在开发中。