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