2016-10-04 75 views
4

嘗試使用camera2api實現輕拍focusAndroid攝像頭2輕擊焦點

CaptureRequest.Builder afBuilder = mPreviewBuilder; 

    Rect newRect=new Rect(0,0,200,200); 
    MeteringRectangle meteringRectangle=new MeteringRectangle(newRect,METERING_WEIGHT_DONT_CARE); 

    MeteringRectangle[] areas = afBuilder.get(CaptureRequest.CONTROL_AF_REGIONS); 

    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,areas); 
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO); 
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START); 
    mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallback, mBackgroundHandler); 

在我回電話,我一直陷在一種ACTIVE_SCAN狀態,偶爾進入FOCUS_NOT_LOCKED狀態。我似乎永遠不會進入FOCUS_LOCKED狀態,預覽永遠不會集中注意力。

使用三星Galaxy Note 3

+0

我在提取'java.lang.IllegalArgumentException:rect.left必須是非負的'。你能指導我嗎? –

+0

可能值得就此開始一個新問題。你有關於這個問題的更多信息,代碼示例等? –

+0

使用SENSOR_INFO_ACTIVE_ARRAY_SIZE解決。我已經混合舊的相機代碼與新的'相機2'' MeteringRectangle' –

回答

2

首先,你實際上並沒有設置一個AF區域 - 你只是從mPreviewBuilder重用默認區域。

其次,即使您將區域設置爲[(0,0,200,200),METERING_WEIGHT_DONT_CARE],那就是圖像的左上角,並且可能不是您想要的?

第三,也是最重要的是,您將AF觸發器設置爲重複。這意味着在每一幀中,您都要求相機重新開始對焦。所以它永遠不會完成,因爲你永遠不會放過它。

您需要將AF_TRIGGER設置爲START才能進行單次捕獲;您仍然希望在重複請求時將AF_REGION和AF_MODE設置爲始終貫穿整個AF掃描。

+0

謝謝。是的,矩形更適合這篇文章。 雖然我會嘗試對觸發器進行排序,但這只是爲了將視頻應用程序記錄到某個上下文中。 –

+0

非常感謝你這是重複觸發問題! –

+0

@YRfreeDevelopers你能不能更新OP的代碼修復? – ryderd