Camera2: должен вызываться метод createCaptureRequest () в фоновом потоке - PullRequest
0 голосов
/ 28 января 2020

Из документации:

Создание сеанса является дорогостоящей операцией и может занимать несколько сотен миллисекунд, поскольку требует настройки внутренних конвейеров устройства камеры и выделения буферов памяти для отправки изображений желаемым целям. Поэтому настройка выполняется асинхронно, и CameraDevice # createCaptureSession и CameraDevice # createReprocessableCaptureSession отправит готовый к использованию CameraCaptureSession предоставленному обратному вызову CameraCaptureSession.StateCallback # onConfigured.

Однако я получаю ANR, вызванное createCaptureSession ():

AppNotResponding : Application not responsive since: Fri Jan 17 17:19:26 GMT+01:00 2020
        at android.os.BinderProxy.transactNative(BinderProxy.java)
        at android.os.BinderProxy.transact(BinderProxy.java:510)
        at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.endConfigure(ICameraDeviceUser.java:719)
        at android.hardware.camera2.impl.ICameraDeviceUserWrapper.endConfigure(ICameraDeviceUserWrapper.java:114)
        at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:476)
        at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:664)
        at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:512)

Я не вижу в примерах кода, что вызов createCaptureSession () выполняется в фоновом потоке. Обычно передается обработчик, поэтому в фоновом потоке будут выполняться только обратные вызовы?

1 Ответ

0 голосов
/ 28 января 2020

Если вы ссылаетесь на официальный Camera2 образец от Google, сеанс предварительного просмотра создается в отдельном HandlerThread. Сеанс камеры создается как mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler);

...