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.

150 lines
5.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_ADAPTER_H
#define HWC_IAPI_ADAPTER_H
#include <hardware/hwcomposer2.h>
#include <hardware/hardware.h>
#include <hardware/fb.h>
#include <vector>
#include "HWCCallbacks.h"
#include "HWCCommon.h"
#include "HWCLayer.h"
#include "uapi_disp.h"
namespace android {
using HWCHdmiCallback = void (*)(hwc2_display_t id, HWC2::Connection state);
class HWCIapiAdapter {
public:
static HWCIapiAdapter& GetInstance();
HWCIapiAdapter() {}
virtual ~HWCIapiAdapter() {}
HWCIapiAdapter(const HWCIapiAdapter&) = delete;
HWCIapiAdapter& operator=(const HWCIapiAdapter&) = delete;
// Whether the specified display is connected by HDMI or MPI
// Implemented in UAPI_VERSION(1, 0)
virtual bool IsDisplayConnected(const int dislpay);
// Get the display image max width and height
// Implemented in UAPI_VERSION(1, 0)
virtual int GetHdmiMaxPara(const int displayId, float &maxWidth, float &maxHeight);
// Register callback for hdmi plug and unplug event
// Implemented in UAPI_VERSION(1, 0)
virtual int RegisterHdmiCallback(const int displayId, HWCHdmiCallback callback);
// Unregister callback for hdmi plug and unplug event
// Implemented in UAPI_VERSION(1, 0)
virtual int UnregisterHdmiCallback(const int displayId);
// Init the vo window
// Implemented in UAPI_VERSION(1, 0)
virtual int InitIapiModules();
// Deinit the vo window
// Implemented in UAPI_VERSION(1, 0)
virtual int DeInitIapiModules();
// Get the status of external display
// Implemented in UAPI_VERSION(1, 0), default return false
virtual int GetExternalDisplayStatus(uapi_disp_state *state);
// whether need to switch display
// Implemented in UAPI_VERSION(1, 0), default return false
virtual bool IsDisplaySwitched();
// Get fb device id following /proc/msp/gfbg[ID] by display id
// Implemented in UAPI_VERSION(1, 0), default return 0
virtual int GetFbDevId(const hwc2_display_t displayId) const;
// Update virtual screen
// Implemented in UAPI_VERSION(1, 0)
virtual void UpdateVirtualScreen(const uint64_t displayId, const unsigned int width,
const unsigned int height) const;
// Set the vo window position for sideband video
// Implemented in UAPI_VERSION(1, 0)
virtual void SetVoWindowPosition(const native_handle_t &sideband, const hwc_rect_t &hwcRect, int zorder,
int absZorder) const;
// Disalbe vo window for sideband video
virtual void DisableVoWindow(const native_handle_t &sideband) const;
// Open gfx2d device for gfx2d compose
// Implemented in UAPI_VERSION(1, 0)
virtual int OpenGfx2dAndInitCapability();
// Close gfx2d device
// Implemented in UAPI_VERSION(1, 0)
virtual int CloseGfx2d();
// Allocate necessary memory and memset it to be zero for gfx2d compose
// Implemented in UAPI_VERSION(1, 0)
virtual int PrepareGfx2dBasicArg(const int layerNumber);
// Prepare Source(Layer) info for gfx2d compose
// Implemented in UAPI_VERSION(1, 0)
virtual int PrepareGfx2dLayerArg(const HWCLayer &layer, const unsigned int i, const int fbWidht,
const int fbHeight, const bool isAsync);
// Prepare Dest(FrameBuffer) info for gfx2d compose
// Implemented in UAPI_VERSION(1, 0)
virtual int PrepareGfx2dDestArg(const int framebufferFd, const HWCBuffer &fbBuffer, const bool hwcCompress);
// Process sync or async gfx2d compose, valid release fence will be returned for async compose
// Implemented in UAPI_VERSION(1, 0)
virtual int Gfx2dCompose(int layerReleaseFence[], const int layerNumber, int &fbRealeaseFence,
const bool isAsync);
// free the memory allocated duing the prepare basic arg
// Implemented in UAPI_VERSION(1, 0)
virtual void PostGfx2dCompose();
// present layer buffer directly
// Implemented in UAPI_VERSION(1, 0)
virtual int FreshDirect(const int framebufferFd, HWCBuffer &layerBuffer) const;
// Prepare framebuffer info and ready to fresh fb
// Implemented in UAPI_VERSION(1, 0)
virtual int FreshFb(const int framebufferFd, HWCBuffer &fbBuffer, const int composeType, const bool hwcCompress,
const bool discardFrame) const;
// Get Hdr info by HDMI iapi api
// Implemented in UAPI_VERSION(1, 0)
virtual int GetHdrInfo(const hwc2_display_t display, HdrCap &info) const;
// Get Vsync time(us) with blocking
// Implemented in UAPI_VERSION(1, 0)
virtual int64_t GetVsyncTime(const int framebufferFd, unsigned int &freshRate) const;
// Init display configs as well as active config
// Implemented in UAPI_VERSION(1, 0)
virtual int InitDisplayConfigs(const hwc2_display_t display, DisplayConfigs &configs,
const framebuffer_device_t &device, unsigned int &active) const;
// Init display configs as well as active config
// Implemented in UAPI_VERSION(1, 0)
virtual bool IsSupportGfx2dCompose();
virtual bool CheckLayerNum(const size_t layerSize) const;
virtual bool CheckLayerSize(const unsigned int cropWidth, const unsigned int cropHeight,
const unsigned int dispWidth, const unsigned int dispHeight) const;
virtual bool CheckResizeNum(const int layerNum, const int videoLayerNum) const;
// set disp power state
virtual void SetDispPowerState(const int displayId, const HWC2::PowerMode mode) const;
};
} // namespace android
#endif // HWC_IAPI_ADAPTER_H