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