Size.java revision 8097973089420749dcd1ab4974a629c2466b31cc
18097973089420749dcd1ab4974a629c2466b31ccAngus Kong/* 28097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Copyright (C) 2014 The Android Open Source Project 38097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 48097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 58097973089420749dcd1ab4974a629c2466b31ccAngus Kong * you may not use this file except in compliance with the License. 68097973089420749dcd1ab4974a629c2466b31ccAngus Kong * You may obtain a copy of the License at 78097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 88097973089420749dcd1ab4974a629c2466b31ccAngus Kong * http://www.apache.org/licenses/LICENSE-2.0 98097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 108097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Unless required by applicable law or agreed to in writing, software 118097973089420749dcd1ab4974a629c2466b31ccAngus Kong * distributed under the License is distributed on an "AS IS" BASIS, 128097973089420749dcd1ab4974a629c2466b31ccAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138097973089420749dcd1ab4974a629c2466b31ccAngus Kong * See the License for the specific language governing permissions and 148097973089420749dcd1ab4974a629c2466b31ccAngus Kong * limitations under the License. 158097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 168097973089420749dcd1ab4974a629c2466b31ccAngus Kong 178097973089420749dcd1ab4974a629c2466b31ccAngus Kongpackage com.android.ex.camera2.portability; 188097973089420749dcd1ab4974a629c2466b31ccAngus Kong 198097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport android.graphics.Point; 208097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport android.hardware.Camera; 218097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport android.text.TextUtils; 228097973089420749dcd1ab4974a629c2466b31ccAngus Kong 238097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport java.util.ArrayList; 248097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport java.util.List; 258097973089420749dcd1ab4974a629c2466b31ccAngus Kong 268097973089420749dcd1ab4974a629c2466b31ccAngus Kong/** 278097973089420749dcd1ab4974a629c2466b31ccAngus Kong * An immutable simple size container. 288097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 298097973089420749dcd1ab4974a629c2466b31ccAngus Kongpublic class Size { 308097973089420749dcd1ab4974a629c2466b31ccAngus Kong public static final String DELIMITER = ","; 318097973089420749dcd1ab4974a629c2466b31ccAngus Kong 328097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 338097973089420749dcd1ab4974a629c2466b31ccAngus Kong * An helper method to build a list of this class from a list of 348097973089420749dcd1ab4974a629c2466b31ccAngus Kong * {@link android.hardware.Camera.Size}. 358097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 368097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param cameraSizes Source. 378097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return The built list. 388097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 398097973089420749dcd1ab4974a629c2466b31ccAngus Kong public static List<Size> buildListFromCameraSizes(List<Camera.Size> cameraSizes) { 408097973089420749dcd1ab4974a629c2466b31ccAngus Kong ArrayList<Size> list = new ArrayList<Size>(cameraSizes.size()); 418097973089420749dcd1ab4974a629c2466b31ccAngus Kong for (Camera.Size cameraSize : cameraSizes) { 428097973089420749dcd1ab4974a629c2466b31ccAngus Kong list.add(new Size(cameraSize)); 438097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 448097973089420749dcd1ab4974a629c2466b31ccAngus Kong return list; 458097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 468097973089420749dcd1ab4974a629c2466b31ccAngus Kong 478097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 488097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Encode List of this class as comma-separated list of integers. 498097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 508097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param sizes List of this class to encode. 518097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return encoded string. 528097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 538097973089420749dcd1ab4974a629c2466b31ccAngus Kong public static String listToString(List<Size> sizes) { 548097973089420749dcd1ab4974a629c2466b31ccAngus Kong ArrayList<Integer> flatSizes = new ArrayList<>(); 558097973089420749dcd1ab4974a629c2466b31ccAngus Kong for (Size s : sizes) { 568097973089420749dcd1ab4974a629c2466b31ccAngus Kong flatSizes.add(s.width()); 578097973089420749dcd1ab4974a629c2466b31ccAngus Kong flatSizes.add(s.height()); 588097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 598097973089420749dcd1ab4974a629c2466b31ccAngus Kong return TextUtils.join(DELIMITER, flatSizes); 608097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 618097973089420749dcd1ab4974a629c2466b31ccAngus Kong 628097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 638097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Decode comma-separated even-length list of integers into a List of this class. 648097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 658097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param encodedSizes encoded string. 668097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return List of this class. 678097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 688097973089420749dcd1ab4974a629c2466b31ccAngus Kong public static List<Size> stringToList(String encodedSizes) { 698097973089420749dcd1ab4974a629c2466b31ccAngus Kong String[] flatSizes = TextUtils.split(encodedSizes, DELIMITER); 708097973089420749dcd1ab4974a629c2466b31ccAngus Kong ArrayList<Size> list = new ArrayList<>(); 718097973089420749dcd1ab4974a629c2466b31ccAngus Kong for (int i = 0; i < flatSizes.length; i += 2) { 728097973089420749dcd1ab4974a629c2466b31ccAngus Kong int width = Integer.parseInt(flatSizes[i]); 738097973089420749dcd1ab4974a629c2466b31ccAngus Kong int height = Integer.parseInt(flatSizes[i + 1]); 748097973089420749dcd1ab4974a629c2466b31ccAngus Kong list.add(new Size(width,height)); 758097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 768097973089420749dcd1ab4974a629c2466b31ccAngus Kong return list; 778097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 788097973089420749dcd1ab4974a629c2466b31ccAngus Kong 798097973089420749dcd1ab4974a629c2466b31ccAngus Kong private final Point val; 808097973089420749dcd1ab4974a629c2466b31ccAngus Kong 818097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 828097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor. 838097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 848097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Size(int width, int height) { 858097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(width, height); 868097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 878097973089420749dcd1ab4974a629c2466b31ccAngus Kong 888097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 898097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Copy constructor. 908097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 918097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Size(Size other) { 928097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (other == null) { 938097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(0, 0); 948097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 958097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(other.width(), other.height()); 968097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 978097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 988097973089420749dcd1ab4974a629c2466b31ccAngus Kong 998097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1008097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor from a source {@link android.hardware.Camera.Size}. 1018097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 1028097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param other The source size. 1038097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1048097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Size(Camera.Size other) { 1058097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (other == null) { 1068097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(0, 0); 1078097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 1088097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(other.width, other.height); 1098097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1108097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1118097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1128097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1138097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor from a source {@link android.graphics.Point}. 1148097973089420749dcd1ab4974a629c2466b31ccAngus Kong * 1158097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param p The source size. 1168097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1178097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Size(Point p) { 1188097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (p == null) { 1198097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(0, 0); 1208097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 1218097973089420749dcd1ab4974a629c2466b31ccAngus Kong val = new Point(p); 1228097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1238097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1248097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1258097973089420749dcd1ab4974a629c2466b31ccAngus Kong public int width() { 1268097973089420749dcd1ab4974a629c2466b31ccAngus Kong return val.x; 1278097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1288097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1298097973089420749dcd1ab4974a629c2466b31ccAngus Kong public int height() { 1308097973089420749dcd1ab4974a629c2466b31ccAngus Kong return val.y; 1318097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1328097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1338097973089420749dcd1ab4974a629c2466b31ccAngus Kong @Override 1348097973089420749dcd1ab4974a629c2466b31ccAngus Kong public boolean equals(Object o) { 1358097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (o instanceof Size) { 1368097973089420749dcd1ab4974a629c2466b31ccAngus Kong Size other = (Size) o; 1378097973089420749dcd1ab4974a629c2466b31ccAngus Kong return val.equals(other.val); 1388097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1398097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 1408097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1418097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1428097973089420749dcd1ab4974a629c2466b31ccAngus Kong @Override 1438097973089420749dcd1ab4974a629c2466b31ccAngus Kong public int hashCode() { 1448097973089420749dcd1ab4974a629c2466b31ccAngus Kong return val.hashCode(); 1458097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1468097973089420749dcd1ab4974a629c2466b31ccAngus Kong 1478097973089420749dcd1ab4974a629c2466b31ccAngus Kong @Override 1488097973089420749dcd1ab4974a629c2466b31ccAngus Kong public String toString() { 1498097973089420749dcd1ab4974a629c2466b31ccAngus Kong return "Size: (" + this.width() + " x " + this.height() + ")"; 1508097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 1518097973089420749dcd1ab4974a629c2466b31ccAngus Kong} 152