App层continuousFocus功能分析

 

连续对焦(continuousFocus)是指相机启动后,预览界面由模糊到清晰的过程。

1Set continuousfocus

Camera.java --> onCreate()

 

String[] defaultFocusModes = getResources().getStringArray(

                R.array.pref_camera_focusmode_default_array);

mFocusManager = new FocusManager(mPreferences, defaultFocusModes);

调用了FocusManager的构造函数

FocusManager.java

 

  public FocusManager(ComboPreferences preferences, String[] defaultFocusModes) {

        mPreferences = preferences;

        mDefaultFocusModes = defaultFocusModes;

        mHandler = new MainHandler();

        mMatrix = new Matrix();

    }

defaultFocusModes的信息被储存在res/values/array.xml

 

<!-- Default focus mode setting.-->

    <string-array name="pref_camera_focusmode_default_array" translatable="false">

        <item>continuous-picture</item>

        <item>continuous</item>

 </string-array>

 

2. Start continuousfocus

Camera.java -->onCreate()

 

mCameraPreviewThread.start();

调用了mCameraPreviewThreadrun()方法

 

Thread mCameraPreviewThread = new Thread(new Runnable() {

        public void run() {

            initializeCapabilities();

            startPreview();

        }

 });

 

调用了Camera.java --> startPreview()

 

if (!mSnapshotOnIdle) {

            // If the focus mode is continuous autofocus, call cancelAutoFocus to

            // resume it because it may have been paused by autoFocus call.

if (Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusManager.getFocusMode())) {

                mCameraDevice.cancelAutoFocus();

            }

            mFocusManager.setAeAwbLock(false); // Unlock AE and AWB.

}

setCameraParameters(UPDATE_PARAM_ALL);

 

调用Camera.java  --> setCameraParameters(int updateSet)

 

// We separate the parameters into several subsets, so we can update only

    // the subsets actually need updating. The PREFERENCE set needs extra

    // locking because the preference can be changed from GLThread as well.

    private void setCameraParameters(int updateSet) {

        mParameters = mCameraDevice.getParameters();

 

        if ((updateSet & UPDATE_PARAM_INITIALIZE) != 0) {

            updateCameraParametersInitialize();

        }

 

        if ((updateSet & UPDATE_PARAM_ZOOM) != 0) {

                updateCameraParametersZoom();

        }

 

        if ((updateSet & UPDATE_PARAM_PREFERENCE) != 0) {

            updateCameraParametersPreference();

        }

 

        mCameraDevice.setParameters(mParameters);

    }

通过mCameraDevice.setParameters(mParameters)就将参数传入frameworks层了, continuousFocus参数通过updateCameraParametersPreference()函数设定到mParameters中。

 

Camera.java -->updateCameraParametersPreference()

 

// Set focus mode.

mFocusManager.overrideFocusMode(null);

mParameters.setFocusMode(mFocusManager.getFocusMode());

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值