Подтвердить что ты не робот

Изображение предварительного просмотра Google Glass скремблировано с новым выпуском XE10

Это происходит с использованием нескольких apks, которые используют камеру (например, zxing, opencv). Он отображает сбойное изображение в предварительном просмотре, но он по-прежнему зависит от того, что видит камера, поэтому оно представляется несоответствием кодировки. Предварительный просмотр собственной камеры отлично работает, поэтому внутренние приложения не проявляют этой проблемы.

4b9b3361

Ответ 1

Теперь попробуйте добавить следующее обходное решение после получения Camera, но перед настройкой и запуском предварительного просмотра:

Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);

(Или просто добавьте вызов setPreviewFpsRange к вашим существующим параметрам, если вы также устанавливаете другие.)

Ответ 2

Для тех, кто использует ZXing на своем стекле, вы можете построить версию из исходного кода с помощью вышеупомянутого исправления.

Добавьте следующий метод в CameraConfigurationManager.java

  public void googleGlassXE10WorkAround(Camera mCamera) {
        Camera.Parameters params = mCamera.getParameters();
        params.setPreviewFpsRange(30000, 30000);
        params.setPreviewSize(640,360);
        mCamera.setParameters(params);
  }

И вызовите этот метод сразу после того, как вы увидите Camera.setParameters() в коде ZXing. Я просто поместил его в два места в CameraConfigurationManager, и он сработал.

Я установил размер предварительного просмотра 640x360 в соответствии с разрешением Glass.

Ответ 3

30 Предварительный просмотр FPS довольно высок. Если вы хотите сэкономить аккумулятор и процессор, считайте, что самый поддерживаемый FPS - достаточно:

List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
int[] minimumPreviewFpsRange = supportedPreviewFpsRanges.get(0);
parameters.setPreviewFpsRange(minimumPreviewFpsRange[0], minimumPreviewFpsRange[1]);

Ответ 4

Ошибка по-прежнему существует с XE16 и XE16.11, но этот код проходит через сбой и показывает обычный просмотр камеры, обратите внимание на три строки настройки параметров и их значения. Я также тестировал это на 5000 (5FPS), и он работает, и на 60000 (60FPS), и он не работает:

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mCamera == null) return;

        Camera.Parameters camParameters = mCamera.getParameters();
        camParameters.setPreviewFpsRange(30000, 30000);
        camParameters.setPreviewSize(1920, 1080);
        camParameters.setPictureSize(2592, 1944);
        mCamera.setParameters(camParameters);
        try {
            mCamera.startPreview();
        } catch (Exception e) {
            mCamera.release();
            mCamera = null;
        }
    }

Ответ 5

Это все еще проблема с XE22 (!) Уменьшение кадров в секунду до 30 или ниже делает трюк:

 parameters.setPreviewFpsRange(30000, 30000);

И действительно, не забудьте установить параметры:

camera.setParameters(parameters);

Я не нашел ясного объяснения, почему это вызывает проблемы, так как 60 fps включены в поддерживаемый диапазон fps. Видео может записывать 720p, но я никогда не видел, чтобы источник добавлял fps к этому.

Ответ 6

Вы можете установить params.setPreviewSize(1200,800). Вы можете изменять значения вокруг этого диапазона, пока не сможете очистить цветовой шум.