2014-10-11 139 views
6

我正在使用自定義相機功能的應用程序。相機在Galaxy S3,S4,HTC,Nexus上運行良好,但在S5上,所有需要閃光燈的照片都會變暗。照片在預覽中看起來很好,閃光燈會閃光,但是傳感器拍攝的內容總是太暗,就好像閃光燈沒有閃光,閃光燈的閃光和圖像的拍攝在不同的時間發生一樣。閃光燈可以設置爲自動或始終打開,具有相同的效果。我試過FOCUS_MODE_CONTINUOUS_PICTURE和FOCUS_MODE_AUTO,結果相同。三星Galaxy S5相機閃光燈問題

有沒有人有任何建議還有什麼要嘗試?

謝謝你, 加里

+0

這個問題似乎是題外話,因爲它無關的編程 – PeeHaa 2014-10-11 19:15:23

+3

@PeeHaa這個問題有一切與編程。我正在尋求幫助,在我的應用程序中正確配置(編程)相機。 – 2014-10-11 19:19:27

+0

我的Nexus 4出現類似問題。使用股票相機拍攝照片時,出現閃光燈,圖片顯示正常。用閃光燈拍攝我的自定義相機,整個圖像變得非常黑暗。 – 2014-11-07 22:51:32

回答

7

好像這裏有兩個不相關的錯誤,一個在的Nexus 4,對三星S5另一個。它們似乎都表現爲相同的問題,在低光條件下閃光燈拍攝的照片顯得非常暗,但根源卻非常不同。

Nexus 4

當連續使用焦點與閃光燈配合使用時,Nexus 4會中斷。這看起來像是relatively well known issue,唯一的解決方案似乎是使用FOCUS_MODE_AUTO而不是FOCUS_MODE_CONTINUOUS_PICTURE。根本原因似乎與在閃光燈有機會開火之前拍攝照片太早有關。

據我所知,Nexus 4是唯一需要這種特殊外殼的設備(即它報告支持FOCUS_MODE_CONTINUOUS_PICTURE,但是會因此而崩潰)。

// dummy method, replace with wherever you setup camera params 
public void onCameraOpened(Camera camera) { 
    Camera.Parameters params = camera.getParameters(); 

    setFocusModeParameter(
     params, 
     Build.MODEL.equals("Nexus 4") 
      ? new String[] { 
       Camera.Parameters.FOCUS_MODE_AUTO 
      } 
      : new String[] { 
       Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE, 
       Camera.Parameters.FOCUS_MODE_AUTO, 
      } 
    ); 

    camera.setParameters(params); 
} 

public static void setFocusModeParameter(Camera.Parameters params, String... preferences) { 
    List<String> supported_focus_modes = params.getSupportedFocusModes(); 
    if (supported_focus_modes == null) { 
     return; 
    } 

    for (String pref : preferences) { 
     if (supported_focus_modes.contains(pref)) { 
      params.setFocusMode(pref); 
      return; 
     } 
    } 
} 

三星S5

不同的是Nexus 4上,三星S5似乎滯後導致一團漆黑閃光燈後面。據我所知,打開隱藏的零快門滯後參數(以魯棒部分中描述的安全方式)似乎對以下設備沒有不良影響:Nexus 4,Nexus 5,Samsung S3,Samsung S4,Samsung Galaxy Tab S(SM-T700)。

開啓零快門滯後

嘗試設置下面的隱藏攝像頭的參數,這似乎解決了我的S5的問題。

Camera.Parameters params = camera.getParameters(); 
params.set("zsl", "on"); 
camera.setParameters(params); 

更強大的解決方案

如果上述工程的解決方案,我用一個稍微更穩健的方式來檢測時zsl參數可用:

// dummy method, replace with whatever sets up camera parameters 
public void onCameraOpened(Camera camera) { 
    Camera.Parameters params = camera.getParameters(); 
    setHiddenParameter(params, "zsl-values", "zsl", "on"); 
    camera.setParameters(params); 
} 

public static void setHiddenParameter(Camera.Parameters params, String values_key, String key, String value) { 
    if (params.get(key) == null) { 
     return; 
    } 

    String possible_values_str = params.get(values_key); 
    if (possible_values_str == null) { 
     return; 
    } 

    String[] possible_values = possible_values_str.split(","); 
    for (String possible : possible_values) { 
     if (possible.equals(value)) { 
      params.set(key, value); 
      return; 
     } 
    } 
} 

說明

這部分只是在這裏記錄兔子洞來找到這個參數,希望有人知道比我更多的可以擴大這一點。

症狀:

  • 在三星S5,拍照與設置爲FLASH_MODE_ONFLASH_MODE_AUTO閃光燈極暗條件導致暗或全黑的照片。
  • 這似乎沒有發生在我測試過的任何其他設備上(Nexus 4,Nexus 5,Samsung S3,Samsung S4)
  • 如果我在完全黑暗的地方(約3英尺)房間裏,我看到一張極其黑暗的照片,只有幾件事情可見。
  • 如果我在完全黑暗的房間裏的一個開放空間(> 5英尺)前拍照,我會得到一張完全黑色的照片。

我嘗試的第一件事就是搞亂了焦點相關的設置,推測開放空間會導致焦點花費更長的時間,從而導致閃光燈拍攝的時間受到影響。 FOCUS_MODE_AUTOFOCUS_MODE_CONTINUOUS_PICTURE似乎都無助於這種情況。

我也試着鎖定自動曝光和自動白平衡調整,然後致電camera.takePicture(...)以確保這些過程沒有將閃光燈定時關閉,但這似乎也沒有幫助。

雖然它仍然感覺像是一個時間問題,所以我開始比較我的應用程序使用的參數與本機相機應用程序之間的參數差異。

機攝像頭

12-10 15:49:08.659: W/QCameraParameters(265): [FW_DBG] setFirmwareMode: none 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] Requested preview size 1920 x 1080 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] dualrecording-hint : 0 m_FaceAE=1 Camera ID=0 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] Requested video size 1920 x 1080 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] Requested picture size 2048 x 1152 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] Requested FOV 62.000000 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] requested jpeg thumbnail size 512 x 288 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] set optimal jpeg thumbnail size 512 x 288 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] rotation val = 90 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] m_bNoDisplayMode = 0 
12-10 15:49:08.659: W/QCameraParameters(265): setZslMode : m_nDualMode=0, mHdrMode=0, mTakeLowlight=0, m_bRecordingHint=0, mAutoLLS=0, m_nDualRecordingHint=0 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] ZSL = ON 
12-10 15:49:08.659: I/QCameraParameters(265): [PARM_DBG] Requested FpsRange Values:(15000, 30000) 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] flash mode = on 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] AEC lock = false 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] AWB lock = false 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] mHdrMode 0 mTakeLowlight 0 
12-10 15:49:08.659: E/QCameraParameters(265): SAMSUNG APPS HDR MODE 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] live snapshot size 2048 x 1152 
12-10 15:49:08.659: E/QCameraParameters(265): [syscamera][setRthdrModes::2831][str::off][prev_str::off] 
12-10 15:49:08.659: E/QCameraParameters(265): [syscamera][setPafModes::2863][str::on][prev_str::on] 
12-10 15:49:08.659: E/QCameraParameters(265): [syscamera][setDrcModes::2891][str::on][prev_str::on] 
12-10 15:49:08.659: W/QCameraParameters(265): updateParameters : X - mCameraId=0, final_rc=0, line=4465 
12-10 15:49:08.659: W/QCameraParameters(265): [PARM_DBG] setNumOfSnapshot : nBurstNum = 1, nExpnum = 1 

我的應用

12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] Requested preview size 1920 x 1080 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] dualrecording-hint : 0 m_FaceAE=1 Camera ID=0 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] Requested video size 1920 x 1080 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] Requested picture size 2048 x 1152 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] Requested FOV 62.000000 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] requested jpeg thumbnail size 512 x 288 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] set optimal jpeg thumbnail size 512 x 288 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] m_bNoDisplayMode = 0 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] ZSL = off 
12-10 15:48:33.109: I/QCameraParameters(265): [PARM_DBG] Requested FpsRange Values:(10000, 30000) 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] flash mode = on 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] AEC lock = false 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] AWB lock = false 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] mHdrMode 0 mTakeLowlight 0 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] live snapshot size 2048 x 1152 
12-10 15:48:33.109: E/QCameraParameters(265): [syscamera][setPafModes::2863][str::off][prev_str::off] 
12-10 15:48:33.109: E/QCameraParameters(265): [syscamera][setDrcModes::2891][str::off][prev_str::off] 
12-10 15:48:33.109: W/QCameraParameters(265): updateParameters : X - mCameraId=0, final_rc=0, line=4465 
12-10 15:48:33.109: W/QCameraParameters(265): [PARM_DBG] setNumOfSnapshot : nBurstNum = 1, nExpnum = 1 

Native對我的應用

的AEC(自動曝光)和AWB(白平衡)線是相同的,所以這是與我之前嘗試過的一致。唯一的區別是ZSL參數,我從來沒有聽說過。

谷歌搜索ZSL發現本SO answer

爲了實現零快門滯後,照相機驅動程序必須保持含有全分辨率幀一個小圓形緩衝池。圖像以傳感器速率捕獲,併發送到預覽和循環緩衝池(作爲原始拜耳或作爲處理/半處理YUV)。當使用按下快門時,循環池中的最新緩衝區被提取,處理並壓縮成JPEG格式。在較舊的手機相機中,傳感器無法以足夠高的幀速捕捉全分辨率幀,因此ZSL無法實現。

因此,看起來快門時滯會導致閃光燈閃光時和拍攝照片時的時間不匹配。打開ZSL似乎完全消除了這個問題。它可能應該默認打開,因爲沒有它就會破壞閃光行爲,但我不會屏住呼吸。

+0

我認爲這是我所經歷的。看到我的問題http://stackoverflow.com/questions/27277650/當我添加sg5的祕密參數,但我的預覽屏幕中斷。 (相機不停頓onPictureTaken)這是否發生在你身上?謝謝你的提示! – BBaker 2015-01-14 17:50:00

+1

另外..使用FLASH_MODE_TORCH時發生這種情況。它影響我的自動對焦以及整體亮度(因爲它不會自動對焦)在我的s5上。 Nexus 5並非如此,但在屏幕預覽暫停時仍保留了實際圖像的延遲時間。 – BBaker 2015-01-15 16:43:39

+0

我有一些用戶報告破碎的黑屏,但我一直沒有能夠指出它。你能描述一下你遇到的問題嗎? 此外,谷歌搜索發現這個補丁談到在ZSL模式下手動停止預覽:http://review.cyanogenmod.org/#/c/45730/ – rraval 2015-01-15 18:42:12

0

我解決了它在我的三星Galaxy S5。我已經操作相機,設置(左上角),並關閉除閃光燈以外的所有設備。現在當它閃爍時(不閃爍後)就會拍攝照片。圖片清晰明亮。 欲瞭解更多信息,這裏是我的設置,它是在我把所有東西都關掉後自動進入的。 16M圖片尺寸5312X2988 連拍影像關 低光檢測關 人臉檢測關 ISD AUTO ISO自動 測光模式中心加權 點擊採取圖片關閉 選擇性焦點從 效果沒有影響 閃 定時關機 HDR(富音)關閉 測光模式中心加權