From 4c37a761a74d4bf9af3850894f3d919b7f272758 Mon Sep 17 00:00:00 2001 From: Wu-cheng Li Date: Tue, 8 Sep 2009 15:18:39 +0800 Subject: Set optimal preview size. --- src/com/android/camera/Camera.java | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java index 0c7dfde..5deb0d6 100644 --- a/src/com/android/camera/Camera.java +++ b/src/com/android/camera/Camera.java @@ -895,6 +895,9 @@ public class Camera extends Activity implements View.OnClickListener, } catch (InterruptedException ex) { // ignore } + + // Resize mVideoPreview to the right aspect ratio. + resizeForPreviewAspectRatio(mSurfaceView); } @Override @@ -1531,6 +1534,31 @@ public class Camera extends Activity implements View.OnClickListener, clearFocusState(); } + private void resizeForPreviewAspectRatio(View v) { + ViewGroup.LayoutParams params; + params = v.getLayoutParams(); + Size size = mParameters.getPreviewSize(); + params.width = (int) (params.height * size.width / size.height); + Log.v(TAG, "resize to " + params.width + "x" + params.height); + v.setLayoutParams(params); + } + + private Size getOptimalPreviewSize(List sizes) { + Size optimalSize = null; + if (sizes != null) { + optimalSize = sizes.get(0); + for (int i = 1; i < sizes.size(); i++) { + if (Math.abs(sizes.get(i).height - mViewFinderHeight) < + Math.abs(optimalSize.height - mViewFinderHeight)) { + optimalSize = sizes.get(i); + } + } + Log.v(TAG, "Optimal preview size is " + optimalSize.width + "x" + + optimalSize.height); + } + return optimalSize; + } + private void setCameraParameter() { mParameters = mCameraDevice.getParameters(); @@ -1542,8 +1570,12 @@ public class Camera extends Activity implements View.OnClickListener, mParameters.setPreviewFrameRate(max); } - // Set preview size. - mParameters.setPreviewSize(mViewFinderWidth, mViewFinderHeight); + // Set a preview size that is closest to the viewfinder height. + List sizes = mParameters.getSupportedPreviewSizes(); + Size optimalSize = getOptimalPreviewSize(sizes); + if (optimalSize != null) { + mParameters.setPreviewSize(optimalSize.width, optimalSize.height); + } // Set picture size. String pictureSize = mPreferences.getString( -- cgit v1.1