2013-10-07 10 views
25

Ciò si verifica utilizzando alcuni apk che fanno uso della fotocamera (ad esempio, zxing, opencv). Visualizza un'immagine riflessa nell'anteprima ma è ancora una funzione di ciò che vede la telecamera, quindi sembra che si tratti di una mancata corrispondenza della codifica. L'anteprima della fotocamera nativa funziona bene, quindi le app interne non presentano questo problema.Immagine di anteprima di Google Glass codificata con la nuova versione XE10

+5

Questo errore esiste ancora da XE12. – squidpickles

risposta

32

Per il momento, si prega di provare ad aggiungere la seguente soluzione dopo si acquista il Camera ma prima di iniziare l'installazione e l'anteprima:

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

(O semplicemente aggiungere la chiamata setPreviewFpsRange ai parametri esistenti se si sta impostando altri.)

+0

30 FPS sembra un po 'troppo alto. Raccomando qualcosa di più basso, 5 FPS, in particolare per un dispositivo che consuma batteria come Glass. – swooby

-2

È possibile impostare params.setPreviewSize(1200,800). È possibile modificare i valori intorno a questo intervallo fino a quando non è possibile eliminare il disturbo del colore.

+0

Questo non risolve il problema. – swooby

8

Per chiunque utilizzi ZXing sul proprio Vetro, è possibile creare una versione dal codice sorgente con la correzione precedente.

aggiungere il seguente metodo in CameraConfigurationManager.java

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

e chiamare questo metodo subito dopo da nessuna parte che si vede Camera.setParameters() nel codice ZXing. L'ho messo in due posti in CameraConfigurationManager e ha funzionato.

Impostare la dimensione di anteprima su 640x360 in modo che corrisponda alla risoluzione del vetro.

+0

30 FPS sembra essere molto, e la dimensione dell'anteprima 640x360 non è necessaria per risolvere il problema. Il problema era che l'FPS predefinito era troppo alto a 60FPS. Vedi la mia risposta qui sotto ... – swooby

4

30 L'anteprima di FPS è piuttosto alta. Se si vuole risparmiare un po 'la batteria e CPU, prendere in considerazione l'FPS più lento supportato essere sufficiente:

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

Non so perché qualcuno abbia votato questo. Questo è il codice esatto che ZXing ha accettato come richiesta Pull da me per risolvere il problema: https://github.com/zxing/zxing/commit/9e08da655eb6d5423b286f83aa356230536b13a5 – swooby

+0

Opere per me. La migliore risposta qui IMO. – Zarokka

1

Il bug esiste ancora come di XE16 e XE16.11 ma questo codice viene passato il glitch e mostra una normale macchina fotografica anteprima , annota le tre linee di impostazione dei parametri e i loro valori. Ho anche testato questo a 5000 (5 FPS) e funziona, e al 60000 (60FPS) e non funziona: (!)

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

hai cambiato zxing lib?In che classe hai inserito questo codice? Potresti mostrare di più? Nella mia implementazione non ho accesso alla classe della telecamera ... – Anthea

0

Questo è ancora un problema, come dei XE22 Abbassando i fotogrammi al secondo a 30 o più basso fa il trucco:

parameters.setPreviewFpsRange(30000, 30000); 

e, in effetti, non dimenticare di impostare i parametri:

camera.setParameters(parameters); 

ho trovato alcuna spiegazione chiara sul perché questo provoca problemi, dal momento che 60 fps è incluso nel suppor gamma di fps. Il video può registrare 720p, ma non ho mai visto una fonte aggiungere il fps a questo.

Problemi correlati