Сбой API Camera2 в Sony XPeria, что приводит к неверному разрешению предварительного просмотра - PullRequest
0 голосов
/ 20 мая 2019

Инициализация Camera2 API на Sony XPeria XL иногда дает сбой, что портит разрешение предварительного просмотра камеры.

Странная вещь случается на моем Sony XPeria F8331 Android 8.0 API26 (на других устройствах он работает нормально).Иногда он устанавливает неправильное разрешение на камеру, что подавляет сгенерированный предварительный просмотр.Я знаю, что здесь есть подобный вопрос , но он не имеет никакой соответствующей информации, хотя я могу предоставить журналы всего этого.

У меня есть код, который очень похож на Google Sample (исходный пример приложения делает то же самое).

Из журнала кажется, что каким-то образом Camera2 API дает сбойпри инициализации, и он устанавливает произвольное разрешение (что, очевидно, неверно).Журналы из прикрепленного образца Google:

Правильное отображение Неверное отображение

Единственная разница в инициализации (согласованная) - это ошибка состояния 0 послекоторый он вызывает настройку с разрешением предварительного просмотра 1440x1080, что не является правильным соотношением сторон экрана.Правильное разрешение установлено выше (1280x720).

Проходя по коду с помощью отладчика, я обнаружил, что ошибка состояния 0, вероятно, возникает в строке, которая вызывает createCaptureSession:

// Here, we create a CameraCaptureSession for camera preview.
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
        new CameraCaptureSession.StateCallback() {

            @Override
            public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                // The camera is already closed
                if (null == mCameraDevice) {
                    return;
                }

                // When the session is ready, we start displaying the preview.
                mCaptureSession = cameraCaptureSession;
                try {
                    // Auto focus should be continuous for camera preview.
                    mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                            CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
                // Flash is automatically enabled when necessary.
                setAutoFlash(mPreviewRequestBuilder);

                // Finally, we start displaying the camera preview.
                mPreviewRequest = mPreviewRequestBuilder.build();
                mCaptureSession.setRepeatingRequest(mPreviewRequest,
                        mCaptureCallback, mBackgroundHandler);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onConfigureFailed(
                    @NonNull CameraCaptureSession cameraCaptureSession) {
                showToast("Failed");
            }
        }, null
);

Это похоже на странное состояние гонки внутри API-интерфейса Camera2.Есть ли у вас какие-либо идеи?Кто-нибудь из вас знает, что вызывает ошибку состояния 0?Мне не удалось найти какую-либо информацию об этом в Интернете.

РЕДАКТИРОВАТЬ: Сегодня та же проблема произошла на телефоне Samsung Galaxy S8

...