2013-10-07 3 views
25

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

+5

Эта ошибка все еще существует с XE12. – squidpickles

ответ

32

На данный момент, пожалуйста, попробуйте добавить следующий обходной путь после того, как вы приобретаете Camera, но перед вами настройки и начать просмотр:

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

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

+0

30FPS кажется слишком высоким. Я рекомендую что-то более низкое, 5FPS, особенно для устройства с голодным аккумулятором, такого как Glass. – swooby

-2

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

+0

Это не устраняет проблему. – swooby

8

Для тех, кто использует 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 для соответствия разрешению стекла.

+0

30FPS кажется много, и размер предварительного просмотра 640x360 не требуется для устранения проблемы. Проблема заключалась в том, что FPS по умолчанию был слишком высоким при 60FPS. См. Мой ответ ниже ... – swooby

4

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

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

Я не знаю, почему кто-то проголосовал за это. Это точный код, который ZXing принимал как запрос Pull от меня, чтобы устранить проблему: https://github.com/zxing/zxing/commit/9e08da655eb6d5423b286f83aa356230536b13a5 – swooby

+0

Работает для меня. Лучший ответ здесь ИМО. – Zarokka

1

Исправлена ​​ошибка все еще существует, как из XE16 и XE16.11, но этот код получает мимо глюк и показывает нормальный просмотр камеры , обратите внимание на три строки установки параметров и их значения. Кроме того, я испытал это на 5000 (5к), и она работает, и на 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; 
     } 
    } 
+0

Вы изменили zxing lib?В какой класс вы ввели этот код внутри? Не могли бы вы показать больше? В моей реализации у меня нет доступа к классу камеры ... – Anthea

0

Это все еще является проблемой, как из XE22 Снижение количества кадров в секунду 30 или ниже, делает трюк:

parameters.setPreviewFpsRange(30000, 30000); 

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

camera.setParameters(parameters); 

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

Смежные вопросы