16d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/* 26d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Copyright 2016 The Android Open Source Project 36d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 46d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Licensed under the Apache License, Version 2.0 (the "License"); 56d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * you may not use this file except in compliance with the License. 66d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * You may obtain a copy of the License at 76d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 86d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * http://www.apache.org/licenses/LICENSE-2.0 96d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 106d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Unless required by applicable law or agreed to in writing, software 116d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * distributed under the License is distributed on an "AS IS" BASIS, 126d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * See the License for the specific language governing permissions and 146d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * limitations under the License. 156d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 166d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 176d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimpackage com.android.mediaframeworktest.helpers; 186d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 196d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.content.Context; 206d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.Camera; 216d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CameraCharacteristics; 226d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport android.hardware.camera2.CameraManager; 236d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 246d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimimport java.util.Comparator; 256d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 266d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 276d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Utility class containing helper functions for the Camera framework tests. 286d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 296d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim/** 306d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * (non-Javadoc) 316d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @see android.hardware.cts.helpers.CameraUtils 326d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 336d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kimpublic class CameraUtils { 346d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 356d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 366d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Returns {@code true} if this device only supports {@code LEGACY} mode operation in the 376d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Camera2 API for the given camera ID. 386d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 396d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param context {@link Context} to access the {@link CameraManager} in. 406d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @param cameraId the ID of the camera device to check. 416d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * @return {@code true} if this device only supports {@code LEGACY} mode. 426d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 436d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static boolean isLegacyHAL(Context context, int cameraId) throws Exception { 446d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); 456d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics characteristics = 466d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim manager.getCameraCharacteristics(Integer.toString(cameraId)); 476d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 486d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == 496d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY; 506d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 516d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 526d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 536d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Shared size comparison method used by size comparators. 546d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 556d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>Compares the number of pixels it covers.If two the areas of two sizes are same, compare 566d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * the widths.</p> 576d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 586d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static int compareSizes(int widthA, int heightA, int widthB, int heightB) { 596d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim long left = widthA * (long) heightA; 606d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim long right = widthB * (long) heightB; 616d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim if (left == right) { 626d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim left = widthA; 636d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim right = widthB; 646d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 656d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return (left < right) ? -1 : (left > right ? 1 : 0); 666d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 676d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 686d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim /** 696d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * Size comparator that compares the number of pixels it covers. 706d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * 716d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim * <p>If two the areas of two sizes are same, compare the widths.</p> 726d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim */ 736d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public static class LegacySizeComparator implements Comparator<Camera.Size> { 746d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim @Override 756d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim public int compare(Camera.Size lhs, Camera.Size rhs) { 766d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim return compareSizes(lhs.width, lhs.height, rhs.width, rhs.height); 776d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 786d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim } 796d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim 806d8fd0a23fdc01b9414202c3de9bba41222583e6Hyungtae Tim Kim} 81