19c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/* 29c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Copyright (C) 2014 The Android Open Source Project 39c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 49c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Licensed under the Apache License, Version 2.0 (the "License"); 59c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * you may not use this file except in compliance with the License. 69c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * You may obtain a copy of the License at 79c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 89c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * http://www.apache.org/licenses/LICENSE-2.0 99c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 109c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Unless required by applicable law or agreed to in writing, software 119c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * distributed under the License is distributed on an "AS IS" BASIS, 129c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * See the License for the specific language governing permissions and 149c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * limitations under the License. 159c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */ 169c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 1712f608f3d2089439a108788a1908941eea4277b9Puneet Lallpackage com.android.camera.one.v2.initialization; 189c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 199c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.CaptureModuleUtil; 206ba8eeea4758e29318c615e978c63599c30438b4Paul Rohdeimport com.android.camera.one.PreviewSizeSelector; 219c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.util.Size; 229c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 23d8463954727c9f8b688e69476439830cadb7b45aPuneet Lallimport java.util.ArrayList; 24d8463954727c9f8b688e69476439830cadb7b45aPuneet Lallimport java.util.Collections; 25d8463954727c9f8b688e69476439830cadb7b45aPuneet Lallimport java.util.Comparator; 26d8463954727c9f8b688e69476439830cadb7b45aPuneet Lallimport java.util.List; 27d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall 289c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/** 29d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall * Picks a preview size. TODO Remove dependency on static CaptureModuleUtil 30d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall * function and write tests. 319c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */ 326ba8eeea4758e29318c615e978c63599c30438b4Paul Rohdeclass Camera2PreviewSizeSelector implements PreviewSizeSelector { 33d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall private final List<Size> mSupportedPreviewSizes; 349c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 356ba8eeea4758e29318c615e978c63599c30438b4Paul Rohde public Camera2PreviewSizeSelector(List<Size> supportedPreviewSizes) { 36d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall mSupportedPreviewSizes = new ArrayList<>(supportedPreviewSizes); 379c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 389c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 396ba8eeea4758e29318c615e978c63599c30438b4Paul Rohde public Size pickPreviewSize(Size pictureSize) { 409c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall if (pictureSize == null) { 419c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall // TODO The default should be selected by the caller, and 429c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall // pictureSize should never be null. 43d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall pictureSize = getLargestPictureSize(); 449c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 459c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall float pictureAspectRatio = pictureSize.getWidth() / (float) pictureSize.getHeight(); 469c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 476ba8eeea4758e29318c615e978c63599c30438b4Paul Rohde Size size = CaptureModuleUtil.getOptimalPreviewSize( 48d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall (Size[]) mSupportedPreviewSizes.toArray(new Size[mSupportedPreviewSizes.size()]), 49d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall pictureAspectRatio, null); 509c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall return size; 519c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 529c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 539c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall /** 549c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * @return The largest supported picture size. 559c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */ 56d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall private Size getLargestPictureSize() { 57d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall return Collections.max(mSupportedPreviewSizes, new Comparator<Size>() { 58d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall @Override 59d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall public int compare(Size size1, Size size2) { 60d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall int area1 = size1.getWidth() * size1.getHeight(); 61d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall int area2 = size2.getWidth() * size2.getHeight(); 62d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall return Integer.compare(area1, area2); 639c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 64d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall }); 659c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 669c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall} 67