2013-10-07 99 views
25

這發生在使用相機的幾個apks(例如zxing,opencv)。它在預覽中顯示一個閃爍的圖像,但它仍然是相機看到的功能,所以它看起來是一種編碼不匹配。本機相機預覽效果很好,所以內部應用程序不會出現此問題。谷歌玻璃預覽圖像與新的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

對於任何在他們的Glass上使用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()在斑馬線代碼此方法。我只是把它放在CameraConfigurationManager的兩個地方,它工作。

我將預覽大小設置爲640x360以匹配玻璃分辨率。

+0

30FPS似乎很多,並且不需要640x360預覽大小來解決問題。問題在於60FPS的默認FPS太高。看到我的答案在下面... – swooby

4

30 FPS預覽相當高。如果你想節省電池和CPU,考慮最慢的支持FPS就足夠了:

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

我不知道爲什麼有人投了這個。 這實際上是ZXing接受我從我那裏解決問題的確切代碼: https://github.com/zxing/zxing/commit/9e08da655eb6d5423b286f83aa356230536b13a5 – swooby

+0

適合我。這裏最好的答案IMO。 – Zarokka

1

該缺陷仍然存在的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; 
     } 
    } 
+0

你改變了zxing lib嗎?你把這段代碼放在哪一類?你能展示更多嗎?在我的實施中,我無法訪問相機類... – Anthea

0

這仍然是一個問題,因爲XE22降低每秒的幀30或更低的伎倆:

parameters.setPreviewFpsRange(30000, 30000); 

事實上,不要忘記設置參數:

camera.setParameters(parameters); 

我沒有發現任何明確的解釋,爲什麼這會造成麻煩,因爲60幀包括在支持者中特德fps範圍。視頻可以錄製720p,但我從來沒有看到一個來源添加fps。