/* // 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 <Drm.h> #include <DisplayPlaneManager.h> #include <DisplayAnalyzer.h> #include <VsyncManager.h> #include <MultiDisplayObserver.h> #include <UeventObserver.h> #include <IPlatFactory.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(); VsyncManager* getVsyncManager(); MultiDisplayObserver* getMultiDisplayObserver(); IDisplayDevice* getDisplayDevice(int disp); UeventObserver* getUeventObserver(); IPlatFactory* getPlatFactory() {return mPlatFactory;} protected: Hwcomposer(IPlatFactory *factory); 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(); private: hwc_procs_t const *mProcs; Drm *mDrm; // plugin through set IPlatFactory *mPlatFactory; VsyncManager *mVsyncManager; DisplayAnalyzer *mDisplayAnalyzer; MultiDisplayObserver *mMultiDisplayObserver; UeventObserver *mUeventObserver; // created from IPlatFactory DisplayPlaneManager *mPlaneManager; BufferManager *mBufferManager; IDisplayContext *mDisplayContext; Vector<IDisplayDevice*> mDisplayDevices; bool mInitialized; static Hwcomposer *sInstance; }; } // namespace intel } #endif /*HW_COMPOSER_H*/