android HC 中 digital zoom 工作原理:
1. 声明 zoom变量
280 //zoom
281 p.set(CameraParameters::KEY_ZOOM_SUPPORTED, "true");
282 p.set(CameraParameters::KEY_MAX_ZOOM, "60"); //zoom值可以在0-60之间
283 p.set(CameraParameters::KEY_ZOOM_RATIOS, "100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,"
284 "550,575,600,625,650,675,700,725,750,775,800,825,850,875,900,925,950,975,1000,1025,1050,1075,1100,"
285 "1125,1150,1175,1200,1225,1250,1275,1300,1325,1350,1375,1400,1425,1450,1475,1500,1525,1550,1575,1600");
286 p.set(CameraParameters::KEY_ZOOM, 0);
2. 读取camera app中传递过来的zoom值:
3456 status_t CameraHardware::setParameters(const CameraParameters& params)
3457 {
...
3600 //Zoom is a invalid value or not
3601 int zoom = p.getInt(CameraParameters::KEY_ZOOM);
3602 LOGD("xiaohai : ------------ zoom = %d", zoom);
3603
3604 if(zoom > MAX_ZOOM_LEVEL || zoom < MIN_ZOOM_LEVEL)
3605 return BAD_VALUE;
3606
...
3612
3613 // zoom is not supported in video mode for soc sensor.
3614 if (vfmode != 2 && mSensorType == SENSOR_TYPE_SOC)
3615 p.set(CameraParameters::KEY_ZOOM_SUPPORTED, "false");
3616 else
3617 p.set(CameraParameters::KEY_ZOOM_SUPPORTED, "true");
3. 获取zoom值,并设置zoom值到底层驱动中去。
3646 int CameraHardware::setISPParameters(
3647 const CameraParameters &new_params,
3648 const CameraParameters &old_params)
3649 {
3650 const char *new_value, *set_value;
3651 int ret,ret2;
3652 static int effect = old_params.getInt(CameraParameters::KEY_EFFECT);
3653
3654 ret = ret2 = -1;
3655
3656 //process zoom
3657 int zoom = new_params.getInt(CameraParameters::KEY_ZOOM);
3658 mCamera->set_zoom_val(zoom);
...
}
4. 添加camera_mode 涉及的文件:
frameworks/base/libs/camera/CameraParameters.cpp
frameworks/base/core/java/android/hardware/Camera.java
packages/apps/Camera/src/com/android/camera/VideoCamera.java
packages/apps/Camera/src/com/android/camera/Camera.java