/* // Copyright (c) 2014 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #ifndef HWCOMPOSER_H #define HWCOMPOSER_H #include <EGL/egl.h> #include <hardware/hwcomposer.h> #include <utils/Vector.h> #include <IDisplayDevice.h> #include <BufferManager.h> #include <IDisplayContext.h> #include <common/base/Drm.h> #include <DisplayPlaneManager.h> #include <common/base/DisplayAnalyzer.h> #include <UeventObserver.h> namespace android { namespace intel { class Hwcomposer : public hwc_composer_device_1_t { public: virtual ~Hwcomposer(); public: // callbacks implementation virtual bool prepare(size_t numDisplays, hwc_display_contents_1_t** displays); virtual bool commit(size_t numDisplays, hwc_display_contents_1_t** displays); virtual bool vsyncControl(int disp, int enabled); virtual bool release(); virtual bool dump(char *buff, int buff_len, int *cur_len); virtual void registerProcs(hwc_procs_t const *procs); virtual bool blank(int disp, int blank); virtual bool getDisplayConfigs(int disp, uint32_t *configs, size_t *numConfigs); virtual bool getDisplayAttributes(int disp, uint32_t config, const uint32_t *attributes, int32_t *values); virtual bool compositionComplete(int disp); virtual bool setPowerMode(int disp, int mode); virtual int getActiveConfig(int disp); virtual bool setActiveConfig(int disp, int index); virtual bool setCursorPositionAsync(int disp, int x, int y); // callbacks virtual void vsync(int disp, int64_t timestamp); virtual void hotplug(int disp, bool connected); virtual void invalidate(); virtual bool initCheck() const; virtual bool initialize(); virtual void deinitialize(); public: Drm* getDrm(); DisplayPlaneManager* getPlaneManager(); BufferManager* getBufferManager(); IDisplayContext* getDisplayContext(); DisplayAnalyzer* getDisplayAnalyzer(); IDisplayDevice* getDisplayDevice(int disp); UeventObserver* getUeventObserver(); protected: Hwcomposer(); public: static Hwcomposer& getInstance() { Hwcomposer *instance = sInstance; if (instance == 0) { instance = createHwcomposer(); sInstance = instance; } return *sInstance; } static void releaseInstance() { delete sInstance; sInstance = NULL; } // Need to be implemented static Hwcomposer* createHwcomposer(); protected: virtual DisplayPlaneManager* createDisplayPlaneManager() = 0; virtual BufferManager* createBufferManager() = 0; virtual IDisplayDevice* createDisplayDevice(int disp, DisplayPlaneManager& dpm) = 0; virtual IDisplayContext* createDisplayContext() = 0; protected: hwc_procs_t const *mProcs; Drm *mDrm; DisplayPlaneManager *mPlaneManager; BufferManager *mBufferManager; DisplayAnalyzer *mDisplayAnalyzer; Vector<IDisplayDevice*> mDisplayDevices; IDisplayContext *mDisplayContext; UeventObserver *mUeventObserver; bool mInitialized; private: static Hwcomposer *sInstance; }; } // namespace intel } #endif /*HW_COMPOSER_H*/