136 lines
4 KiB
C++
136 lines
4 KiB
C++
/*
|
||
// 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*/
|