Status Update
Comments
wu...@google.com <wu...@google.com> #2
This is a particularly hard device to come by - do you happen to have access to the device? If so could you provide us with the output of: adb shell dumpsys media.camera > info.txt
Thanks!
ab...@gmail.com <ab...@gmail.com> #3
Stacktrace:
Caused by: java.lang.IllegalArgumentException: Can not get supported output size under supported maximum for the format: 34
at androidx.camera.camera2.internal.SupportedSurfaceCombination.getSupportedOutputSizes(SupportedSurfaceCombination.java:355)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.getSuggestedResolutions(SupportedSurfaceCombination.java:197)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:198)
at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:943)
at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:293)
at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:227)
Below are some findings based on our debugging
When Dex is connected
previewConfig.getMaxResolution() is returning "731x411" as maxSize.
Inside Preview.Builder.build() -> Default_MAX_resolution is set to "CameraX.getSurfaceManager().getPreviewSize()" which is 731x411
this is being picked as maxSize.
While rendering maxSize is 731x411 and minSize is 640x480 and below are available outputSizes
0 = {Size@11860} "4032x3024"
1 = {Size@11861} "3984x2988"
2 = {Size@11862} "4032x2268"
3 = {Size@11863} "3024x3024"
4 = {Size@11864} "2976x2976"
5 = {Size@11865} "3840x2160"
6 = {Size@11866} "3264x2448"
7 = {Size@11867} "4032x1960"
8 = {Size@11868} "2880x2160"
9 = {Size@11869} "3264x1836"
10 = {Size@11870} "2160x2160"
11 = {Size@11871} "2560x1440"
12 = {Size@11872} "2224x1080"
13 = {Size@11873} "2048x1152"
14 = {Size@11874} "1920x1080"
15 = {Size@11875} "1440x1080"
16 = {Size@11876} "1088x1088"
17 = {Size@11877} "1280x720"
18 = {Size@11878} "1024x768"
19 = {Size@11879} "1056x704"
20 = {Size@11880} "960x720"
21 = {Size@11881} "960x540"
22 = {Size@11882} "720x720"
23 = {Size@11883} "800x450"
24 = {Size@11884} "720x480"
25 = {Size@11885} "640x480"
26 = {Size@11886} "352x288"
27 = {Size@11887} "320x240"
28 = {Size@11888} "256x144"
29 = {Size@11889} "176x144"
and couldn't find any size in this range.
When Dex not connected
minsize = 640x480
maxsize = 1920x1080
0 = {Size@11836} "4032x3024"
1 = {Size@11837} "3984x2988"
2 = {Size@11838} "4032x2268"
3 = {Size@11839} "3024x3024"
4 = {Size@11840} "2976x2976"
5 = {Size@11841} "3840x2160"
6 = {Size@11842} "3264x2448"
7 = {Size@11843} "4032x1960"
8 = {Size@11844} "2880x2160"
9 = {Size@11845} "3264x1836"
10 = {Size@11846} "2160x2160"
11 = {Size@11847} "2560x1440"
12 = {Size@11848} "2224x1080"
13 = {Size@11849} "2048x1152"
14 = {Size@11850} "1920x1080"
15 = {Size@11851} "1440x1080"
16 = {Size@11852} "1088x1088"
17 = {Size@11853} "1280x720"
18 = {Size@11854} "1024x768"
19 = {Size@11855} "1056x704"
20 = {Size@11856} "960x720"
21 = {Size@11857} "960x540"
22 = {Size@11858} "720x720"
23 = {Size@11859} "800x450"
24 = {Size@11860} "720x480"
25 = {Size@11861} "640x480"
26 = {Size@11862} "352x288"
27 = {Size@11863} "320x240"
28 = {Size@11864} "256x144"
29 = {Size@11865} "176x144"
and we have 12 available sizes in this range
Camera2DeviceSurfaceManager.java:: getPreviewSize()
mCameraSupportedSurfaceCombinationMap.get(cameraId).getSurfaceDefinition().getPreviewSize() = "1920x1080"
cameraId=0
er...@google.com <er...@google.com>
tr...@google.com <tr...@google.com> #4
The issue root cause is that CameraX will default filter out sizes smaller than 640x480. For Preview, the max size will be limited to under display size. I checked the HW spec info for the issue related devices. Display size of FUJITSU F-04J/F-05J is 360x640. That will result int that no size exists in the conditions that is larger or equal to 640x480 and smaller or equal to 360x640.
A temporary workaround for this situation is to use Preview.Builder#setTargetResolution() to set a size smaller than 640x480 to bypass the problem.
For device FUJITSU arrowsM04, I checked its HW spec info and its display size I found is 1280x720. It seems that the problem should not exist in the device.
Could you confirm that the problem exist on arrowsM04 device? What will be the returned value when using Display#getRealSize to obtain the display size?
ab...@gmail.com <ab...@gmail.com> #5
> A temporary workaround for this situation is to use Preview.Builder#setTargetResolution() to set a size smaller than 640x480 to bypass the problem.
OK. I will try it.
> Could you confirm that the problem exist on arrowsM04 device?
We receive the crash report (Crashlytics) that this crash has occurred on arrowsM04.
We don't have this device so we can't confirm that the problem really exist on arrowsM04.
> What will be the returned value when using Display#getRealSize to obtain the display size?
We can't investigate it for the same reason.
Thank you.
tr...@google.com <tr...@google.com> #6
This issue happened on devices that the display size is smaller than 640x480. In original auto-resolution mechanism, supported sizes smaller than 640x480 will be default filter out.
The auto-resolution mechanism encodes the guaranteed configurations tables in CameraDevice#createCaptureSession(SessionConfiguration). It defines that the PREVIEW size is the small one of the device display size and 1080p. The PREVIEW size will be the maximal size limitation for Preview use case. The reason it limits the size to display size and 1080p is the stream output in display size or 1080p has been able to provide good enough preview quality. Therefore, auto-resolution mechanism will limit the selected size to be smaller than the small one of the device display size and 1080p.
With above two conditions, in this issue, all sizes smaller than 640x480 have been filter out, therefore, there is no size smaller than the display size 320x240 can be selected to use. And cause the exception.
Solution:
When the display size is smaller than 640x480, auto-resolution mechanism won't filter out those small sizes smaller than 640x480. This makes those small size be left and can be selected for the Preview use case on small display devices.
The solution has been merged and will be included in next CameraX release.
ab...@gmail.com <ab...@gmail.com> #7
Hello.
This crash still occurs.
- CAMERAX VERSION: 1.0.0-beta4
- ANDROID OS BUILD NUMBER: Android 7.1.1
- DEVICE NAME: FUJITSU F-02H
We receive following crash report from FUJITSU F-02H. So far We have received this crash report only from F-02H.
java.lang.IllegalArgumentException
Can not get supported output size under supported maximum for the format: 34
androidx.camera.camera2.internal.SupportedSurfaceCombination.getSupportedOutputSizes (SupportedSurfaceCombination.java:349)
androidx.camera.camera2.internal.SupportedSurfaceCombination.getSuggestedResolutions (SupportedSurfaceCombination.java:197)
androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions (Camera2DeviceSurfaceManager.java:198)
androidx.camera.core.CameraX.calculateSuggestedResolutions (CameraX.java:949)
androidx.camera.core.CameraX.bindToLifecycle (CameraX.java:351)
androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle (ProcessCameraProvider.java:230)
(our application's package name).CameraFragment.bindCameraUseCases (CameraFragment.java:174)
tr...@google.com <tr...@google.com> #8
Could you help to provide the following information to clarify the issue?
1. Is the full name of the device Fujitsu Arrows NX F-02H that has a 1440x2560 display?
2. Please help to provide the supported output sizes of ImageFormat.PRIVATE that is obtained by StreamConfigurationMap#getOutputSizes(int).
ab...@gmail.com <ab...@gmail.com> #9
- Is the full name of the device Fujitsu Arrows NX F-02H that has a 1440x2560 display?
Yes
- Please help to provide the supported output sizes of ImageFormat.PRIVATE that is obtained by StreamConfigurationMap#getOutputSizes(int).
Since we don't have this device, we'll try to collect this information in the next version of our app. The next version will be released later this month.
ab...@gmail.com <ab...@gmail.com> #10
Hello.
- Please help to provide the supported output sizes of ImageFormat.PRIVATE that is obtained by StreamConfigurationMap#getOutputSizes(int).
We have collected the output of the device where the crash occurs.
Device1
- Model : arrows Be F-05J
- Android Version : 7.1.1
- Supported output sizes of ImageFormat.PRIVATE
CameraId 0: 480x480
CameraId 1: 2048x1536 ,1920x1080 ,1280x720 ,960x720 ,640x480 ,320x240 ,176x144
Device2
- Model : Fujitsu arrows M04
- Android Version : 7.1.1
- Supported output sizes of ImageFormat.PRIVATE
CameraId 0: 480x480
CameraId 1: 2048x1536 ,1920x1080 ,1280x720 ,960x720 ,640x480 ,320x240 ,176x144
Additional Information
CameraX version : 1.0.0-beta04
We collect the supported output sizes by following code.
val errorString = buildString {
append("The supported output sizes of ImageFormat.PRIVATE: ")
(requireContext().getSystemService(Context.CAMERA_SERVICE) as CameraManager).apply {
cameraIdList.forEachIndexed { index, cameraId ->
val msg = if (VERSION.SDK_INT >= VERSION_CODES.M) {
val configurationMap =
getCameraCharacteristics(cameraId).get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
val sizes = configurationMap?.getOutputSizes(ImageFormat.PRIVATE)
"CameraId $index: ${sizes?.joinToString(" ,")}"
} else {
"CameraId $index: This device version is under M."
}
append(msg)
}
}
}
ab...@gmail.com <ab...@gmail.com> #12
I tried to find the device specs and both 720x1280
size display. For the camera id 0 device, it is a different case that the display size is larger than 640x480
but the device only supports a 480x480
size. The case also caused the same IllegalArgumentException and was also fixed by 1.0.0-beta04
release. Before 480x480
size would be filtered out and then caused the IllegalArgumentException. After it was merged, the 640x480
size threshold was removed and then the 480x480
size would be kept and selected to use.
It looks like 1.0.0-beta04
release had been used to collect the supported sizes information. But the issue should have been fixed by 1.0.0-beta04
release. Did you only check the device model name to collect the supported sizes information or collect the information when the IllegalArgumentException issue happens again?
CameraX's 1.0.0-beta04
version. Maybe you can also consider to upgrade to the latest 1.0.0-rc01
version for your application. Thanks.
le...@google.com <le...@google.com> #13
Did you only check the device model name to collect the supported sizes information or collect the information when the IllegalArgumentException issue happens again?
We collect informations only from the device on which IllegalArgumentException happened.
Our latest app uses CameraX version 1.0.0-beta10
and this issue still occurres.
However we don't receive crash report from Fujitsu arrows Be F-05J
or Fujitsu arrows M04
so far. (This doesn't mean this issue is fixed on these devices because our app is heavily rely on camera so these device's user wouldn't use our app anymore.)
Instead, we receive crash report from
- Model : Fujitsu F-03K
- Android Version : 7.1.2
- Supported output sizes of ImageFormat.PRIVATE
CameraId 0 : 480x480
CameraId 1 : 2048x1536 ,1920x1080 ,1280x720 ,960x720 ,640x480 ,320x240 ,176x144
wu...@google.com <wu...@google.com>
ab...@gmail.com <ab...@gmail.com> #14
I missed some settings when I simulated the issue by robolectric test so that I was not able to reproduce it. Now, I can reproduce the issue if the device only supports one 480x480 resolution. I'm working on the solution and target to make it included in next release.
ab...@gmail.com <ab...@gmail.com> #15
Branch: androidx-main
commit 69d15dff7bb857ee33a0f643ff42a0f8bc475ab2
Author: charcoalchen <charcoalchen@google.com>
Date: Fri Jan 08 18:30:03 2021
Fixed IllegalArgumentException issue happened when all preview supported sizes are smaller than 640x480 and display size is larger than 640x480.
Do not filter out sizes smaller than 640x480 when all preview supported sizes are smaller than 640x480 and display size is larger than 640x480.
Relnote:"Fixed IllegalArgumentException issue happened when all preview supported sizes are smaller than 640x480 and display size is larger than 640x480."
Bug: 150506192
Test: SupportedSurfaceCombinationTest
Change-Id: I2a63ce8e2ad42a9cc060c8635ac3603bf440b1ec
M camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SupportedSurfaceCombination.java
M camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.java
wu...@google.com <wu...@google.com>
le...@google.com <le...@google.com> #16
ab...@gmail.com <ab...@gmail.com> #17
Yes, I was surprised too that I can use all cases in the time. In my application I use only preview and video in the same time according to official documentation.
Works correct on this Samsung phone:
1. Preview + Video.
2. Preview + Capture picture + Analysis + Video.
I showed you above my code snippet responsible for video recording. Seems there is nothing what can cause that issue.
As I said I use 1.3.0-alpha02 and probably you compiled testing apps with last alpha version. Is that case?
I hope not, 1.3.0alpha4 prompts me to migrate to Kotlin. I am not ready for that yet. So probably alpha02 is the last Java CameraX version. Am I right?
You can check logs_video_starVidRec.txt file and look what happens after start video recording because seems recording is not continued correctly after start - no video events come.
Thanks guys for help.
le...@google.com <le...@google.com> #18
Binding 4 use cases is a new feature from 1.3.0-alpha04, see
As I said I use 1.3.0-alpha02 and probably you compiled testing apps with last alpha version. Is that case?
Yes, I use the latest alpha version. But there should not be significant difference between 1.3.0-alpha02 and 1.3.0-alpha04.
1.3.0alpha4 prompts me to migrate to Kotlin.
As far as I know, CameraX does not require any version to use kotlin. If yes, there should be a wanring in the release note, but I don't see that. Maybe something wrong?
le...@google.com <le...@google.com> #19
It looks like the camera service is somehow dead.
2023-03-08 14:35:53.768 30151 30228 F libc Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 30228 (binder:30151_7), pid 30151 (binder:30151_2)
2023-03-08 14:35:53.886 2292 2292 F DEBUG ***
2023-03-08 14:35:53.886 2292 2292 F DEBUG Build fingerprint: 'samsung/dm1qxeea/dm1q:13/TP1A.220624.014/S911BXXU1AWBD:user/release-keys'
2023-03-08 14:35:53.886 2292 2292 F DEBUG Revision: '8'
2023-03-08 14:35:53.886 2292 2292 F DEBUG ABI: 'arm64'
2023-03-08 14:35:53.886 2292 2292 F DEBUG Processor: '4'
2023-03-08 14:35:53.886 2292 2292 F DEBUG Timestamp: 2023-03-08 14:35:53.823436920+0100
2023-03-08 14:35:53.886 2292 2292 F DEBUG Process uptime: 0s
2023-03-08 14:35:53.886 2292 2292 F DEBUG Cmdline: /vendor/bin/hw/vendor.samsung.hardware.camera.provider-service_64
2023-03-08 14:35:53.886 2292 2292 F DEBUG pid: 30151, tid: 30228, name: binder:30151_7 >>> /vendor/bin/hw/vendor.samsung.hardware.camera.provider-service_64 <<<
2023-03-08 14:35:53.886 2292 2292 F DEBUG uid: 1047
2023-03-08 14:35:53.886 2292 2292 F DEBUG tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
2023-03-08 14:35:53.886 2292 2292 F DEBUG pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
2023-03-08 14:35:53.886 2292 2292 F DEBUG signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
2023-03-08 14:35:53.886 2292 2292 F DEBUG Abort message: 'ubsan: sub-overflow'
2023-03-08 14:35:53.886 2292 2292 F DEBUG x0 0000000000000000 x1 0000000000007614 x2 0000000000000006 x3 0000007e8d507820
2023-03-08 14:35:53.886 2292 2292 F DEBUG x4 8000000000000000 x5 8000000000000000 x6 8000000000000000 x7 0000000000000080
2023-03-08 14:35:53.886 2292 2292 F DEBUG x8 00000000000000f0 x9 0000007f6964abf0 x10 0000000000000001 x11 0000007f696bf3ec
2023-03-08 14:35:53.886 2292 2292 F DEBUG x12 0101010101010101 x13 00000000ffffffff x14 0000007eb3f7d428 x15 0000000000000048
2023-03-08 14:35:53.886 2292 2292 F DEBUG x16 0000007f6972aa58 x17 0000007f69703120 x18 0000007e7e768000 x19 00000000000075c7
2023-03-08 14:35:53.886 2292 2292 F DEBUG x20 0000000000007614 x21 00000000ffffffff x22 b400007e7accf8c0 x23 0000007eb3f7db18
2023-03-08 14:35:53.886 2292 2292 F DEBUG x24 0000000000000001 x25 0000007edefe530c x26 0000000000000003 x27 b400007f65243bc8
2023-03-08 14:35:53.886 2292 2292 F DEBUG x28 b400007e6a021500 x29 0000007e8d5078a0
2023-03-08 14:35:53.886 2292 2292 F DEBUG lr 0000007f696b0368 sp 0000007e8d507800 pc 0000007f696b0394 pst 0000000000001000
2023-03-08 14:35:53.886 2292 2292 F DEBUG backtrace:
2023-03-08 14:35:53.886 2292 2292 F DEBUG #00 pc 000000000008d394 /apex/com.android.runtime/lib64/bionic/libc.so (abort+168) (BuildId: 1bcad8bca80d38bceb9089f70d394e33)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #01 pc 0000000000124350 /vendor/lib64/hw/com.qti.chi.override.so (__ubsan_handle_sub_overflow_minimal_abort+64) (BuildId: 15b454ec266161934078e5590d7db808)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #02 pc 0000000000466120 /vendor/lib64/hw/com.qti.chi.override.so (CHXStreamBufferManager::ThrottleCaptureRequest(camera3_capture_request*)+5088) (BuildId: 15b454ec266161934078e5590d7db808)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #03 pc 00000000003b642c /vendor/lib64/hw/com.qti.chi.override.so (ExtensionModule::OverrideProcessRequest(camera3_device const*, camera3_capture_request*, void*, int)+7628) (BuildId: 15b454ec266161934078e5590d7db808)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #04 pc 00000000007ec3b0 /vendor/lib64/hw/camera.qcom.so (CamX::HALDevice::ProcessCaptureRequest(CamX::Camera3CaptureRequest*)+1152) (BuildId: 20126e260de3a5180f8c4a02ba159e4c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #05 pc 00000000007ca16c /vendor/lib64/hw/camera.qcom.so (CamX::process_capture_request(camera3_device const*, camera3_capture_request*) (.4b8ec8c6eef7485d1c34ffa88e9930ee.cfi)+2092) (BuildId: 20126e260de3a5180f8c4a02ba159e4c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #06 pc 00000000000d81d4 /vendor/lib64/unihal_main.so (unihal::CameraDevice::ProcessCaptureRequest(unsigned int, unihal::UniCamera3CaptureRequest const&)+200) (BuildId: f6393c44d1fa1fe8f26e260756886252)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #07 pc 00000000000da9e8 /vendor/lib64/unihal_main.so (unihal::MultiCameraManager::ProcessCaptureRequest(unsigned int, unihal::UniCamera3CaptureRequest const&)+92) (BuildId: f6393c44d1fa1fe8f26e260756886252)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #08 pc 00000000000adf84 /vendor/lib64/unihal_main.so (unihal::CameraHalUnit::ProcessCaptureRequest(unihal::UniCamera3CaptureRequest const&)+136) (BuildId: f6393c44d1fa1fe8f26e260756886252)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #09 pc 00000000000aa7a8 /vendor/lib64/unihal_main.so (unihal::CameraHalManager::ProcessCaptureRequest(camera3_device const*, unihal::UniCamera3CaptureRequest const&)+308) (BuildId: f6393c44d1fa1fe8f26e260756886252)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #10 pc 00000000000a6790 /vendor/lib64/unihal_main.so (unihal::uni_process_capture_request(camera3_device const*, camera3_capture_request*)+164) (BuildId: f6393c44d1fa1fe8f26e260756886252)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #11 pc 000000000002d590 /vendor/lib64/libsamsungcamerahwl_impl.so (android::samsung_camera_hal::SamsungCameraDeviceSessionImpl::processOneCaptureRequest(android::samsung_camera_hal::CaptureRequest const&)+2668) (BuildId: 38e091e28227ea6f3f3e2c1f1909f6a0)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #12 pc 000000000002c9fc /vendor/lib64/libsamsungcamerahwl_impl.so (android::samsung_camera_hal::SamsungCameraDeviceSessionImpl::ProcessCaptureRequest(std::__1::vector<android::samsung_camera_hal::CaptureRequest, std::__1::allocator<android::samsung_camera_hal::CaptureRequest> > const&, std::__1::vector<android::samsung_camera_hal::BufferCache, std::__1::allocator<android::samsung_camera_hal::BufferCache> > const&, unsigned int*)+980) (BuildId: 38e091e28227ea6f3f3e2c1f1909f6a0)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #13 pc 0000000000007924 /vendor/lib64/libsamsungcamerahal.so (android::samsung_camera_hal::CameraDeviceSession::ProcessCaptureRequest(std::__1::vector<android::samsung_camera_hal::CaptureRequest, std::__1::allocator<android::samsung_camera_hal::CaptureRequest> > const&, std::__1::vector<android::samsung_camera_hal::BufferCache, std::__1::allocator<android::samsung_camera_hal::BufferCache> > const&, unsigned int*)+100) (BuildId: d4ddd43f4d1af6e7b48ddc46e54ec398)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #14 pc 0000000000014d64 /vendor/bin/hw/vendor.samsung.hardware.camera.provider-service_64 (android::hardware::camera::device::implementation::AidlCameraDeviceSession::processCaptureRequest(std::__1::vector<aidl::android::hardware::camera::device::CaptureRequest, std::__1::allocator<aidl::android::hardware::camera::device::CaptureRequest> > const&, std::__1::vector<aidl::android::hardware::camera::device::BufferCache, std::__1::allocator<aidl::android::hardware::camera::device::BufferCache> > const&, int*)+1152) (BuildId: 9135789eb7a024f432a58bea471b7974)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #15 pc 000000000001ebb0 /apex/com.android.vndk.v33/lib64/android.hardware.camera.device-V1-ndk.so (aidl::android::hardware::camera::device::_aidl_android_hardware_camera_device_ICameraDeviceSession_onTransact(AIBinder*, unsigned int, AParcel const*, AParcel*)+1000) (BuildId: ff50a8bae3fd46b73aa0c0f9d3f80854)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #16 pc 000000000000b1fc /system/lib64/libbinder_ndk.so (ABBinder::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+144) (BuildId: 6bcbd35d2f897158dbbbfc9600382c86)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #17 pc 0000000000051a1c /system/lib64/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+240) (BuildId: 8ad70f5361899d296dfa174faf8ffd1c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #18 pc 000000000005caf4 /system/lib64/libbinder.so (android::IPCThreadState::executeCommand(int)+1036) (BuildId: 8ad70f5361899d296dfa174faf8ffd1c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #19 pc 000000000005c61c /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+164) (BuildId: 8ad70f5361899d296dfa174faf8ffd1c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #20 pc 000000000005cee0 /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+72) (BuildId: 8ad70f5361899d296dfa174faf8ffd1c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #21 pc 000000000008d128 /system/lib64/libbinder.so (android::PoolThread::threadLoop()+448) (BuildId: 8ad70f5361899d296dfa174faf8ffd1c)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #22 pc 0000000000013418 /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+424) (BuildId: 97f353c1a350efeb766e1e852854da85)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #23 pc 00000000000f5298 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 1bcad8bca80d38bceb9089f70d394e33)
2023-03-08 14:35:53.886 2292 2292 F DEBUG #24 pc 000000000008ebdc /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 1bcad8bca80d38bceb9089f70d394e33)
So there is no camera frame send to VideoCapture. It is probably a bug in the camera HAL and your implementation flow unfortunately hit it.
Some thoughts
-
Since
no_effect.apk
doesn't encounter this error, you should have a chance to try tweaking your implementation slightly to avoid this issue. Maybe take as a reference. (you can first check if CameraXBasic have the same issue.)CameraXBasic -
From the log, I am wondering when do you call
Preview.setSurfaceProvider()
? and how do you switch camera? (code snippet is appreciated)
Would you mind to try callingPreview.setSurfaceProvider()
earlier? such as before callingcameraProvider.bindToLifecycle()
.
ab...@gmail.com <ab...@gmail.com> #20
I am sure I put setSurfaceProvider after bindToLifecycle() according to guide for CameraX on Android developer page. It was Sep 2022. Now I checked it again and there are new examples with setSurfaceProvider after. Wrong solution is used on CameraXBasic you linked me. It should be fixed and workable version committed to avoid the issue like that.
Please don't close the ticket yet. Tomorrow I am going do a few hours tests in the office on many phones since Android 7.1 to 13 to make sure all works correct.
Seems it was not strict a bug, only some changes in implementation in meantime.
Anyway, you do great job. CameraX package is what we, Android developers have waited for years.
le...@google.com <le...@google.com> #21
Great to hear that! thanks for trying. Now I can better speculate about the cause of the problem.
Your original code is definitely using CameraX correctly, but it will start an optimization process in CameraX, which happens to run abnormally on the devices you are using.
We will try to resolve this issue.
In the mean time you can adopt the solution you are using for now since it should still be a correct usage for CameraX.
You don't need to close this bug, we will track the fix on this bug.
Thank you for feedback to make CameraX better!
ab...@gmail.com <ab...@gmail.com> #22
I will track changes about CameraX and this post in case you want to update something in the future.
ap...@google.com <ap...@google.com> #23
Branch: androidx-main
commit 3130e614ac6950af495c45fedd44a3ee042b8d01
Author: leo huang <leohuang@google.com>
Date: Mon Mar 20 13:42:50 2023
Fix MeterRepeatingSession not being removed when setting SurfaceProvider after Preview is bound.
Root cause:
The MeterRepeatingSession is not removed when Preview surface is provided. It results in a redundant camera stream to create camera capture session. The issue devices can't work normally when there are three camera streams, e.g. Preview + VideoCapture + MeteringRepeatingSession.
Solution:
Trigger `addOrRemoveMeteringRepeatingUseCase()` when attached UseCase is reset.
Relnote: "Fixed an issue where VideoCapture could not work with the front camera on some devices. For example, on Samsung Galaxy S23 and Xiaomi 2107113SG."
Bug: 273633381
Bug: 270656244
Test: Camera2CameraImplTest
Change-Id: Ibec7ea9696314f3f7ba303a2d0053c58762f72a1
M camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
M camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraImpl.java
le...@google.com <le...@google.com> #24
The solution is merged and will be released in 1.3.0-alpha06
.
pr...@google.com <pr...@google.com> #25
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.camera:camera-camera2:1.3.0-alpha06
ab...@gmail.com <ab...@gmail.com> #26
[Deleted User] <[Deleted User]> #27
le...@google.com <le...@google.com> #28
Hi,
Thanks for reply, we will evaluate the possibilities. Wondering if a certain number of devices were affected in your case?
[Deleted User] <[Deleted User]> #29
ab...@gmail.com <ab...@gmail.com> #30
It also worked correct on Samsung 23 (Android 12/13). Do they use new Video engine and put setSurfaceProvider() before binding lifecycle as I did? It is very crucial.
le...@google.com <le...@google.com> #31
Hi, The fix will be included in CameraX 1.2.3.
ju...@google.com <ju...@google.com> #32
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.camera:camera-camera2:1.2.3
[Deleted User] <[Deleted User]> #33
We've been testing the recent changes (CameraX upgrade). It looks good on Android 13 (Google Pixel 5 and Pixel 6 phones). But when I tried it on Samsung Galaxy Note 9 (Android 10) I wasn't able to record any video - taking photos works fine.
Every time I click the 'record video' button the camera view crashes and goes back to the 'Enter a fish' screen. Sometimes Samsung OS tries to re-open the camera automatically, but then crashes again.
See the attached recording. The crash was also registered in Crashlytics, here is the stack trace:
Fatal Exception: java.lang.AssertionError: One-time media muxer creation has already occurred for recording RecordingRecord{getOutputOptions=MediaStoreOutputOptions{fileSizeLimit=0, location=null, contentResolver=android.app.ContextImpl$ApplicationContentResolver@fa70332, collectionUri=content://media/external/video/media, contentValues=_display_name=2023-07-31-15-48-47-932 mime_type=video/mp4 relative_path=Pictures/Tournament_Photos}, getCallbackExecutor=android.os.HandlerExecutor@7c1c883, getEventListener=com.xxx.android.activity.camera.CameraKitKotlinActivity$$ExternalSyntheticLambda2@ec7a00, hasAudioEnabled=true, getRecordingId=1} at androidx.camera.video.Recorder$RecordingRecord.performOneTimeMediaMuxerCreation(Recorder.java:2785) at androidx.camera.video.Recorder.setupAndStartMediaMuxer(Recorder.java:1396) at androidx.camera.video.Recorder$2.onEncodedData(Recorder.java:1570) at androidx.camera.video.internal.encoder.EncoderImpl$MediaCodecCallback.lambda$sendEncodedData$3(EncoderImpl.java:1163) at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.workOnQueue(SequentialExecutor.java:231) at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.run(SequentialExecutor.java:173) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919)
le...@google.com <le...@google.com> #34
For
Description
Stop video recording throws exception: The file has no video key frame.
CAMERAX VERSION 1.2.0
CAMERA APPLICATION NAME AND VERSION: 13.1.00.49 for Samsung SM-S911B/DS
ANDROID OS BUILD NUMBER: 13
DEVICE NAMEs:
1. Samsung SM-S911B/DS (Galaxy S23) Android 13
2. Xiaomi 2107113SG / Android 11
3. Xiaomi 2107113SG / Android 12
DESCRIPTION:
After stop recording video in throws exception in onError callback with message: The file has no video key frame.
Usually on front camera but after exception it throws on back camera too.
LIST ANY EXPERIMENTAL FEATURES: none
STEPS TO REPRODUCE:
1.videoCapture.startRecording() // starts recording ok
2.videoCapture.stopRecording() /
3. look at onError() in VideoCapture.OnVideoSavedCallback()
OBSERVED RESULTS:
Throws exception.
EXPECTED RESULTS:
Should work correct and call method onVideoSaved()
REPRODUCIBILITY: (5 of 5, 1 of 100, etc)
Always, usually on front camera.
ADDITIONAL INFORMATION:
CODE FRAGMENTS:
final String APP_MEDIA_RELATIVE_PATH = "/MyVideos";
final String MEDIA_VIDEO_PREFIX = "video_";
final String MEDIA_EXTENSION_VIDEO_MP4 = ".mp4";
final String fileName = ImageUtils.getMediaFileNameWithExtension(MEDIA_VIDEO_PREFIX, MEDIA_EXTENSION_VIDEO_MP4);
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, APP_MEDIA_RELATIVE_PATH);
contentValues.put(MediaStore.MediaColumns.ARTIST, Utils.getAppInfo_Name(context));
outputFileOptions = new VideoCapture.OutputFileOptions.Builder(
context.getContentResolver(),
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
contentValues
).build();
videoCapture.startRecording(
outputFileOptions,
getExecutor(),
new VideoCapture.OnVideoSavedCallback() {
...
}
...
videoCapture.stopRecording(); // after that throws exception in onError()
...
private Executor getExecutor() {
return ContextCompat.getMainExecutor(context);
}