natario1 / CameraView

📸 A well documented, high-level Android interface that makes capturing pictures and videos easy, addressing all of the common issues and needs. Real-time filters, gestures, watermarks, frame processing, RAW, output of any size.
https://natario1.github.io/CameraView
Other
4.92k stars 926 forks source link

onConfigureFailed! Session android.hardware.camera2.impl.CameraCaptureSessionImpl@3a3e30a #607

Open bayunvnt opened 4 years ago

bayunvnt commented 4 years ago

Hallo, im using this library for my college project, then I have this issue "onConfigureFailed! Session android.hardware.camera2.impl.CameraCaptureSessionImpl@3a3e30a",

this is my stacktrace : java.lang.RuntimeException · onConfigureFailed! Session android.hardware.camera2.impl.CameraCaptureSessionImpl@2d4c3c1

Camera2Engine:479com.otaliastudios.cameraview.engine.Camera2Engine$4.onConfigureFailed

CallbackProxies.java:64android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigureFailed$1

Unknown:4android.hardware.camera2.impl.-$$Lambda$CallbackProxies$SessionStateCallbackProxy$gvbTsp9UPpKJAbdycdci_ZW5BeI.run

Handler.java:873android.os.Handler.handleCallback

Handler.java:99android.os.Handler.dispatchMessage

Looper.java:201android.os.Looper.loop

HandlerThread.java:65android.os.HandlerThread.run

this error mostly occured on xiaomi device (redmi note 7), can I have any solution? i hope this solve or you can give me any clue, thank you @natario1

natario1 commented 4 years ago

Can you fill the bug report information? Thanks!

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had activity in the last 20 days. It will be closed if no further activity occurs within the next seven days. Thank you for your contributions.

coderJohnZhang commented 4 years ago

I have met this issue, too.

11-14 16:46:21.587 19645 19645 E AndroidRuntime: FATAL EXCEPTION: main 11-14 16:46:21.587 19645 19645 E AndroidRuntime: Process: com.tcl.tvcamera, PID: 19645 11-14 16:46:21.587 19645 19645 E AndroidRuntime: java.lang.RuntimeException: onConfigureFailed! Session android.hardware.camera2.impl.CameraCaptureSessionImpl@74bb74e 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at com.tcl.cameraview.engine.Camera2Engine$4.onConfigureFailed(Camera2Engine.java:531) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigureFailed$1(CallbackProxies.java:64) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.hardware.camera2.impl.-$$Lambda$CallbackProxies$SessionStateCallbackProxy$gvbTsp9UPpKJAbdycdci_ZW5BeI.run(Unknown Source:4) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193) 11-14 16:46:21.587 19645 19645 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:65)

nsekhar90 commented 4 years ago

Im getting this same crash on Nexus 6P.

Is it possible for the library to not throw the exception (resulting in app crash) but report to client that initialization failed & the app can handle it gracefully ?

natario1 commented 4 years ago

@nsekhar90 do you still get this error if you choose a smaller picture/video/preview stram/frame processing size?

I want to understand if the library can handle this better before deciding to simply pass the error to the app.

nsekhar90 commented 4 years ago

Im just using the default options and only for taking a picture (no video). I can try reducing the quality/size.

natario1 commented 4 years ago

Yeah please do. With camera.setPictureSize(). By default it's the biggest available. You can try camera.setPictureSize(SizeSelectors.smallest()) as an extreme example.

nsekhar90 commented 4 years ago

That fixes the issue. Thanks @natario1 for very quick response. Is there anything I can do on the client side to adjust this based on device ?

natario1 commented 4 years ago

Nice to know. What if you remove that line, but instead you add setPreviewStreamSize(SizeSelectors.smallest()) ? Does this fix the issue as well?

You can adjust based on the device with these methods, just pass a SizeSelector that fixes the issue

nsekhar90 commented 4 years ago

yeah, the setPreviewStreamSize(SizeSelectors.smallest()) fixes the issue too. So, should I just check for a particular device (Nexus 6p in this case) & add the line setPreviewStreamSize(SizeSelectors.smallest()) ?

natario1 commented 4 years ago

I would call something like setPreviewStreamSize(SizeSelectors.and(SizeSelectors.maxWidth(MAX_WIDTH), SizeSelectors.biggest()).

You should find the value of MAX_WIDTH by trying on your nexus (1000? 1200? 1400? 1900?). If you find an exact value please let me know.

Later we might improve this within the lib.

nsekhar90 commented 4 years ago

1000 works best, can we calculate this runtime instead of hard coding it ?

nsekhar90 commented 4 years ago

Im asking about run time calculation because this crash might occur on other devices right ? I noticed that other people posted about this crash in the top.

Frayo44 commented 4 years ago

Are there any updates? Also got this on Redmi Note 7 & 8 & Galaxy S8.

natario1 commented 4 years ago

I'm not actively working on this but my suggestion is to limit the preview stream size with setPreviewStreamSize(). If you represent a company feel free to sponsor me to let me work on this sooner

Frayo44 commented 4 years ago

I would like to support you. but unfortunately I am an independent developer.

How can I calculate MAX_WIDTH on runtime?

natario1 commented 4 years ago

I don't know - you should find something that works for your app, as it likely depends on the picture/video size that you are choosing, whether you are using frame processing or not, what is the frame processing size, ...

nxnyk commented 4 years ago

I have the same issue on Redmi 8A

chitrang200889 commented 4 years ago

I faced a similar issue on Samsung S9+ a couple of times.

1) I set this in xml,

            <com.otaliastudios.cameraview.CameraView
                android:id="@+id/cv_uca_cameraview"
                android:layout_width="@dimen/cell_2x"
                android:layout_height="@dimen/cell_2x"
                android:layout_alignParentTop="true"
                android:layout_alignParentRight="true"
                android:layout_margin="@dimen/cell_margin"
                android:visibility="gone"
                android:keepScreenOn="true"
                app:cameraAudio="mono"
                app:cameraEngine="camera2"
                app:cameraExperimental="true"
                app:cameraFacing="front"
                app:cameraFlash="off"
                app:cameraGestureLongTap="none"
                app:cameraGesturePinch="none"
                app:cameraGestureScrollHorizontal="none"
                app:cameraGestureScrollVertical="none"
                app:cameraGestureTap="none"
                app:cameraGrid="off"
                app:cameraHdr="off"
                app:cameraMode="video"
                app:cameraPlaySounds="false"
                app:cameraPreview="glSurface"
                app:cameraPreviewFrameRate="30"
                app:cameraPreviewFrameRateExact="false"
                app:cameraRequestPermissions="false"
                app:cameraUseDeviceOrientation="false"
                app:cameraVideoCodec="h264"
                app:cameraWhiteBalance="auto" />

2) And in code, I change width and height programmatically as per our requirement,

val txrParam: RelativeLayout.LayoutParams = cameraView.layoutParams as RelativeLayout.LayoutParams txrParam.width = cameraViewWidth txrParam.height = cameraViewHeight

cameraViewWidth and cameraViewHeight can be different for square, landscape, or portrait video snapshot recording.

3) Finally, to record a video snapshot,

cameraView.videoMaxDuration = 15000 cameraView.takeVideoSnapshot(file)

"If you are planning to use the snapshot APIs, the size of the media output is that of the preview stream, accounting for any cropping made when measuring the view and other constraints. Please read the Snapshot Size document."(https://natario1.github.io/CameraView/docs/capture-size)

My question is do I still need to use setPreviewStreamSize? Because as mentioned above it is calculated when measuring the view,

setPreviewStreamSize(SizeSelectors.and(SizeSelectors.maxWidth(MAX_WIDTH), SizeSelectors.biggest())

If yes, what should be changed for square, landscape, or portrait video snapshot recording?

tomer8007 commented 3 years ago

@natario1 Have an idea of what's the root cause/what flows lead to the onConfigureFailed error? Or how to deterministically reproduce this?

natario1 commented 3 years ago

@tomer8007 it happens when the set of output sizes that we chose (preview stream size, frame processing size if you're using it, picture size when in Mode.PICTURE, video size when in Mode.VIDEO) is rejected by the device. We respect all limits for each size individually, but sometimes the combination of them is too much.

nestoleh commented 3 years ago

Does anyone have a working solution for this problem? I got this error on devices Xiaomi (Redmi Note 7, Redmi Note 8, Redmi Note 8T, Redmi 8A) and Samsung (Galaxy A02s, Galaxy A01, Galaxy A10s)

1singhmanmeet commented 3 years ago

It comes mostly on Redmi devices

munir700 commented 2 years ago

It comes frequently on Galaxy A02s device

Luckyrana001 commented 2 years ago
            app:cameraVideoSizeMaxWidth="1000"

i have used above video max width size and now i am not getting this error, please try on your end as well , thanks

sumit007 commented 1 year ago

Does anyone able to find a solution for this. I had tried the solution but I am still getting this issue in Redmi 10T 5G devices.

I would call something like setPreviewStreamSize(SizeSelectors.and(SizeSelectors.maxWidth(MAX_WIDTH), SizeSelectors.biggest()).

You should find the value of MAX_WIDTH by trying on your nexus (1000? 1200? 1400? 1900?). If you find an exact value please let me know.

Later we might improve this within the lib.