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 } Config_t;
76 
77 struct configStr {
78     Config_t config;
79     const char * name;
80 };
81 
82 static const struct configStr configStrMap[] = {
83     {vidc_dec_log_in, "vidc_dec_log_in"},
84     {vidc_dec_log_out, "vidc_dec_log_out"},
85     {vidc_dec_hfr_fps, "vidc_dec_hfr_fps"},
86     {vidc_enc_log_in, "vidc_enc_log_in"},
87     {vidc_enc_log_out, "vidc_enc_log_out"},
88     {vidc_dec_sec_prefetch_size_internal,"vidc_dec_sec_prefetch_size_internal"},
89     {vidc_dec_sec_prefetch_size_output,"vidc_dec_sec_prefetch_size_output"},
90     {vidc_dec_conceal_color_8bit, "vidc_dec_conceal_color_8bit"},
91     {vidc_dec_conceal_color_10bit, "vidc_dec_conceal_color_10bit"},
92     {vidc_enc_csc_custom_matrix, "vidc_enc_csc_custom_matrix"},
93     {vidc_dec_arb_mode_override, "vidc_dec_arb_mode_override"},
94     {vidc_perf_control_enable, "vidc_perf_control_enable"},
95     {vidc_enc_linear_color_format, "vidc_enc_linear_color_format"},
96 };
97 
98 class Config {
99     private:
100         Config();
101         Config& operator=(Config const&) {
102             return *mInstance;
103         }
104         static Config* getInstance();
105 
106         ConfigMap mConfigMap;
107         static Config* mInstance;
108 
109 #ifdef ENABLE_CONFIGSTORE
110         android::sp<ICapabilityConfigStore> mConfigStore;
111 #endif
112 
113     public:
114         static ConfigError_t getInt32(Config_t config, int32_t *value,
115                 const int32_t defaultValue);
116 
117         static bool isConfigStoreEnabled();
118         static ConfigError_t getConfigStoreBool(const char *area,
119                 const char *config, bool &value, const bool defaultValue);
120 };
121 
122 }
123 #ifdef __cplusplus
124 }
125 #endif
126 #endif // __PLATFORM_CONFIG_H__
127