libhwjpeg: resolve compilation errors
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos.git] / libdisplay / ExynosOverlayDisplay.h
1 #ifndef EXYNOS_PRIMARY_DISPLAY_H
2 #define EXYNOS_PRIMARY_DISPLAY_H
3
4 #include "ExynosHWC.h"
5 #include "ExynosDisplay.h"
6
7 #define S3D_ERROR -1
8 #undef HDMI_PRESET_DEFAULT
9 #define HDMI_PRESET_DEFAULT V4L2_DV_1080P60
10 #define HDMI_PRESET_ERROR -1
11
12 class ExynosMPPModule;
13
14 enum regionType {
15 eTransparentRegion = 0,
16 eCoveredOpaqueRegion = 1,
17 eDamageRegion = 2,
18 };
19
20 enum {
21 eDamageRegionFull = 0,
22 eDamageRegionPartial,
23 eDamageRegionSkip,
24 eDamageRegionError,
25 };
26
27 class ExynosOverlayDisplay : public ExynosDisplay {
28 public:
29 /* Methods */
30 ExynosOverlayDisplay(int numGSCs, struct exynos5_hwc_composer_device_1_t *pdev);
31 ~ExynosOverlayDisplay();
32
33 virtual int prepare(hwc_display_contents_1_t *contents);
34 virtual int set(hwc_display_contents_1_t *contents);
35 virtual void dump(android::String8& result);
36 virtual void freeMPP();
37 virtual void handleTotalBandwidthOverload(hwc_display_contents_1_t *contents);
38
39 int clearDisplay();
40 int getCompModeSwitch();
41 int32_t getDisplayAttributes(const uint32_t attribute, uint32_t config);
42
43 bool switchOTF(bool enable);
44
45 /* Fields */
46 ExynosMPPModule **mMPPs;
47
48 exynos5_hwc_post_data_t mPostData;
49 const private_module_t *mGrallocModule;
50
51 #ifdef USE_FB_PHY_LINEAR
52 buffer_handle_t mWinBuf[NUM_HW_WINDOWS][NUM_GSC_DST_BUFS];
53 #ifdef G2D_COMPOSITION
54 int mG2dComposition;
55 exynos5_g2d_data_t mG2d;
56 int mG2dLayers;
57 int mAllocatedLayers;
58 uint32_t mWinBufVirtualAddress[NUM_HW_WINDOWS][NUM_GSC_DST_BUFS];
59 int mWinBufFence[NUM_HW_WINDOWS][NUM_GSC_DST_BUFS];
60 int mG2dCurrentBuffer[NUM_HW_WINDOWS];
61 uint32_t mLastG2dLayerHandle[NUM_HW_WINDOWS];
62 uint32_t mWinBufMapSize[NUM_HW_WINDOWS];
63 int mG2dMemoryAllocated;
64 int mG2dBypassCount;
65 #endif
66 #endif
67
68 struct s3c_fb_win_config_data mLastConfigData;
69 size_t mLastFbWindow;
70 const void *mLastHandles[NUM_HW_WINDOWS];
71 exynos5_gsc_map_t mLastGscMap[NUM_HW_WINDOWS];
72 const void *mLastLayerHandles[NUM_VIRT_OVER];
73 int mLastOverlayWindowIndex;
74 int mLastOverlayLayerIndex;
75 int mVirtualOverlayFlag;
76
77 bool mForceFbYuvLayer;
78 int mCountSameConfig;
79 /* g3d = 0, gsc = 1 */
80 int mConfigMode;
81 video_layer_config mPrevDstConfig[MAX_VIDEO_LAYERS];
82
83 int mGscLayers;
84
85 bool mPopupPlayYuvContents;
86 bool mHasCropSurface;
87 int mYuvLayers;
88
89 bool mBypassSkipStaticLayer;
90 uint32_t mDmaChannelMaxBandwidth[MAX_NUM_FIMD_DMA_CH];
91 uint32_t mDmaChannelMaxOverlapCount[MAX_NUM_FIMD_DMA_CH];
92
93 bool mGscUsed;
94 int mCurrentGscIndex;
95 int mCurrentRGBMPPIndex;
96 bool mBlanked;
97 hwc_rect mFbUpdateRegion;
98 bool mFbNeeded;
99 size_t mFirstFb;
100 size_t mLastFb;
101 bool mForceFb;
102 int mForceOverlayLayerIndex;
103 bool mRetry;
104 int mAllowedOverlays;
105 size_t mMaxWindowOverlapCnt;
106
107 protected:
108 /* Methods */
109 void configureOtfWindow(hwc_rect_t &displayFrame,
110 int32_t blending, int32_t planeAlpha, int fence_fd, int format, s3c_fb_win_config &cfg);
111 void configureHandle(private_handle_t *handle, hwc_frect_t &sourceCrop,
112 hwc_rect_t &displayFrame, int32_t blending, int32_t planeAlpha, int fence_fd, s3c_fb_win_config &cfg);
113 void skipStaticLayers(hwc_display_contents_1_t *contents);
114 void determineSupportedOverlays(hwc_display_contents_1_t *contents);
115 void determineBandwidthSupport(hwc_display_contents_1_t *contents);
116 void assignWindows(hwc_display_contents_1_t *contents);
117 bool assignGscLayer(hwc_layer_1_t &layer, int index, int nextWindow);
118 void postGscOtf(hwc_layer_1_t &layer, struct s3c_fb_win_config *config, int win_map, int index);
119 void handleStaticLayers(hwc_display_contents_1_t *contents, struct s3c_fb_win_config_data &win_data, int tot_ovly_wins);
120 void cleanupGscs();
121 int handleWindowUpdate(hwc_display_contents_1_t *contents, struct s3c_fb_win_config *config);
122 unsigned int getLayerRegion(hwc_layer_1_t &layer, hwc_rect &rect_area, uint32_t regionType);
123
124 virtual void determineYuvOverlay(hwc_display_contents_1_t *contents);
125 virtual int postGscM2M(hwc_layer_1_t &layer, struct s3c_fb_win_config *config, int win_map, int index, bool isBottom);
126 virtual void forceYuvLayersToFb(hwc_display_contents_1_t *contents);
127 virtual void configureOverlay(hwc_layer_1_t *layer, s3c_fb_win_config &cfg);
128 virtual void configureDummyOverlay(hwc_layer_1_t *layer, s3c_fb_win_config &cfg);
129 virtual bool isOverlaySupported(hwc_layer_1_t &layer, size_t i);
130 virtual void refreshGscUsage(hwc_layer_1_t &layer);
131 virtual int postFrame(hwc_display_contents_1_t *contents);
132 virtual int winconfigIoctl(s3c_fb_win_config_data *win_data);
133 virtual int waitForRenderFinish(buffer_handle_t *handle, int buffers);
134 virtual void handleOffscreenRendering(hwc_layer_1_t &layer, hwc_display_contents_1_t *contents, int index);
135 virtual int getMPPForUHD(hwc_layer_1_t &layer);
136 virtual int getRGBMPPIndex(int index);
137 virtual bool multipleRGBScaling(int format);
138 virtual void checkTVBandwidth();
139 };
140
141 #endif