summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-03-24 19:50:38 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-03-24 19:50:38 -0700
commit0e30ca2935ad4a957771de79f2ee804c25e8e061 (patch)
treee37a2834756dfdcf3ae37195b221df9a279b9c37 /src/com/android/camera/CaptureModule.java
parentee6c242c81a3a7c1a8ab129e72567c619138267c (diff)
parentbebfa961e414299d2d46095e0786412e5e62300e (diff)
downloadandroid_packages_apps_Snap-0e30ca2935ad4a957771de79f2ee804c25e8e061.tar.gz
android_packages_apps_Snap-0e30ca2935ad4a957771de79f2ee804c25e8e061.tar.bz2
android_packages_apps_Snap-0e30ca2935ad4a957771de79f2ee804c25e8e061.zip
Merge "SnapdragonCamera: Fix ghosting when non-zsl in VGA/QVGA size" into camera.lnx.1.0-dev.1.0
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rw-r--r--src/com/android/camera/CaptureModule.java75
1 files changed, 32 insertions, 43 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index cf26a761b..af82155fe 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -3013,17 +3013,15 @@ public class CaptureModule implements CameraModule, PhotoController,
private void updatePictureSize() {
String pictureSize = mSettingsManager.getValue(SettingsManager.KEY_PICTURE_SIZE);
mPictureSize = parsePictureSize(pictureSize);
- Point screenSize = new Point();
- mActivity.getWindowManager().getDefaultDisplay().getSize(screenSize);
Size[] prevSizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
SurfaceHolder.class);
mSupportedMaxPictureSize = prevSizes[0];
Size[] rawSize = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
ImageFormat.RAW10);
mSupportedRawPictureSize = rawSize[0];
- mPreviewSize = getOptimalPreviewSize(mPictureSize, prevSizes, screenSize.x, screenSize.y);
+ mPreviewSize = getOptimalPreviewSize(mPictureSize, prevSizes);
Size[] thumbSizes = mSettingsManager.getSupportedThumbnailSizes(getMainCameraId());
- mPictureThumbSize = getOptimalPreviewSize(mPictureSize, thumbSizes, 0, 0); // get largest thumb size
+ mPictureThumbSize = getOptimalPreviewSize(mPictureSize, thumbSizes); // get largest thumb size
}
public Size getThumbSize() {
@@ -3049,20 +3047,18 @@ public class CaptureModule implements CameraModule, PhotoController,
private void updateVideoSize() {
String videoSize = mSettingsManager.getValue(SettingsManager.KEY_VIDEO_QUALITY);
mVideoSize = parsePictureSize(videoSize);
- Point screenSize = new Point();
- mActivity.getWindowManager().getDefaultDisplay().getSize(screenSize);
Size[] prevSizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
MediaRecorder.class);
- mVideoPreviewSize = getOptimalPreviewSize(mVideoSize, prevSizes, screenSize.x, screenSize.y);
+ mVideoPreviewSize = getOptimalPreviewSize(mVideoSize, prevSizes);
}
private void updateVideoSnapshotSize() {
- mVideoSnapshotSize = mPictureSize;
+ mVideoSnapshotSize = mVideoSize;
if (is4kSize(mVideoSize) && is4kSize(mVideoSnapshotSize)) {
mVideoSnapshotSize = getMaxPictureSizeLessThan4k();
}
Size[] thumbSizes = mSettingsManager.getSupportedThumbnailSizes(getMainCameraId());
- mVideoSnapshotThumbSize = getOptimalPreviewSize(mVideoSnapshotSize, thumbSizes, 0, 0); // get largest thumb size
+ mVideoSnapshotThumbSize = getOptimalPreviewSize(mVideoSnapshotSize, thumbSizes); // get largest thumb size
}
private boolean is4kSize(Size size) {
@@ -4537,51 +4533,44 @@ public class CaptureModule implements CameraModule, PhotoController,
mUI.enableShutter(true);
}
+ private Size getOptimalPreviewSize(Size pictureSize, Size[] prevSizes) {
+ Point[] points = new Point[prevSizes.length];
- private Size getOptimalPreviewSize(Size pictureSize, Size[] prevSizes, int screenW, int
- screenH) {
- if (pictureSize.getWidth() <= screenH && pictureSize.getHeight() <= screenW) {
- return pictureSize;
+ double targetRatio = (double) pictureSize.getWidth() / pictureSize.getHeight();
+ int index = 0;
+ for (Size s : prevSizes) {
+ points[index++] = new Point(s.getWidth(), s.getHeight());
}
- Size optimal = prevSizes[0];
- float ratio = (float) pictureSize.getWidth() / pictureSize.getHeight();
- for (Size prevSize: prevSizes) {
- float prevRatio = (float) prevSize.getWidth() / prevSize.getHeight();
- if (Math.abs(prevRatio - ratio) < 0.01) {
- // flip w and h
- if (prevSize.getWidth() <= screenH && prevSize.getHeight() <= screenW &&
- prevSize.getWidth() <= pictureSize.getWidth() && prevSize.getHeight() <= pictureSize.getHeight()) {
- return prevSize;
- } else {
- optimal = prevSize;
- }
- }
- }
- return optimal;
+
+ int optimalPickIndex = CameraUtil.getOptimalPreviewSize(mActivity, points, targetRatio);
+ return (optimalPickIndex == -1) ? null : prevSizes[optimalPickIndex];
}
private Size getMaxPictureSizeLessThan4k() {
Size[] sizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(), ImageFormat.JPEG);
float ratio = (float) mVideoSize.getWidth() / mVideoSize.getHeight();
+ Size optimalSize = null;
for (Size size : sizes) {
- if (!is4kSize(size)) {
- float pictureRatio = (float) size.getWidth() / size.getHeight();
- if (Math.abs(pictureRatio - ratio) < 0.01) {
- return size;
+ if (is4kSize(size)) continue;
+ float pictureRatio = (float) size.getWidth() / size.getHeight();
+ if (Math.abs(pictureRatio - ratio) > 0.01) continue;
+ if (optimalSize == null || size.getWidth() > optimalSize.getWidth()) {
+ optimalSize = size;
+ }
+ }
+
+ // Cannot find one that matches the aspect ratio. This should not happen.
+ // Ignore the requirement.
+ if (optimalSize == null) {
+ Log.w(TAG, "No picture size match the aspect ratio");
+ for (Size size : sizes) {
+ if (is4kSize(size)) continue;
+ if (optimalSize == null || size.getWidth() > optimalSize.getWidth()) {
+ optimalSize = size;
}
}
}
- return sizes[sizes.length - 1];
- }
- private Size getMaxSizeWithRatio(Size[] sizes, Size reference) {
- float ratio = (float) reference.getWidth() / reference.getHeight();
- for (Size size : sizes) {
- float prevRatio = (float) size.getWidth() / size.getHeight();
- if (Math.abs(prevRatio - ratio) < 0.01) {
- return size;
- }
- }
- return sizes[0];
+ return optimalSize;
}
public TrackingFocusRenderer getTrackingForcusRenderer() {