createCameraPreviewSession: у Surface не было допустимого собственного окна - ошибка при втором создании - PullRequest
0 голосов
/ 15 января 2019

Мы вызываем из Ionic пользовательский плагин Cordova, который использует Camera2 API для захвата кадра.При втором вызове этого плагина в Ionic (что следует далее) мы получаем иногда (как в одном из десяти случаев) следующую ошибку:

2019-01-14 18:08:16.471 31738-31738/io.ionic.starter E/Legacy-CameraDevice-JNI: getNativeWindow: Surface had no valid native window.
2019-01-14 18:08:16.472 31738-31738/io.ionic.starter E/Legacy-CameraDevice-JNI: LegacyCameraDevice_nativeDetectSurfaceDimens: Could not retrieve native window from surface.
2019-01-14 18:08:16.472 31738-31738/io.ionic.starter D/AndroidRuntime: Shutting down VM
2019-01-14 18:08:16.472 31738-31738/io.ionic.starter E/AndroidRuntime: FATAL EXCEPTION: main
    Process: io.ionic.starter, PID: 31738
    java.lang.UnsupportedOperationException: Unknown error -22
        at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:77)
        at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize(LegacyCameraDevice.java:583)
        at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:68)
        at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:237)
        at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:101)
        at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:499)

        at dev.capture.Camera2Scanner.createCameraPreviewSession(Camera2Scanner.java:675)
        at dev.capture.Camera2Scanner.access$200(Camera2Scanner.java:47)
        at dev.capture.Camera2Scanner$2.onOpened(Camera2Scanner.java:191)

        at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:139)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Итак, я проверил AndroidИсточники JNI для этой ошибки, там говорится, что эта ошибка генерируется, когда getNativeWindow () возвращает ноль.Но что конкретно делает эта функция и что это означает для нашей поверхности?

1 Ответ

0 голосов
/ 16 января 2019

Вы передали Surface для CameraDevice.createCaptureSession, который больше не действителен;как правило, это потому, что то, с чего вы получили Surface, было либо собрано мусором, либо потому, что элемент пользовательского интерфейса, к которому он обращается, больше не действителен.

Так что, если SurfaceView больше не подходит для рисования или ImageReaderбыл выпущен, и т.д., вы можете получить эту ошибку.Вам нужно выяснить, какая поверхность недопустима, а затем выяснить, почему ее источник больше не в хорошей форме.

...