Это происходит с использованием нескольких apks, которые используют камеру (например, zxing, opencv). Он отображает сбойное изображение в предварительном просмотре, но он по-прежнему зависит от того, что видит камера, поэтому оно представляется несоответствием кодировки. Предварительный просмотр собственной камеры отлично работает, поэтому внутренние приложения не проявляют этой проблемы.
Изображение предварительного просмотра Google Glass скремблировано с новым выпуском XE10
Ответ 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)
. Вы можете изменять значения вокруг этого диапазона, пока не сможете очистить цветовой шум.