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