1/*
2 * Copyright (C) 2014 Intel Corporation.  All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17
18#ifndef __ISV_PROFILE_H
19#define __ISV_PROFILE_H
20
21#define MAX_BUF_SIZE (4 * 1024)
22#define MAX_TAB_SIZE (10)
23#define MAX_STRING_LEN (50)
24
25#include <utils/RefBase.h>
26using namespace android;
27
28typedef enum _FRC_RATE {
29    FRC_RATE_1X = 1,
30    FRC_RATE_2X,
31    FRC_RATE_2_5X,
32    FRC_RATE_4X
33} FRC_RATE;
34
35typedef enum {
36    VPP_COMMON_ON   = 1,        // VPP is on
37    VPP_FRC_ON      = 1 << 1,   // FRC is on
38} VPP_SETTING_STATUS;
39
40typedef struct _ISVParameter {
41    char name[MAX_STRING_LEN];
42    float value;
43} ISVParameter;
44
45typedef struct _ISVConfig {
46    bool enabled;
47    uint32_t minResolution;
48    uint32_t maxResolution;
49    //bool isOn;
50    ISVParameter paraTables[MAX_TAB_SIZE];
51    uint32_t paraSize;
52} ISVConfig;
53
54typedef struct _ISVFRCRate {
55    uint32_t input_fps;
56    FRC_RATE rate;
57} ISVFRCRate;
58
59//FIXME: need align to ProcFilterType
60typedef enum _FilterType {
61    FilterNone                          = 0x00000001,
62    FilterNoiseReduction                = 0x00000002,
63    FilterDeinterlacing                 = 0x00000004,
64    FilterSharpening                    = 0x00000008,
65    FilterColorBalance                  = 0x00000010,
66    FilterDeblocking                    = 0x00000020,
67    FilterFrameRateConversion           = 0x00000040,
68    FilterSkinToneEnhancement           = 0x00000080,
69    FilterTotalColorCorrection          = 0x00000100,
70    FilterNonLinearAnamorphicScaling    = 0x00000200,
71    FilterImageStabilization            = 0x00000400,
72} FilterType;
73
74class ISVProfile : public RefBase
75{
76public:
77    ISVProfile(const uint32_t width, const uint32_t height);
78    ~ISVProfile();
79
80    /* get the global ISV setting status */
81    FRC_RATE getFRCRate(uint32_t inputFps);
82
83    /* get filter config data
84     * the filters' status are saved in uint32_t
85     */
86    uint32_t getFilterStatus();
87
88    /* the global setting for VPP */
89    static bool isVPPOn();
90
91    /* the global setting for FRC */
92    static bool isFRCOn();
93
94private:
95    /* Read the global setting for ISV */
96    static int32_t getGlobalStatus();
97
98    /* Get the config data from XML file */
99    void getDataFromXmlFile(void);
100
101    /* Update the filter status */
102    void updateFilterStatus();
103
104    /* handle the XML file */
105    static void startElement(void *userData, const char *name, const char **atts);
106    static void endElement(void *userData, const char *name);
107    int getFilterID(const char * name);
108    uint32_t getResolution(const char * name);
109    void getConfigData(const char *name, const char **atts);
110    void handleFilterParameter(const char *name, const char **atts);
111    void handleCommonParameter(const char *name, const char **atts);
112
113    /* dump the config data */
114    void dumpConfigData();
115
116    typedef enum _ProcFilterType {
117        ProcFilterNone = 0,
118        ProcFilterNoiseReduction,
119        ProcFilterDeinterlacing,
120        ProcFilterSharpening,
121        ProcFilterColorBalance,
122        ProcFilterDeblocking,
123        ProcFilterFrameRateConversion,
124        ProcFilterSkinToneEnhancement,
125        ProcFilterTotalColorCorrection,
126        ProcFilterNonLinearAnamorphicScaling,
127        ProcFilterImageStabilization,
128        ProcFilterCount
129    } ProcFilterType;
130
131private:
132    uint32_t mWidth;
133    uint32_t mHeight;
134
135    /* The default value of VPP/FRC.
136     * They will be read from config xml file.
137     */
138    int32_t mDefaultVPPStatus;
139    int32_t mDefaultFRCStatus;
140
141    /* the filters' status according to resolution
142     * bit 0  used for ProcFilterNone
143     * bit 1  used for ProcFilterNoiseReduction
144     * ...
145     * bit 10 used for ProcFilterImageStabilization
146     */
147    uint32_t mStatus;
148
149    ISVConfig mConfigs[ProcFilterCount];
150    uint32_t mCurrentFilter; //used by parasing xml file
151    ISVFRCRate mFrcRates[MAX_TAB_SIZE];
152    uint32_t mCurrentFrcTab;
153
154    static const int mBufSize = MAX_BUF_SIZE;
155};
156
157#endif /* __ISV_PROFILE_H */
158