Reputation: 156
With the official CameraX example on fourth step - Implement Preview use case:
// Used to bind the lifecycle of cameras to the lifecycle owner
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
I've got a crash:
2020-07-01 12:37:41.054 1767-1803/com.example.camera2 W/CameraX: CameraX initialize() failed
androidx.camera.core.InitializationException: java.lang.NumberFormatException: For input string: "/dev/video0"
at androidx.camera.core.CameraX.lambda$initInternal$7$CameraX(CameraX.java:1056)
at androidx.camera.core.-$$Lambda$CameraX$PC4SOFGjuqUVT4bexY644vLmWFE.run(Unknown Source:8)
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:764)
Caused by: java.lang.NumberFormatException: For input string: "/dev/video0"
at java.lang.Integer.parseInt(Integer.java:604)
at java.lang.Integer.parseInt(Integer.java:650)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.getRecordSize(SupportedSurfaceCombination.java:1127)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.generateSurfaceSizeDefinition(SupportedSurfaceCombination.java:1086)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.<init>(SupportedSurfaceCombination.java:109)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.init(Camera2DeviceSurfaceManager.java:87)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.<init>(Camera2DeviceSurfaceManager.java:75)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.<init>(Camera2DeviceSurfaceManager.java:67)
at androidx.camera.camera2.Camera2Config.lambda$defaultConfig$0(Camera2Config.java:59)
at androidx.camera.camera2.-$$Lambda$Camera2Config$mYXXnxW6sa_oF7xhp51ozRSO_ck.newInstance(Unknown Source:0)
at androidx.camera.core.CameraX.lambda$initInternal$7$CameraX(CameraX.java:1034)
at androidx.camera.core.-$$Lambda$CameraX$PC4SOFGjuqUVT4bexY644vLmWFE.run(Unknown Source:8)
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:764)
2020-07-01 12:38:11.142 1767-1767/com.example.camera2 D/AndroidRuntime: Shutting down VM
2020-07-01 12:38:11.346 1767-1767/com.example.camera2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.camera2, PID: 1767
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:503)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.util.concurrent.ExecutionException: androidx.camera.core.InitializationException: java.lang.NumberFormatException: For input string: "/dev/video0"
at androidx.concurrent.futures.AbstractResolvableFuture.getDoneValue(AbstractResolvableFuture.java:518)
at androidx.concurrent.futures.AbstractResolvableFuture.get(AbstractResolvableFuture.java:475)
at androidx.concurrent.futures.CallbackToFutureAdapter$SafeFuture.get(CallbackToFutureAdapter.java:199)
at androidx.camera.core.impl.utils.futures.FutureChain.get(FutureChain.java:155)
at androidx.camera.core.impl.utils.futures.ChainingListenableFuture.get(ChainingListenableFuture.java:105)
at com.example.camera2.MainActivity$startCamera$1.run(MainActivity.kt:75)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: androidx.camera.core.InitializationException: java.lang.NumberFormatException: For input string: "/dev/video0"
at androidx.camera.core.CameraX.lambda$initInternal$7$CameraX(CameraX.java:1056)
at androidx.camera.core.-$$Lambda$CameraX$PC4SOFGjuqUVT4bexY644vLmWFE.run(Unknown Source:8)
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:764)
Caused by: java.lang.NumberFormatException: For input string: "/dev/video0"
at java.lang.Integer.parseInt(Integer.java:604)
at java.lang.Integer.parseInt(Integer.java:650)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.getRecordSize(SupportedSurfaceCombination.java:1127)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.generateSurfaceSizeDefinition(SupportedSurfaceCombination.java:1086)
at androidx.camera.camera2.internal.SupportedSurfaceCombination.<init>(SupportedSurfaceCombination.java:109)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.init(Camera2DeviceSurfaceManager.java:87)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.<init>(Camera2DeviceSurfaceManager.java:75)
at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.<init>(Camera2DeviceSurfaceManager.java:67)
at androidx.camera.camera2.Camera2Config.lambda$defaultConfig$0(Camera2Config.java:59)
at androidx.camera.camera2.-$$Lambda$Camera2Config$mYXXnxW6sa_oF7xhp51ozRSO_ck.newInstance(Unknown Source:0)
at androidx.camera.core.CameraX.lambda$initInternal$7$CameraX(CameraX.java:1034)
at androidx.camera.core.-$$Lambda$CameraX$PC4SOFGjuqUVT4bexY644vLmWFE.run(Unknown Source:8)
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:764)
2020-07-01 12:38:11.481 1767-1767/com.example.camera2 I/Process: Sending signal. PID: 1767 SIG: 9
I'm using non stock device with two cameras that works fine with Camera2Basic example. In the project sets the latest camerax libs.:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
def camerax_version = '1.0.0-beta06'
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:$camerax_version"
implementation "androidx.camera:camera-lifecycle:$camerax_version"
implementation 'androidx.camera:camera-view:1.0.0-alpha13'
implementation 'androidx.camera:camera-extensions:1.0.0-alpha13'
I've tried setup manually CameraXConfig.Provider, but with the same issue on get cameraProviderFuture.
Anybody have an example of manually configuration ProcessCameraProvider with binding to specific camera device? Maybe any ideas how to setup preview with specific camera?
Upvotes: 2
Views: 1536
Reputation: 144
You have to use the exact version of their camerax otherwise it might not work.
def camerax_version = "1.0.0-beta03"
// CameraX core library using camera2 implementation
implementation "androidx.camera:camera-camera2:$camerax_version"
// CameraX Lifecycle Library
implementation "androidx.camera:camera-lifecycle:$camerax_version"
// CameraX View class
implementation "androidx.camera:camera-view:1.0.0-alpha10"
Upvotes: 1
Reputation: 156
In my case the problem is that camera has EXTERNAL HAL. According to official CameraX team answer its not yet supported for now. To check camera HAL:
adb shell dumpsys media.camera
and check for android.info.supportedHardwareLevel in the output, it could be something like:
...
== Camera HAL device [email protected]/external//dev/video0 (v3.4) static information: ==
Resource cost: 100
Conflicting devices: None
API1 info:
Has a flash unit: false
Facing: Front
Orientation: 0
API2 camera characteristics:
Dumping camera metadata array: 52 / 52 entries, 2224 / 2224 bytes of extra data.
Version: 1, Flags: 00000000
android.info.supportedHardwareLevel (150000): byte[1]
[EXTERNAL ]
...
To avoid such limitation I injected custom CameraDeviceSurfaceManager with the required camera resolution and sizes for my case . The solution is here.
Upvotes: 1