1d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/*
2d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
4d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * you may not use this file except in compliance with the License.
6d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * You may obtain a copy of the License at
7d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
8d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
10d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * See the License for the specific language governing permissions and
14d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * limitations under the License.
15d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
16d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
17d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
18d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Fake vendor extensions for testing
19d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
20d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
21d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifndef TESTING_CAMERA_METADATA_FAKEVENDOR_H
22d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define TESTING_CAMERA_METADATA_FAKEVENDOR_H
23d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
24d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaenum vendor_extension_section {
25d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR = VENDOR_SECTION,
26d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_INFO,
27d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_COLORCORRECTION,
28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SCALER,
29d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SECTION_END
30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst int FAKEVENDOR_SECTION_COUNT = FAKEVENDOR_SECTION_END - VENDOR_SECTION;
33d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaenum vendor_extension_section_ranges {
35d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_START          = FAKEVENDOR_SENSOR << 16,
36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_I_START        = FAKEVENDOR_SENSOR_INFO << 16,
37d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_COLORCORRECTION_START = FAKEVENDOR_COLORCORRECTION << 16,
38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SCALER_START          = FAKEVENDOR_SCALER << 16
39d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
40d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
41d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaenum vendor_extension_tags {
42d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_SUPERMODE = FAKEVENDOR_SENSOR_START,
43d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_DOUBLE_EXPOSURE,
44d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_END,
45d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
46d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_AVAILABLE_SUPERMODES = FAKEVENDOR_SENSOR_I_START,
47d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SENSOR_I_END,
48d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_COLORCORRECTION_3DLUT_MODE = FAKEVENDOR_COLORCORRECTION_START,
50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_COLORCORRECTION_3DLUT_TABLES,
51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_COLORCORRECTION_END,
52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SCALER_DOWNSCALE_MODE = FAKEVENDOR_SCALER_START,
54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SCALER_DOWNSCALE_COEFF,
55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    FAKEVENDOR_SCALER_END
56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct vendor_tag_info {
59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const char *tag_name;
60d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t     tag_type;
61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} vendor_tag_info_t;
62d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *fakevendor_section_names[FAKEVENDOR_SECTION_COUNT] = {
64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    "com.fakevendor.sensor",
65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    "com.fakevendor.sensor.info",
66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    "com.fakevendor.colorCorrection",
67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    "com.fakevendor.scaler"
68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaunsigned int fakevendor_section_bounds[FAKEVENDOR_SECTION_COUNT][2] = {
71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { FAKEVENDOR_SENSOR_START,          FAKEVENDOR_SENSOR_END },
72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { FAKEVENDOR_SENSOR_I_START,        FAKEVENDOR_SENSOR_I_END },
73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { FAKEVENDOR_COLORCORRECTION_START, FAKEVENDOR_COLORCORRECTION_END },
74d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { FAKEVENDOR_SCALER_START,          FAKEVENDOR_SCALER_END}
75d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
76d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
77d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavendor_tag_info_t fakevendor_sensor[FAKEVENDOR_SENSOR_END -
78d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        FAKEVENDOR_SENSOR_START] = {
79d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "superMode",       TYPE_BYTE },
80d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "doubleExposure",  TYPE_INT64 }
81d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
82d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
83d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavendor_tag_info_t fakevendor_sensor_info[FAKEVENDOR_SENSOR_I_END -
84d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        FAKEVENDOR_SENSOR_I_START] = {
85d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "availableSuperModes",   TYPE_BYTE }
86d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
87d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
88d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavendor_tag_info_t fakevendor_color_correction[FAKEVENDOR_COLORCORRECTION_END -
89d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        FAKEVENDOR_COLORCORRECTION_START] = {
90d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "3dLutMode",   TYPE_BYTE },
91d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "3dLutTables", TYPE_FLOAT }
92d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
93d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
94d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavendor_tag_info_t fakevendor_scaler[FAKEVENDOR_SCALER_END -
95d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        FAKEVENDOR_SCALER_START] = {
96d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "downscaleMode",  TYPE_BYTE },
97d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    { "downscaleCoefficients", TYPE_FLOAT }
98d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
99d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
100d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavendor_tag_info_t *fakevendor_tag_info[FAKEVENDOR_SECTION_COUNT] = {
101d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    fakevendor_sensor,
102d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    fakevendor_sensor_info,
103d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    fakevendor_color_correction,
104d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    fakevendor_scaler
105d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
106d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
10794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaconst char *get_fakevendor_section_name(const vendor_tag_query_ops_t *v,
10894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
10994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaconst char *get_fakevendor_tag_name(const vendor_tag_query_ops_t *v,
11094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
11194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint get_fakevendor_tag_type(const vendor_tag_query_ops_t *v,
11294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
11394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala
11494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalastatic const vendor_tag_query_ops_t fakevendor_query_ops = {
11594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    get_fakevendor_section_name,
11694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    get_fakevendor_tag_name,
11794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    get_fakevendor_tag_type
11894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala};
11994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala
12094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaconst char *get_fakevendor_section_name(const vendor_tag_query_ops_t *v,
12194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag) {
12294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    if (v != &fakevendor_query_ops) return NULL;
123d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int tag_section = (tag >> 16) - VENDOR_SECTION;
124d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    if (tag_section < 0 ||
125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            tag_section >= FAKEVENDOR_SECTION_COUNT) return NULL;
126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    return fakevendor_section_names[tag_section];
128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
13094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaconst char *get_fakevendor_tag_name(const vendor_tag_query_ops_t *v,
13194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag) {
13294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    if (v != &fakevendor_query_ops) return NULL;
133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int tag_section = (tag >> 16) - VENDOR_SECTION;
134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    if (tag_section < 0
135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            || tag_section >= FAKEVENDOR_SECTION_COUNT
136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            || tag >= fakevendor_section_bounds[tag_section][1]) return NULL;
137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int tag_index = tag & 0xFFFF;
138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    return fakevendor_tag_info[tag_section][tag_index].tag_name;
139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
14194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint get_fakevendor_tag_type(const vendor_tag_query_ops_t *v,
14294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag) {
14394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    if (v != &fakevendor_query_ops) return -1;
144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int tag_section = (tag >> 16) - VENDOR_SECTION;
145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    if (tag_section < 0
146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            || tag_section >= FAKEVENDOR_SECTION_COUNT
147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            || tag >= fakevendor_section_bounds[tag_section][1]) return -1;
148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int tag_index = tag & 0xFFFF;
149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    return fakevendor_tag_info[tag_section][tag_index].tag_type;
150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
154