背景:
前段时间公司有一个项目,是双摄像头,但是是共同驱动的。这两颗通过光感切换镜片实现正常和夜景两种效果。但是由于夜景和正常场景是不同的效果参数,这就需要在不同场景下调用匹配对应的效果参数。
思路:
相机APP通过光感发起场景的切换,设置当前要进入的是夜景还是普通模式到framework 然后再通知到hal 依次告诉sensor来加载不同效果。
实现:
相机应用:
路径:
packages/apps/SnapdragonCamera/src/com/android/camera/PhotoModule.java
根据光感条件下发如下参数来通知framework准备切换场景:
Parameters p = mCameraDevice.getParameters();
mParameters.setNightMode(onOff == 1 ? "1" : "0");
framework:
路径:
frameworks/base/core/java/android/hardware/Camera.java
增加接口实现:
public static final String KEY_NIGHT_MODE = "night-mode";
''''
public void setNightMode(String value) {
Log.i(TAG, "camera freamwork setNightMode onOff =" + value);
set(KEY_NIGHT_MODE, value);
}
Hal 层:
路径:
hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp
hardware/qcom/camera/QCamera2/HAL/QCameraParameters.h
const char QCameraParameters::KEY_QC_NIGHT_MODE[] = "night-mode";
int32_t QCameraParameters::updateParameters(const String8& p,
bool &needRestart)
、、、
if ((rc = setNightMode(params))) final_rc = rc;
、、、
}
int32_t QCameraParameters::setNightMode(const QCameraParameters& params)
{
const char *str = params.get(KEY_QC_NIGHT_MODE);
const char *prev_str = get(KEY_QC_NIGHT_MODE);
LOGI("hal setNightMode cur status = %s pre = %s", str,prev_str);
if (str != NULL) {
if (prev_str == NULL || strcmp(