13189c037886fda47be73da9885e6760df50efd71Jason Noguchi/*
23189c037886fda47be73da9885e6760df50efd71Jason Noguchi * Copyright (C) 2010 The Android Open Source Project
33189c037886fda47be73da9885e6760df50efd71Jason Noguchi *
43189c037886fda47be73da9885e6760df50efd71Jason Noguchi * Licensed under the Apache License, Version 2.0 (the "License");
53189c037886fda47be73da9885e6760df50efd71Jason Noguchi * you may not use this file except in compliance with the License.
63189c037886fda47be73da9885e6760df50efd71Jason Noguchi * You may obtain a copy of the License at
73189c037886fda47be73da9885e6760df50efd71Jason Noguchi *
83189c037886fda47be73da9885e6760df50efd71Jason Noguchi *      http://www.apache.org/licenses/LICENSE-2.0
93189c037886fda47be73da9885e6760df50efd71Jason Noguchi *
103189c037886fda47be73da9885e6760df50efd71Jason Noguchi * Unless required by applicable law or agreed to in writing, software
113189c037886fda47be73da9885e6760df50efd71Jason Noguchi * distributed under the License is distributed on an "AS IS" BASIS,
123189c037886fda47be73da9885e6760df50efd71Jason Noguchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133189c037886fda47be73da9885e6760df50efd71Jason Noguchi * See the License for the specific language governing permissions and
143189c037886fda47be73da9885e6760df50efd71Jason Noguchi * limitations under the License.
153189c037886fda47be73da9885e6760df50efd71Jason Noguchi */
163189c037886fda47be73da9885e6760df50efd71Jason Noguchi
173189c037886fda47be73da9885e6760df50efd71Jason Noguchipackage com.android.camera.unittest;
183189c037886fda47be73da9885e6760df50efd71Jason Noguchi
193189c037886fda47be73da9885e6760df50efd71Jason Noguchiimport com.android.camera.util.CameraUtil;
203189c037886fda47be73da9885e6760df50efd71Jason Noguchi
213189c037886fda47be73da9885e6760df50efd71Jason Noguchiimport android.graphics.Matrix;
223189c037886fda47be73da9885e6760df50efd71Jason Noguchiimport android.test.suitebuilder.annotation.SmallTest;
233189c037886fda47be73da9885e6760df50efd71Jason Noguchi
243189c037886fda47be73da9885e6760df50efd71Jason Noguchiimport junit.framework.TestCase;
253189c037886fda47be73da9885e6760df50efd71Jason Noguchi
263189c037886fda47be73da9885e6760df50efd71Jason Noguchi@SmallTest
273189c037886fda47be73da9885e6760df50efd71Jason Noguchipublic class CameraUnitTest extends TestCase {
283189c037886fda47be73da9885e6760df50efd71Jason Noguchi    public void testRoundOrientation() {
293189c037886fda47be73da9885e6760df50efd71Jason Noguchi        int h = CameraUtil.ORIENTATION_HYSTERESIS;
303189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(0, 0));
313189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(359, 0));
323189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(0 + 44 + h, 0));
333189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(0 + 45 + h, 0));
343189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(360 - 44 - h, 0));
353189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(360 - 45 - h, 0));
363189c037886fda47be73da9885e6760df50efd71Jason Noguchi
373189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90, 90));
383189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90 + 44 + h, 90));
393189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(90 + 45 + h, 90));
403189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90 - 44 - h, 90));
413189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(90 - 45 - h, 90));
423189c037886fda47be73da9885e6760df50efd71Jason Noguchi
433189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180, 180));
443189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180 + 44 + h, 180));
453189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(180 + 45 + h, 180));
463189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180 - 44 - h, 180));
473189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(180 - 45 - h, 180));
483189c037886fda47be73da9885e6760df50efd71Jason Noguchi
493189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270, 270));
503189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270 + 44 + h, 270));
513189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(270 + 45 + h, 270));
523189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270 - 44 - h, 270));
533189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(270 - 45 - h, 270));
543189c037886fda47be73da9885e6760df50efd71Jason Noguchi
553189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90, 0));
563189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180, 0));
573189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270, 0));
583189c037886fda47be73da9885e6760df50efd71Jason Noguchi
593189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(0, 90));
603189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180, 90));
613189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270, 90));
623189c037886fda47be73da9885e6760df50efd71Jason Noguchi
633189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(0, 180));
643189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90, 180));
653189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(270, CameraUtil.roundOrientation(270, 180));
663189c037886fda47be73da9885e6760df50efd71Jason Noguchi
673189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(0, CameraUtil.roundOrientation(0, 270));
683189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(90, CameraUtil.roundOrientation(90, 270));
693189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(180, CameraUtil.roundOrientation(180, 270));
703189c037886fda47be73da9885e6760df50efd71Jason Noguchi    }
713189c037886fda47be73da9885e6760df50efd71Jason Noguchi
723189c037886fda47be73da9885e6760df50efd71Jason Noguchi    public void testPrepareMatrix() {
733189c037886fda47be73da9885e6760df50efd71Jason Noguchi        Matrix matrix = new Matrix();
743189c037886fda47be73da9885e6760df50efd71Jason Noguchi        float[] points;
753189c037886fda47be73da9885e6760df50efd71Jason Noguchi        int[] expected;
763189c037886fda47be73da9885e6760df50efd71Jason Noguchi
773189c037886fda47be73da9885e6760df50efd71Jason Noguchi        CameraUtil.prepareMatrix(matrix, false, 0, 800, 480);
783189c037886fda47be73da9885e6760df50efd71Jason Noguchi        points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
793189c037886fda47be73da9885e6760df50efd71Jason Noguchi        expected = new int[] {0, 0, 400, 240, 800, 480, 400, 480, 100, 300};
803189c037886fda47be73da9885e6760df50efd71Jason Noguchi        matrix.mapPoints(points);
813189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(expected, points);
823189c037886fda47be73da9885e6760df50efd71Jason Noguchi
833189c037886fda47be73da9885e6760df50efd71Jason Noguchi        CameraUtil.prepareMatrix(matrix, false, 90, 800, 480);
843189c037886fda47be73da9885e6760df50efd71Jason Noguchi        points = new float[] {-1000, -1000,   0,   0, 1000, 1000, 0, 1000, -750, 250};
853189c037886fda47be73da9885e6760df50efd71Jason Noguchi        expected = new int[] {800, 0, 400, 240, 0, 480, 0, 240, 300, 60};
863189c037886fda47be73da9885e6760df50efd71Jason Noguchi        matrix.mapPoints(points);
873189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(expected, points);
883189c037886fda47be73da9885e6760df50efd71Jason Noguchi
893189c037886fda47be73da9885e6760df50efd71Jason Noguchi        CameraUtil.prepareMatrix(matrix, false, 180, 800, 480);
903189c037886fda47be73da9885e6760df50efd71Jason Noguchi        points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
913189c037886fda47be73da9885e6760df50efd71Jason Noguchi        expected = new int[] {800, 480, 400, 240, 0, 0, 400, 0, 700, 180};
923189c037886fda47be73da9885e6760df50efd71Jason Noguchi        matrix.mapPoints(points);
933189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(expected, points);
943189c037886fda47be73da9885e6760df50efd71Jason Noguchi
953189c037886fda47be73da9885e6760df50efd71Jason Noguchi        CameraUtil.prepareMatrix(matrix, true, 180, 800, 480);
963189c037886fda47be73da9885e6760df50efd71Jason Noguchi        points = new float[] {-1000, -1000, 0, 0, 1000, 1000, 0, 1000, -750, 250};
973189c037886fda47be73da9885e6760df50efd71Jason Noguchi        expected = new int[] {0, 480, 400, 240, 800, 0, 400, 0, 100, 180};
983189c037886fda47be73da9885e6760df50efd71Jason Noguchi        matrix.mapPoints(points);
993189c037886fda47be73da9885e6760df50efd71Jason Noguchi        assertEquals(expected, points);
1003189c037886fda47be73da9885e6760df50efd71Jason Noguchi    }
1013189c037886fda47be73da9885e6760df50efd71Jason Noguchi
1023189c037886fda47be73da9885e6760df50efd71Jason Noguchi    private void assertEquals(int expected[], float[] actual) {
1033189c037886fda47be73da9885e6760df50efd71Jason Noguchi        for (int i = 0; i < expected.length; i++) {
1043189c037886fda47be73da9885e6760df50efd71Jason Noguchi            assertEquals("Array index " + i + " mismatch", expected[i], Math.round(actual[i]));
1053189c037886fda47be73da9885e6760df50efd71Jason Noguchi        }
1063189c037886fda47be73da9885e6760df50efd71Jason Noguchi    }
1073189c037886fda47be73da9885e6760df50efd71Jason Noguchi}
108