1 /*
2  * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *     * Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     * Redistributions in binary form must reproduce the above
10  *       copyright notice, this list of conditions and the following
11  *       disclaimer in the documentation and/or other materials provided
12  *       with the distribution.
13  *     * Neither the name of The Linux Foundation nor the names of its
14  *       contributors may be used to endorse or promote products derived
15  *       from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef __PLATFORM_CONFIG_H__
31 #define __PLATFORM_CONFIG_H__
32 
33 //////////////////////////////////////////////////////////////////////////////
34 //                             Include Files
35 //////////////////////////////////////////////////////////////////////////////
36 #include <string>
37 #include <map>
38 
39 #ifdef ENABLE_CONFIGSTORE
40 #include <vendor/qti/hardware/capabilityconfigstore/1.0/ICapabilityConfigStore.h>
41 #endif
42 
43 #ifdef __cplusplus
44     extern "C" {
45 #endif
46 
47 namespace Platform {
48 
49 typedef std::map<std::string, std::string> ConfigMap;
50 
51 #ifdef ENABLE_CONFIGSTORE
52 using namespace android;
53 using vendor::qti::hardware::capabilityconfigstore::V1_0::ICapabilityConfigStore;
54 #endif
55 
56 typedef enum {
57     OK = 0,
58     FAIL = 1,
59 } ConfigError_t;
60 
61 typedef enum {
62     vidc_dec_log_in = 0,
63     vidc_dec_log_out,
64     vidc_dec_hfr_fps,
65     vidc_enc_log_in,
66     vidc_enc_log_out,
67     vidc_dec_sec_prefetch_size_internal,
68     vidc_dec_sec_prefetch_size_output,
69     vidc_dec_conceal_color_8bit,
70     vidc_dec_conceal_color_10bit,
71     vidc_enc_csc_custom_matrix,
72     vidc_dec_arb_mode_override,
73     vidc_perf_control_enable,
74     vidc_enc_linear_color_format,
75     vidc_enc_bitrate_savings_enable,
76 } Config_t;
77 
78 struct configStr {
79     Config_t config;
80     const char * name;
81 };
82 
83 static const struct configStr configStrMap[] = {
84     {vidc_dec_log_in, "vidc_dec_log_in"},
85     {vidc_dec_log_out, "vidc_dec_log_out"},
86     {vidc_dec_hfr_fps, "vidc_dec_hfr_fps"},
87     {vidc_enc_log_in, "vidc_enc_log_in"},
88     {vidc_enc_log_out, "vidc_enc_log_out"},
89     {vidc_dec_sec_prefetch_size_internal,"vidc_dec_sec_prefetch_size_internal"},
90     {vidc_dec_sec_prefetch_size_output,"vidc_dec_sec_prefetch_size_output"},
91     {vidc_dec_conceal_color_8bit, "vidc_dec_conceal_color_8bit"},
92     {vidc_dec_conceal_color_10bit, "vidc_dec_conceal_color_10bit"},
93     {vidc_enc_csc_custom_matrix, "vidc_enc_csc_custom_matrix"},
94     {vidc_dec_arb_mode_override, "vidc_dec_arb_mode_override"},
95     {vidc_perf_control_enable, "vidc_perf_control_enable"},
96     {vidc_enc_linear_color_format, "vidc_enc_linear_color_format"},
97     {vidc_enc_bitrate_savings_enable, "vidc_enc_bitrate_savings_enable"},
98 };
99 
100 class Config {
101     private:
102         Config();
103         Config& operator=(Config const&) {
104             return *mInstance;
105         }
106         static Config* getInstance();
107 
108         ConfigMap mConfigMap;
109         static Config* mInstance;
110 
111 #ifdef ENABLE_CONFIGSTORE
112         android::sp<ICapabilityConfigStore> mConfigStore;
113 #endif
114 
115     public:
116         static ConfigError_t getInt32(Config_t config, int32_t *value,
117                 const int32_t defaultValue);
118 
119         static bool isConfigStoreEnabled();
120         static ConfigError_t getConfigStoreBool(const char *area,
121                 const char *config, bool &value, const bool defaultValue);
122 };
123 
124 }
125 #ifdef __cplusplus
126 }
127 #endif
128 #endif // __PLATFORM_CONFIG_H__
129