天天看點

camera插值(高通LL_8916平台)

前言:項目為了節省成本,想把500萬插值為800萬。基本的原理就是驅動先模拟一個空間,欺騙上層說我支援800萬,然後上層通過已有的流程拍出800萬的照片。

這個功能真的很low,專業人士一看就能看穿。

驅動:

插值功能都是針對4:3的比例,其他的沒有試過,前輩說是不行的。

在對應的模組添加:

ov5648_lib.c(/vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/ov5648)
static msm_sensor_dimension_t ov5648_c5000l_scale_size_tbl[] = {
  {3264, 2448}, 
};

/*===========================================================================
 * FUNCTION    - ov5648_c5000l_get_scale_tbl -
 *
 * DESCRIPTION: Get scale size table
 *==========================================================================*/
static int32_t ov5648_c5000l_get_scale_tbl(msm_sensor_dimension_t * tbl)
{ 
  int i;
  if(sensor_lib_ptr.scale_tbl_cnt == 0)
    return -1;
  for(i = 0; i < sensor_lib_ptr.scale_tbl_cnt; i++){
    tbl[i] = ov5648_c5000l_scale_size_tbl[i];
  }

  return 0;
}

static sensor_lib_t sensor_lib_ptr = {
...
/* scale size table count*/
.scale_tbl_cnt = ARRAY_SIZE(ov5648_c5000l_scale_size_tbl),
/*function to get scale size tbl */
.get_scale_tbl = ov5648_c5000l_get_scale_tbl,
...
};
           

上層:

目前的高通平台都相容插值的功能,是以我們不需要做過多的改動,下面的代碼是之前平台沒有打高通的平台更新patch導緻需要添加:

Camera.java(/frameworks/base/core/java/android/hardware)
@Deprecated
public class Parameters {
	...
	private static final String KEY_SCALED_PICTURE_SIZE = "scaled-picture-sizes";
	...
}

public List<Size> getSupportedPictureSizes() {
    String str = get(KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX);					
	String str2 = get(KEY_SCALED_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX);
	String str3 = get(KEY_SCALED_PICTURE_SIZE);		
	String str4 = str3 + "," + str;
	Log.d(TAG, "str = " + str);
	Log.d(TAG, "str2 = " + str2);
	Log.d(TAG, "str3 = " + str3);
	Log.d(TAG, "str4 = " + str4);
    return splitSize(str4);			
}
           

上面是framework層擷取hal層傳上來的參數,感興趣的同學可以自己追蹤一下。

插值的功能和ZSL(零秒快拍)有沖突,是以需要關閉。(camera中有許多功能都有沖突,如何處理這些沖突有必要好好學習一下)

PhotoMenu.java(/packages/apps/SnapdragonCamera/src/com/android/camera)
@Override
public void onSettingChanged(ListPreference pref) {
	...
	ListPreference pref6 = mPreferenceGroup.findPreference(CameraSettings.KEY_PICTURE_SIZE);
	String picturesize = (pref6 != null) ? pref6.getValue() : null;
	if(picturesize.equals("3264x2448")){
		popup1.setPreferenceEnabled(CameraSettings.KEY_ZSL,false);
	}
	...
}
           

以上就是插值功能的實作過程。

QC插值詳細patch文檔,有需要的可以下載下傳:

https://download.csdn.net/download/qq_28534581/9927296