CameraX
下表列出了 androidx.camera
组中的所有工件。
工件 | 当前稳定版 | 下一候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
camera-camera2 | - | 1.0.0-rc04 | - | 1.1.0-alpha02 |
camera-core | - | 1.0.0-rc04 | - | - |
camera-extensions | - | - | - | 1.0.0-alpha23 |
camera-lifecycle | - | 1.0.0-rc04 | - | - |
camera-view | - | - | - | 1.0.0-alpha23 |
设备测试
我们的实验室在很多设备上对 CameraX 进行了测试。如需查看实验室当前所用测试设备的列表,请参阅 CameraX 实验室测试设备。
声明依赖项
如需添加 CameraX 的依赖项,您必须将 Google Maven 代码库添加到项目中。有关详情,请阅读 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
dependencies { // CameraX core library using the camera2 implementation def camerax_version = "1.0.0-rc04" // 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 View class implementation "androidx.camera:camera-view:1.0.0-alpha23" // If you want to additionally use the CameraX Extensions library implementation "androidx.camera:camera-extensions:1.0.0-alpha23" }
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对库的改进有某些建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
Camera-Camera2、Camera-Core 和 Camera-Lifecycle 版本 1.1.0
Camera Camera2、Core 和 Lifecycle 版本 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 中包含这些提交内容。
问题修复
- 启用扩展模式后,针对
ImageCapture#OnImageCapturedCallback
输出 JPEG 格式。(I0d7b1) - 修复了 UMIDIGI BISON 设备上的初始化故障(I57d9e、b/180818665)
- 修复了 Samsung A3 在 PreviewView 中的预览发生拉伸变形的问题。(Iacb30、b/180121821)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 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)
问题修复
- 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)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 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 中包含这些提交内容。
问题修复
- 针对 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.0
Camera Camera2、Core 和 Lifecycle 版本 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 中包含这些提交内容。
问题修复
- 修复了 UMIDIGI BISON 设备上的初始化故障(I57d9e、b/180818665)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 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 中包含这些提交内容。
问题修复
- 修复了
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)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 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 中包含这些提交内容。
问题修复
- 修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的 IllegalArgumentException 问题。(b/150506192)
限制了相机尝试重新打开的次数。在尝试从打开相机时遇到的某些问题中恢复时,CameraX 不会再无限期地尝试重新打开相机,而是重试 10 秒后即停止。I435d2
修复了当所有支持预览的尺寸都小于 640x480 而屏幕尺寸大于 640x480 时发生的
IllegalArgumentException
问题。(I2a63c、b/150506192)
Camera Camera2、Camera Core 和 Camera Lifecycle 版本 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)
问题修复
- 针对 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 中包含这些提交内容。
问题修复
- 停用了 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)
问题修复
- 修复了相机 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)
问题修复
- 修复了相机 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 中包含这些提交内容。
问题修复
- 修复了验证图片拍摄文件保存目的地时出现的问题(I8c565、b/116765953)
Camera-Camera2 版本 1.0.0-beta10
2020 年 9 月 23 日
发布了 androidx.camera:camera-camera2:1.0.0-beta10
。版本 1.0.0-beta10 中包含这些提交内容。
问题修复
- 发布了此版本,现可支持 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)
问题修复
- 修复了平板电脑设备上的目标宽高比问题。当目标宽高比设为
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 的错误。开发者应该能够创建视口而不对视口进行设置。(Ie3d2e)
- 为
ExposureCompensation
添加了实验性接口 (If96c7) - 允许任意旋转目标以进行预览。系统会通过新的
TranformationInfoListener
回调计算转换信息并将其实时返回给用户。(I21470)
问题修复
- 修复了某些设备上的闪光灯无法关闭的问题。如果为了拍照将闪光灯模式设为
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 中包含这些提交内容。
问题修复
- 优化了 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)
问题修复
- 对于图片拍摄,系统会根据相机方向覆盖元数据中的水平翻转标志。(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 中包含这些提交内容。
问题修复
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)
问题修复
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)
问题修复
- 修复了 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)
问题修复
- 您现在可以在调用
ProcessCameraProvider#getInstance()
之前使用ProcessCameraProvider#configureInstance()
配置 CameraX。这样便可自定义CameraXConfig
,而无需在应用的 Application 类中实现CameraXConfig.Provider
。(Ia1a8d) - 如果没有任何指定的 MeteringPoint 可以生成有效的测光矩形,
CameraControl#startFocusAndMetering
将失败。(Id53ce)
Camera-Camera2 版本 1.0.0-beta05
2020 年 6 月 10 日
发布了 androidx.camera:camera-camera2:1.0.0-beta05
。版本 1.0.0-beta05 中包含这些提交内容。
问题修复
- 修复了在手机处于“勿扰”模式下,初始化 CameraX 时应用启动崩溃的问题。
InitializationException
包含ListenableFuture
,它会将初始化结果设为CameraUnavailableException
,而不是使应用崩溃。(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)
问题修复
- 更新了
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 中包含这些提交内容。
问题修复
- 允许应用通过
Camera2Interop
设置任何 camera2 拍摄请求参数,而不会导致崩溃。请注意是否由于替换参数而出现问题。使用 Camera2Interop 替换参数时,无法保证稳定性和行为。(Ibe5a1、b/149103700) - 修复了在使用伪语言区域的设备上使用应用时出现的自动初始化问题。(I3bef3、b/154767663)
- 已将与独立用例相关的错误日志转换为 Camera2CameraImpl 上的调试日志。(I1a565、b/154422490)
- 修复了即使在使用闪光灯的情况下拍摄的图片有时仍然过暗的问题。(I5d9fa、b/149729613)
- 修复了
ImageProxy
中源于ImageCapture
的缓冲区未倒回的错误(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)
问题修复
- 修复了在
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
的缓冲区未倒回的错误(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 中包含这些提交内容。
问题修复
- 修复了
camera-core
的版本支持问题
Camera-Core 版本 1.0.0-beta03
2020 年 4 月 15 日
发布了 androidx.camera:camera-core:1.0.0-beta03
。版本 1.0.0-beta03 中包含这些提交内容。
问题修复
- 修复了 beta03 中的回归问题:即不使用
UseCase
调用bindToLifecycle()
时可能导致抛出异常。这样一来,如果不绑定UseCase
,就会阻止检索Camera
。
Camera-Camera2 版本 1.0.0-beta02
2020 年 4 月 1 日
发布了 androidx.camera:camera-camera2:1.0.0-beta02
。版本 1.0.0-beta02 中包含这些提交内容。
问题修复
- 修复了
ImageProxy
中由ImageCapture
生成的ImageInfo.getRotationDegrees()
,以便匹配 EXIF 方向旋转值。(Id4281、b/150802561) - 使用 CameraX/Camera2 默认实现时,不需要再对
build.gradle
内的 CameraX 依赖项进行显式排序。对于需要声明严格的依赖项的情况,现在所有 CameraX 依赖项都可以包含在构建文件中。(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 中包含这些提交内容。
问题修复
- 修复了
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 中包含这些提交内容。
问题修复
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)
问题修复
- 修复了使用
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 中包含这些提交内容。
问题修复
- 确保仅在 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
的参考文档的内容。
问题修复
- 修复了关闭再打开相机会导致“前提条件”检查失败的问题。
- 修复了在使用手电筒和缩放 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
问题修复
- 修复了旋转或切换 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)上暂停或恢复操作后,会发生这种情况。
问题修复
- 更新了
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 返回后相机显示黑屏(无法启动相机)的问题。
- 修复了反复启动或停止应用时抛出以下错误的问题;
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 设置的模拟器上进行测试时出现的问题。
修复了分析图像时旋转出现的崩溃错误。
修复了在旋转或在前后相机之间切换后,预览在开始时显示为黑色(无相机数据)的错误。
移除了针对多个并发图像分析用例进行的测试。为确保兼容性,应用应仅附加一个图像分析用例。
在相机测试套件 (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 用例会发生阻塞。
- 内部设置的默认执行器会表现为非阻塞执行器。
问题修复
- 修复了在没有自动聚焦、自动曝光和自动白平衡的设备上捕获图像时等待 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 中包含这些提交内容。
问题修复
- 修复了使用模拟器时被零除的问题
- 修复了在快速拍照的同时快速解除绑定并重新绑定用例时在某些设备上发生的 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 中包含这些提交内容。
问题修复
- 如果在附加到 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 中包含这些提交内容。
问题修复
- 发布了此版本,现可支持 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 中包含这些提交内容。
问题修复
- 当使用不从
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 中包含这些提交内容。
问题修复
- 修复了在手机处于“勿扰”模式下,初始化 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 中包含这些提交内容。
问题修复
- 修复了 beta03 中的回归问题:即不使用
UseCase
调用bindToLifecycle()
时可能导致抛出异常。这样一来,如果不绑定UseCase
,就会阻止检索Camera
。 - 修复了
camera-core
的版本支持问题
Camera-Lifecycle 版本 1.0.0-beta01
2020 年 2 月 26 日
发布了 androidx.camera:camera-lifecycle:1.0.0-beta01
。版本 1.0.0-beta01 中包含这些提交内容。
问题修复
- 修改了文档并指出以下注意事项:在初始化期间获取
ProcessCameraProvider
时,会使用默认配置且可以选择扩展Application
。(I5e395)
Camera-Lifecycle 版本 1.0.0-beta02
2020 年 4 月 1 日
发布了 androidx.camera:camera-lifecycle:1.0.0-beta02
。版本 1.0.0-beta02 中包含这些提交内容。
问题修复
- 已更新,可支持
camera-camera2:1.0.0-beta02
和camera-core:1.0.0-beta02
工件中的问题修复。
Camera-Lifecycle 版本 1.0.0-alpha10
2020 年 2 月 10 日
发布了 androidx.camera:camera-lifecycle:1.0.0-alpha10
。版本 1.0.0-alpha10 中包含这些提交内容。
API 变更
- 为 BindToLifecycle、unbind 和 unbindAll 方法添加了
@MainThread
注解。(I990d2)
Camera-Lifecycle 版本 1.0.0-alpha03
2020 年 1 月 22 日
发布了 androidx.camera:camera-lifecycle:1.0.0-alpha03
。版本 1.0.0-alpha03 中包含这些提交内容。
更新
- 包含多种修复和更新,以支持 Camera Core 和 Camera2 更改。
Camera-Lifecycle 版本 1.0.0-alpha02
2019 年 12 月 18 日
发布了 androidx.camera:camera-lifecycle:1.0.0-alpha02
。版本 1.0.0-alpha02 中包含这些提交内容。
依赖项变更
- 已更新为使用
androidx.camera:camera-core:1.0.0-alpha08
。
Camera-Lifecycle 版本 1.0.0-alpha01
2019 年 12 月 4 日
发布了 androidx.camera:camera-lifecycle:1.0.0-alpha01
。camera-lifecycle 的版本 1.0.0-alpha01 中包含这些提交内容
API 说明
- 添加了 camera-lifecycle 工件,提供了
LifeCycleCameraProvider
接口以及一个名为ProcessCameraProvider
的实现,该实现可提供先前核心中的 CameraX 类的许多功能,并可通过getInstance()
方法获取。 - 应用应包含 camera-lifecycle 库来使用 CameraX。
- 如需了解如何使用
ProcessCameraProvider
初始化 CameraX,请参阅 camera-core 部分中的说明。
Camera-Extensions 和 Camera-View 版本 1.0.0
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)
问题修复
- 固定了 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)
问题修复
- 修复了 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 中包含这些提交内容。
问题修复
- 在 camera-view 中引入了
@ExperimentalVideo
注解。此注解标记了提供实验性视频功能的 API,实验性视频功能可能会随着功能的全面开发而发生变化。使用这些 API 的任何方法都应使用@UseExperimental
注解,并以ExperimentalVideo
作为markerClass
。(I6d729)
Camera-Extensions 版本 1.0.0-alpha18
2020 年 10 月 14 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha18
。版本 1.0.0-alpha18 中包含这些提交内容。
问题修复
- 缩短了 CameraX 初始化和 bindToLifecycle 的延迟时间 (I61dc5)
- 如果在附加到 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 中包含这些提交内容。
问题修复
- 发布了此版本,现可支持 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 中包含这些提交内容。
问题修复
- 发布了此版本,现可支持 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 中包含这些提交内容。
问题修复
- 在
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)
问题修复
- 如果启用了扩展效果且供应商库实现需要在输出 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 中包含这些提交内容。
问题修复
- 现在
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 中包含这些提交内容。
问题修复
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 中包含这些提交内容。
问题修复
- 添加了用于按相机 ID 和 CameraCharacteristics 过滤相机的实验性接口。(I28f61)
Camera-View 版本 1.0.0-alpha13
2020 年 6 月 24 日
发布了 androidx.camera:camera-view:1.0.0-alpha13
。版本 1.0.0-alpha13 中包含这些提交内容。
问题修复
- 当绑定到 LifecycleOwner(其 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 中包含这些提交内容。
问题修复
- 修复了在手机处于“勿扰”模式下,初始化 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 中包含这些提交内容。
问题修复
- 添加了
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 变更
问题修复
- 添加了
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)
问题修复
- 修复了搭载 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 中包含这些提交内容。
问题修复
- 修复了 Camera-Core 的版本支持问题
Camera-View 版本 1.0.0-alpha10
2020 年 4 月 15 日
发布了 androidx.camera:camera-view:1.0.0-alpha010
。版本 1.0.0-alpha010 中包含这些提交内容。
问题修复
- 修复了之前已知的如下问题:
PreviewView
的 surfaceView 实现在某些设备上无法正常运行,并且会导致应用在恢复预览后崩溃。(I5ed6b)
Camera-Extensions 版本 1.0.0-alpha09
2020 年 4 月 1 日
发布了 androidx.camera:camera-extensions:1.0.0-alpha09
。版本 1.0.0-alpha09 中包含这些提交内容。
问题修复
- 已更新,可支持
camera-camera2:1.0.0-beta02
、camera-core:1.0.0-beta02
和camera-lifecycle:1.0.0-beta02
工件中的问题修复
Camera-View 版本 1.0.0-alpha09
2020 年 4 月 1 日发布了 androidx.camera:camera-view:1.0.0-alpha09
。版本 1.0.0-alpha09 中包含这些提交内容。
已知问题
- 在某些设备上,可能无法将
ImplementationMode.SURFACE_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)
问题修复
- 修复了
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 中包含这些提交内容。
问题修复
- 使用
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 中包含这些提交内容。
问题修复
- 之前在
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)
问题修复
- 更新了
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 中包含这些提交内容。
问题修复
- 已更新为与内部 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-alpha01 中包含的提交内容。
- 添加了用于验证
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 类。该库仍在开发中。