热门内容

公众号"MAKE1"

获取行业最新资讯

请扫码添加

专业客服企业微信

修改camera预览分辨率 高通Android驱动层开发-摄像头预览分辨率设置

简介

修改camera预览分辨率 高通Android驱动层开发-摄像头预览分辨率设置

diff --git a/src/LINUX/android/hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp b/src/LINUX/android/hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp

old mode 100644

new mode 100755

index cdfac2e..e865c92

--- a/src/LINUX/android/hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp

+++ b/src/LINUX/android/hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp

@@ -5582,7 +5582,7 @@ int32_t QCameraParameters::setTintlessValue(const QCameraParameters& params)

setTintlessValue(prop);

}

}

-

+ setTintlessValue("enable"); //yong.yang add disable

return NO_ERROR;

}

diff --git a/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/PhotoModule.java b/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/PhotoModule.java

old mode 100644

new mode 100755

index f5498da..594b6ee

--- a/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/PhotoModule.java

+++ b/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/PhotoModule.java

@@ -2833,8 +2833,12 @@ public class PhotoModule

// Set a preview size that is closest to the viewfinder height and has

// the right aspect ratio.

List sizes = mParameters.getSupportedPreviewSizes();

- Size optimalSize = CameraUtil.getOptimalPreviewSize(mActivity, sizes,

- (double) size.width / size.height);

+ //yangshigang add start

+ Size optimalSize = CameraUtil.getPanelPreviewSize(mActivity, sizes);

+

+ //Size optimalSize = CameraUtil.getOptimalPreviewSize(mActivity, sizes,

+ //(double) size.width / size.height);

+ //yangshigang add end

Size original = mParameters.getPreviewSize();

if (!original.equals(optimalSize)) {

mParameters.setPreviewSize(optimalSize.width, optimalSize.height);

diff --git a/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/util/CameraUtil.java b/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/util/CameraUtil.java

old mode 100644

new mode 100755

index 937e1d1..3c73bf7

--- a/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/util/CameraUtil.java

+++ b/src/LINUX/android/packages/apps/Camera2/src/com/android/camera/util/CameraUtil.java

@@ -494,6 +494,103 @@ public class CameraUtil {

return (optimalPickIndex == -1) ? null : sizes.get(optimalPickIndex);

}

+/*yangshigang add start*/

+ public static Size getPanelPreviewSize(Activity currentActivity,

+

+ List sizes) {

+

+ // Use a very small tolerance because we want an exact match.

+

+ final double ASPECT_TOLERANCE = 0.03;

+

+ if (sizes == null) return null;

+

+

+

+ Size optimalSize = null;

+

+ double minDiff = Double.MAX_VALUE;

+

+ Log.v(TAG, "CameraUtil: [young]: minDiff = "+ minDiff);

+

+ // Because of bugs of overlay and layout, we sometimes will try to

+

+ // layout the viewfinder in the portrait orientation and thus get the

+

+ // wrong size of preview surface. When we change the preview size, the

+

+ // new overlay will be created before the old one closed, which causes

+

+ // an exception. For now, just get the screen size.

+

+ Point point = getDefaultDisplaySize(currentActivity, new Point());

+

+ int targetHeight = Math.min(point.x, point.y);

+

+ int targetWidth = Math.max(point.x, point.y);

+

+ double panelRatio = (double) targetWidth / targetHeight;

+

+

+

+

+

+ // Try to find an size match aspect ratio and size

+

+ for (Size size : sizes) {

+

+ double ratio = (double) size.width / size.height;

+

+

+

+

+

+ if (Math.abs(ratio - panelRatio) > ASPECT_TOLERANCE) continue;

+

+ if (Math.abs(size.height - targetHeight) < minDiff) {

+

+

+

+ optimalSize = size;

+

+ minDiff = Math.abs(size.height - targetHeight);

+

+

+

+ }

+

+ }

+

+ // Cannot find the one match the aspect ratio. This should not happen.

+

+ // Ignore the requirement.

+

+ if (optimalSize == null) {

+

+ Log.w(TAG, "No preview size match the aspect ratio");

+

+ minDiff = Double.MAX_VALUE;

+

+ for (Size size : sizes) {

+

+ if (Math.abs(size.height - targetHeight) < minDiff) {

+

+ optimalSize = size;

+

+ minDiff = Math.abs(size.height - targetHeight);

+

+ }

+

+ }

+

+ }

+

+ return optimalSize;

+

+ }

+

+

+ /*yangshigang add end*/

public static int getOptimalPreviewSize(Activity currentActivity,

Point[] sizes, double targetRatio) {

// Use a very small tolerance because we want an exact match.

--

12
 条评论
相关内容推荐