Status Update
Comments
wu...@google.com <wu...@google.com>
mi...@google.com <mi...@google.com> #2
Hi,
Thank you for your feedback. We will add changes to take high resolutions into account when sharing streams. One quick question to make sure this is not due to some other issues, have you set resolution filter to only allow certain resolutions (e.g. high resolutions)? Because if there is no resolution limit, it should be able to find a resolution (although not a high resolution). Thanks.
hu...@gmail.com <hu...@gmail.com> #3
、、、
val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
cameraProvider.unbindAll()
val preview: androidx.camera.core.Preview = androidx.camera.core.Preview.Builder()
.setResolutionSelector(
ResolutionSelector.Builder()
.setAllowedResolutionMode(ResolutionSelector.PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE)
.build()
)
.build()
val resolutionSelector = ResolutionSelector.Builder()
.setAllowedResolutionMode(PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE)
.setResolutionFilter { sizes, _ ->
listOf(sizes.maxBy { maxOf(it.width, it.height) })
}.build()
val capture =
ImageCapture.Builder().setTargetRotation(android.view.Surface.ROTATION_0)
.setPostviewEnabled(true)
.setResolutionSelector(resolutionSelector)
//.setTargetResolution(android.util.Size(3000, 4000))
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY).build()
val cameraSelector: CameraSelector = CameraSelector.Builder()
.requireLensFacing(outputSetting.facing)
.build()
val glLooper = glThread.looper
val cameraEffect =
OverlayEffect(
CameraEffect.PREVIEW or CameraEffect.IMAGE_CAPTURE or CameraEffect.VIDEO_CAPTURE,
0,
Handler(glLooper)
) {
}
addDrawOperation(cameraEffect, cameraViewModel)
val useCases =
UseCaseGroup.Builder()
.addUseCase(preview)
.addUseCase(capture)
.addEffect(cameraEffect)
.build()
var camera =
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, useCases)
preview.setSurfaceProvider(p.getSurfaceProvider())
cameraViewModel.imageCapture = capture
}, ContextCompat.getMainExecutor(context))
、、、
this is my usecase ,i just want to preview and capture a watermark use the max resolution the device supported,like 4000x3000
1.if i set PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE ,two usecase and cameraeffect crash,
2.set PREFER_CAPTURE_RATE_OVER_HIGHER_RESOLUTION ,two usecase and cameraeffect work well
3.if i set PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE and not add cameraeffect,two usecase work well
mi...@google.com <mi...@google.com> #4
Thank you for sharing the information, I think the cause of the crash is what we suspected.
ap...@google.com <ap...@google.com> #5
Branch: androidx-main
commit 9ba9bef43da0b3d6b0cbf5b51d5f66f80333e49d
Author: mingdatsai <mingdatsai@google.com>
Date: Thu May 02 17:29:20 2024
Consider high resolutions in ResolutionsMerger
Relnote: "Fixed a bug where High Resolutions can not be selected when
CameraEffect is enabled on some devices. (e.g. 4000x3000 on Samsung
A32 5G)."
Bug: 337336152
Test: manual test and ResolutionsMergerTest
Change-Id: Ie3ed3a802305628e471d73b4741add0d46ac12ad
M camera/camera-core/src/main/java/androidx/camera/core/streamsharing/ResolutionsMerger.java
M camera/camera-core/src/test/java/androidx/camera/core/streamsharing/ResolutionsMergerTest.kt
mi...@google.com <mi...@google.com> #6
The fix is merged and would be released in the 1.4.0-beta02 release.
mi...@google.com <mi...@google.com> #7
I will close the bug, please feel free to reopen it if there are any issues.
pr...@google.com <pr...@google.com> #8
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.camera:camera-core:1.4.0-beta01
Description
CAMERAX VERSION (1.4.0-alpha05)
CAMERA APPLICATION NAME AND VERSION: (Settings > Apps > (app name) > version)
ANDROID OS BUILD NUMBER: (android 11)
DEVICE NAME: (Samsung A32 5G)
in camerX 1.4.0-alpha5 androidx.camera.core.streamsharing.ResolutionsMerger have a bug:
1.use two usecanse ,preview,imagecapture,and set androidx.camera.effects.OverlayEffect
2.imagecapture and preview set capturemodel to PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE to use the heightresolution
3.then crash
Caused by: androidx.camera.core.internal.CameraUseCaseAdapter$CameraException: java.lang.IllegalArgumentException: No available output size is found for androidx.camera.core.streamsharing.StreamSharingConfig@52e6012