hwc_color_manager.h revision fa3d1d389b731aa86b376da4d8d23cfb0039c81d
12a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber/* Copyright (c) 2015-2016, The Linux Foundataion. All rights reserved. 22a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* 32a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* Redistribution and use in source and binary forms, with or without 42a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* modification, are permitted provided that the following conditions are 52a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* met: 62a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* * Redistributions of source code must retain the above copyright 72a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* notice, this list of conditions and the following disclaimer. 82a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* * Redistributions in binary form must reproduce the above 92a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* copyright notice, this list of conditions and the following 102a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* disclaimer in the documentation and/or other materials provided 112a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* with the distribution. 122a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* * Neither the name of The Linux Foundation nor the names of its 132a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* contributors may be used to endorse or promote products derived 142a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* from this software without specific prior written permission. 152a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* 162a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 172a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 182a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 192a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 202a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 212a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 222a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23d3eaeefb1bac68bc1fee91b794be2c2c3bea6d94Andreas Huber* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 241472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25d3eaeefb1bac68bc1fee91b794be2c2c3bea6d94Andreas Huber* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 262a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber* 282a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber*/ 292a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 302a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#ifndef __HWC_COLOR_MANAGER_H__ 312a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#define __HWC_COLOR_MANAGER_H__ 322a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 332a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#include <stdlib.h> 342a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#include <binder/Parcel.h> 352a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#include <powermanager/IPowerManager.h> 365343bc86119430e55fe43e132242291a74164f27Chong Zhang#include <binder/BinderService.h> 375343bc86119430e55fe43e132242291a74164f27Chong Zhang#include <core/sdm_types.h> 381472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber#include <utils/locker.h> 39f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 40f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Hubernamespace sdm { 41f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 42f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber// This macro defines name for display APIs interface wrapper library. 43f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber// This macro shall be used to load library using dlopen(). 44f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber#define DISPLAY_API_INTERFACE_LIBRARY_NAME "libsdm-disp-apis.so" 45f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 46f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber// This macro defines variable name of display color APIs function tables 472a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber// This macro shall be used to specify name of the variable in dlsym(). 482a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#define DISPLAY_API_FUNC_TABLES "display_color_apis_ftables" 49f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber#define QDCM_DIAG_CLIENT_LIBRARY_NAME "libsdm-diag.so" 50f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber#define INIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagInit" 51f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber#define DEINIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagDeInit" 52f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 53f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Hubertypedef int (*QDCMDiagInit)(void *ftables); 54026d520295b52d136a6962a05882a696fe620725Chong Zhang 55026d520295b52d136a6962a05882a696fe620725Chong Zhangtypedef int (*QDCMDiagDeInit)(void); 56f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 57f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber// Class to encapsulte all details of managing QDCM operating mode. 58f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huberclass HWCQDCMModeManager { 59f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber public: 60f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber static const uint32_t kSocketCMDMaxLength = 4096; 61026d520295b52d136a6962a05882a696fe620725Chong Zhang static const uint32_t kFullWakeLock = 0x0000001a; 62f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber static const uint32_t kAcquireCauseWakeup = 0x10000000; 63f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber static const uint32_t kONAfterRelease = 0x20000000; 64026d520295b52d136a6962a05882a696fe620725Chong Zhang enum ActiveFeatureID { 65f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber kCABLFeature, 66f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber kADFeature, 672a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber kSVIFeature, 682a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber kMaxNumActiveFeature, 692a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber }; 702a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 712a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber struct ActiveFeatureCMD { 721472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber const char *cmd_on = NULL; 73f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const char *cmd_off = NULL; 742a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber const char *cmd_query_status = NULL; 751472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber const char *running = NULL; 76f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber ActiveFeatureCMD(const char *arg1, const char *arg2, const char *arg3, const char *arg4) 772a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber : cmd_on(arg1), cmd_off(arg2), cmd_query_status(arg3), running(arg4) {} 784fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang }; 794fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang 804fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang static const ActiveFeatureCMD kActiveFeatureCMD[kMaxNumActiveFeature]; 812d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang 822d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang public: 832d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang static HWCQDCMModeManager *CreateQDCMModeMgr(); 844fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang ~HWCQDCMModeManager(); 854fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang int EnableQDCMMode(bool enable, HWCDisplay *hwc_display); 864fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang 874fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang protected: 88d36af484a8dd3bbaf7ed7de31852c9f802243392Hangyu Kuang bool SendSocketCmd(); 89d36af484a8dd3bbaf7ed7de31852c9f802243392Hangyu Kuang int AcquireAndroidWakeLock(bool enable); 901472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber int EnableActiveFeatures(bool enable); 91f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int EnableActiveFeatures(bool enable, const ActiveFeatureCMD &cmds, bool *was_running); 922a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 931472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber private: 94f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber bool cabl_was_running_ = false; 951c8ed2e906576fd8d7fa03f577bdec518cbe13d7Andreas Huber int socket_fd_ = -1; 96cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan android::sp<android::IBinder> wakelock_token_ = NULL; 97cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan android::sp<android::IPowerManager> power_mgr_ = NULL; 98cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan uint32_t entry_timeout_ = 0; 992a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber static const char *const kSocketName; 1002a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber static const char *const kTagName; 1012a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber static const char *const kPackageName; 1022a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber}; 1032a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 1042a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber// Class to encapsulte all HWC/OS specific behaviours for ColorManager. 1052a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huberclass HWCColorManager { 106 public: 107 static const int kNumSolidFillLayers = 2; 108 static HWCColorManager *CreateColorManager(); 109 static int CreatePayloadFromParcel(const android::Parcel &in, uint32_t *disp_id, 110 PPDisplayAPIPayload *sink); 111 static void MarshallStructIntoParcel(const PPDisplayAPIPayload &data, 112 android::Parcel *out_parcel); 113 114 ~HWCColorManager(); 115 void DestroyColorManager(); 116 int EnableQDCMMode(bool enable, HWCDisplay *hwc_display); 117 int SetSolidFill(const void *params, bool enable, HWCDisplay *hwc_display); 118 int SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display); 119 int SetDetailedEnhancer(void *params, HWCDisplay *hwc_display); 120 121 protected: 122 int CreateSolidFillLayers(HWCDisplay *hwc_display); 123 void DestroySolidFillLayers(); 124 static uint32_t Get8BitsARGBColorValue(const PPColorFillParams ¶ms); 125 126 private: 127 DynLib color_apis_lib_; 128 DynLib diag_client_lib_; 129 void *color_apis_ = NULL; 130 QDCMDiagInit qdcm_diag_init_ = NULL; 131 QDCMDiagDeInit qdcm_diag_deinit_ = NULL; 132 HWCQDCMModeManager *qdcm_mode_mgr_ = NULL; 133 134 PPColorFillParams solid_fill_params_; 135 HWCBufferAllocator *buffer_allocator_ = NULL; 136 BufferInfo buffer_info; 137 Locker locker_; 138}; 139 140} // namespace sdm 141 142#endif // __HWC_COLOR_MANAGER_H__ 143