You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.6 KiB

/*
* Copyright (c) Hisilicon Technologies Co., Ltd.. 2016-2019. All rights reserved.
* Description: On behalf of a display device, hwcomposer is called for composition and sent for display
* Author: Hisilicon
* Created: 2019.12.02
*/
#ifndef HWC_IAPI_COM_IMPL_H
#define HWC_IAPI_COM_IMPL_H
#include "HWCIapiAdapter.h"
#include <uapi_gfx2d.h>
namespace android {
class HWCIapiComImpl : public HWCIapiAdapter {
public:
HWCIapiComImpl();
~HWCIapiComImpl() override {};
bool IsDisplayConnected(const int displayId) override;
#ifdef EXT_HDMI_SUPPORT
int GetHdmiMaxPara(const int displayId, float &maxWidth, float &maxHeight) override;
int RegisterHdmiCallback(const int displayId, HWCHdmiCallback callback) override;
int UnregisterHdmiCallback(const int displayId) override;
#endif
int InitIapiModules() override;
int DeInitIapiModules() override;
int GetFbDevId(const hwc2_display_t displayId) const override;
int GetExternalDisplayStatus(uapi_disp_state *state) override;
bool IsDisplaySwitched() override;
void UpdateVirtualScreen(const uint64_t displayId, const unsigned int width,
const unsigned int height) const override;
void DisableVoWindow(const native_handle_t &sideband) const override;
void SetVoWindowPosition(const native_handle_t &sideband, const hwc_rect_t &hwcRect, int zorder,
int absZorder) const override;
int OpenGfx2dAndInitCapability() override;
int CloseGfx2d() override;
int PrepareGfx2dBasicArg(const int layerNumber) override;
int PrepareGfx2dLayerArg(const HWCLayer &layer, const unsigned int i, const int fbWidth, const int fbHeight,
const bool isAsync) override;
int PrepareGfx2dDestArg(const int framebufferFd, const HWCBuffer &fbBuffer, const bool hwcCompress) override;
int Gfx2dCompose(int layerReleaseFence[], const int layerNumber, int &fbRealeaseFence,
const bool isAsync) override;
void DumpGfx2dComposeInfo() const;
void PostGfx2dCompose() override;
int FreshDirect(const int framebufferFd, HWCBuffer &layerBuffer) const override;
int FreshFb(const int framebufferFd, HWCBuffer &fbBuffer, const int composeType, const bool hwcCompress,
const bool discardFrame) const override;
int GetHdrInfo(const hwc2_display_t display, HdrCap &hdrCap) const override;
int64_t GetVsyncTime(const int framebufferFd, unsigned int &freshRate) const override;
int InitDisplayConfigs(const hwc2_display_t display, DisplayConfigs &configs, const framebuffer_device_t &device,
unsigned int &active) const override;
bool IsSupportGfx2dCompose() override;
bool CheckLayerNum(const size_t layerSize) const override;
bool CheckLayerSize(const unsigned int cropWidth, const unsigned int cropHeight,
const unsigned int dispWidth, const unsigned int dispHeight) const override;
bool CheckResizeNum(const int layerNum, const int videoLayerNum) const override;
void SetDispPowerState(const int displayId, const HWC2::PowerMode mode) const override;
static HWCHdmiCallback m_callback;
private:
int PrepareGfx2dBasicArgForLayer(uapi_gfx2d_surface &srcSurface, const HWCLayer& layer) const;
void PrepareGfx2dHandleRelatedArgForLayer(uapi_gfx2d_surface &srcSurface, const HWCLayer& layer,
const bool isAsync) const;
bool SupportModesCorrection(DisplayConfigs &configs, uint32_t config) const;
uapi_gfx2d_list m_gfx2dList;
int m_enabledDisplayCount;
// whether need to switch primary display and external display
bool m_switchDisplay;
uapi_gfx2d_capability m_capabilityInfo;
};
} // namespace android
#endif // HWC_IAPI_COM_IMPL_H