Home | History | Annotate | Download | only in include
      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>
     26 using namespace android;
     27 
     28 typedef 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 
     35 typedef enum {
     36     VPP_COMMON_ON   = 1,        // VPP is on
     37     VPP_FRC_ON      = 1 << 1,   // FRC is on
     38 } VPP_SETTING_STATUS;
     39 
     40 typedef struct _ISVParameter {
     41     char name[MAX_STRING_LEN];
     42     float value;
     43 } ISVParameter;
     44 
     45 typedef 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 
     54 typedef struct _ISVFRCRate {
     55     uint32_t input_fps;
     56     FRC_RATE rate;
     57 } ISVFRCRate;
     58 
     59 //FIXME: need align to ProcFilterType
     60 typedef 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 
     74 class ISVProfile : public RefBase
     75 {
     76 public:
     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 
     94 private:
     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 
    131 private:
    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