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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值