16a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams/*
26a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Copyright (C) 2012 The Android Open Source Project
36a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams *
46a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
56a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * you may not use this file except in compliance with the License.
66a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * You may obtain a copy of the License at
76a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams *
86a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
96a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams *
106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * Unless required by applicable law or agreed to in writing, software
116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * See the License for the specific language governing permissions and
146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams * limitations under the License.
156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams */
166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samspackage com.android.rs.image2;
186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.app.Activity;
206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.view.View;
216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samsimport android.util.Log;
226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Samspublic class IPTestList {
246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    private final String TAG = "Img";
256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    public final String RESULT_FILE = "image_processing_result.csv";
266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    public static final int FULL_FP = 0;
286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    public static final int RELAXED_FP = 1;
296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    public static final int INTRINSIC = 2;
306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    /**
326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams     * Define enum type for test names
336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams     */
346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    public enum TestName {
356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        LEVELS_VEC3_RELAXED ("Levels Vec3 Relaxed", RELAXED_FP, 61.1f),
366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        LEVELS_VEC4_RELAXED ("Levels Vec4 Relaxed", RELAXED_FP, 44.6f),
376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        LEVELS_VEC3_FULL ("Levels Vec3 Full", FULL_FP, 61.9f),
386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        LEVELS_VEC4_FULL ("Levels Vec4 Full", FULL_FP, 73.f),
396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        BLUR_RADIUS_25 ("Blur radius 25", RELAXED_FP, 1103.f),
406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSIC_BLUR_RADIUS_25 ("Intrinsic Blur radius 25", INTRINSIC, 176.f),
416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        GREYSCALE ("Greyscale", RELAXED_FP, 43.7f),
426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        GRAIN ("Grain", RELAXED_FP, 147.4f),
436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        FISHEYE_FULL ("Fisheye Full", FULL_FP, 192.f),
446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        FISHEYE_RELAXED ("Fisheye Relaxed", RELAXED_FP, 181.f),
456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        FISHEYE_APPROXIMATE_FULL ("Fisheye Approximate Full", FULL_FP, 193.f),
466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        FISHEYE_APPROXIMATE_RELAXED ("Fisheye Approximate Relaxed", RELAXED_FP, 183.f),
476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        VIGNETTE_FULL ("Vignette Full", FULL_FP, 101.f),
486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        VIGNETTE_RELAXED ("Vignette Relaxed", RELAXED_FP, 116.f),
496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        VIGNETTE_APPROXIMATE_FULL ("Vignette Approximate Full", FULL_FP, 85.1f),
506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        VIGNETTE_APPROXIMATE_RELAXED ("Vignette Approximate Relaxed", RELAXED_FP, 96.7f),
516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        GROUP_TEST_EMULATED ("Group Test (emulated)", INTRINSIC, 51.7f),
526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        GROUP_TEST_NATIVE ("Group Test (native)", INTRINSIC, 52.9f),
536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        CONVOLVE_3X3 ("Convolve 3x3", RELAXED_FP, 74.2f),
546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_CONVOLVE_3X3 ("Intrinsics Convolve 3x3", INTRINSIC, 33.3f),
556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        COLOR_MATRIX ("ColorMatrix", RELAXED_FP, 33.8f),
566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_COLOR_MATRIX ("Intrinsics ColorMatrix", INTRINSIC, 21.3f),
576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_COLOR_MATRIX_GREY ("Intrinsics ColorMatrix Grey", INTRINSIC, 21.4f),
586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        COPY ("Copy", RELAXED_FP, 21.4f),
596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        CROSS_PROCESS_USING_LUT ("CrossProcess (using LUT)", INTRINSIC, 23.1f),
606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        CONVOLVE_5X5 ("Convolve 5x5", RELAXED_FP, 236.f),
616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_CONVOLVE_5X5 ("Intrinsics Convolve 5x5", INTRINSIC, 39.6f),
626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        MANDELBROT_FLOAT ("Mandelbrot (fp32)", FULL_FP, 117.f),
636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        MANDELBROT_DOUBLE ("Mandelbrot (fp64)", FULL_FP, 136.f),
646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_BLEND ("Intrinsics Blend", INTRINSIC, 105.f),
656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        INTRINSICS_BLUR_25G ("Intrinsics Blur 25 uchar", INTRINSIC, 37.8f),
666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        VIBRANCE ("Vibrance", RELAXED_FP, 103.f),
676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        BW_FILTER ("BW Filter", RELAXED_FP, 86.f),
686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        SHADOWS ("Shadows", RELAXED_FP, 130.f),
696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        CONTRAST ("Contrast", RELAXED_FP, 45.4f),
706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        EXPOSURE ("Exposure", RELAXED_FP, 73.4f),
716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        WHITE_BALANCE ("White Balance", RELAXED_FP, 138.2f),
726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        COLOR_CUBE ("Color Cube", RELAXED_FP, 83.9f),
736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        COLOR_CUBE_3D_INTRINSIC ("Color Cube (3D LUT intrinsic)", INTRINSIC, 34.7f),
746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        ARTISTIC1 ("Artistic 1", RELAXED_FP, 140.f),
756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        RESIZE_BI_SCRIPT ("Resize BiCubic Script", RELAXED_FP, 253.f),
766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        RESIZE_BI_INTRINSIC ("Resize BiCubic Intrinsic", INTRINSIC, 255.f),
776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        POSTERIZE_INVOKE ("Posterize with invoke", RELAXED_FP, 215.f),
786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        POSTERIZE_SET ("Posterize with set", INTRINSIC, 221.f);
796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        private final String name;
826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        public final int group;
836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        public final float baseline;
846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        private TestName(String s, int g, float base) {
866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            name = s;
876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            group = g;
886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            baseline = base;
896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        }
906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        private TestName(String s, int g) {
916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            name = s;
926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            group = g;
936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            baseline = 1.f;
946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        }
956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        // return quoted string as displayed test name
976a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        public String toString() {
986a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return name;
996a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        }
1006a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    }
1016a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
1026a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    static TestBase newTest(TestName testName) {
1036a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        switch(testName) {
1046a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case LEVELS_VEC3_RELAXED:
1056a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new LevelsV4(false, false);
1066a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case LEVELS_VEC4_RELAXED:
1076a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new LevelsV4(false, true);
1086a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case LEVELS_VEC3_FULL:
1096a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new LevelsV4(true, false);
1106a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case LEVELS_VEC4_FULL:
1116a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new LevelsV4(true, true);
1126a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case BLUR_RADIUS_25:
1136a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Blur25(false);
1146a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSIC_BLUR_RADIUS_25:
1156a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Blur25(true);
1166a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case GREYSCALE:
1176a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Greyscale();
1186a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case GRAIN:
1196a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Grain();
1206a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case FISHEYE_FULL:
1216a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Fisheye(false, false);
1226a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case FISHEYE_RELAXED:
1236a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Fisheye(false, true);
1246a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case FISHEYE_APPROXIMATE_FULL:
1256a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Fisheye(true, false);
1266a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case FISHEYE_APPROXIMATE_RELAXED:
1276a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Fisheye(true, true);
1286a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case VIGNETTE_FULL:
1296a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Vignette(false, false);
1306a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case VIGNETTE_RELAXED:
1316a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Vignette(false, true);
1326a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case VIGNETTE_APPROXIMATE_FULL:
1336a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Vignette(true, false);
1346a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case VIGNETTE_APPROXIMATE_RELAXED:
1356a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Vignette(true, true);
1366a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case GROUP_TEST_EMULATED:
1376a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new GroupTest(false);
1386a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case GROUP_TEST_NATIVE:
1396a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new GroupTest(true);
1406a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case CONVOLVE_3X3:
1416a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Convolve3x3(false);
1426a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_CONVOLVE_3X3:
1436a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Convolve3x3(true);
1446a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case COLOR_MATRIX:
1456a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new ColorMatrix(false, false);
1466a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_COLOR_MATRIX:
1476a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new ColorMatrix(true, false);
1486a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_COLOR_MATRIX_GREY:
1496a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new ColorMatrix(true, true);
1506a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case COPY:
1516a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Copy();
1526a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case CROSS_PROCESS_USING_LUT:
1536a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new CrossProcess();
1546a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case CONVOLVE_5X5:
1556a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Convolve5x5(false);
1566a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_CONVOLVE_5X5:
1576a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Convolve5x5(true);
1586a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case MANDELBROT_FLOAT:
1596a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Mandelbrot(false);
1606a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case MANDELBROT_DOUBLE:
1616a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Mandelbrot(true);
1626a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_BLEND:
1636a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Blend();
1646a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case INTRINSICS_BLUR_25G:
1656a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Blur25G();
1666a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case VIBRANCE:
1676a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Vibrance();
1686a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case BW_FILTER:
1696a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new BWFilter();
1706a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case SHADOWS:
1716a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Shadows();
1726a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case CONTRAST:
1736a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Contrast();
1746a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case EXPOSURE:
1756a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Exposure();
1766a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case WHITE_BALANCE:
1776a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new WhiteBalance();
1786a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case COLOR_CUBE:
1796a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new ColorCube(false);
1806a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case COLOR_CUBE_3D_INTRINSIC:
1816a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new ColorCube(true);
1826a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case ARTISTIC1:
1836a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Artistic1();
1846a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case RESIZE_BI_SCRIPT:
1856a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Resize(false);
1866a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case RESIZE_BI_INTRINSIC:
1876a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Resize(true);
1886a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case POSTERIZE_INVOKE:
1896a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Posterize(true);
1906a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        case POSTERIZE_SET:
1916a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams            return new Posterize(false);
1926a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        }
1936a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams        return null;
1946a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams    }
1956a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams}
1966a804605b99cab4ffa3cc55c691338fd4a5396eaJason Sams
197