1 #ifndef EXYNOS_PRIMARY_DISPLAY_H
2 #define EXYNOS_PRIMARY_DISPLAY_H
5 #include "ExynosDisplay.h"
8 #undef HDMI_PRESET_DEFAULT
9 #define HDMI_PRESET_DEFAULT V4L2_DV_1080P60
10 #define HDMI_PRESET_ERROR -1
12 class ExynosMPPModule
;
15 eTransparentRegion
= 0,
16 eCoveredOpaqueRegion
= 1,
21 eDamageRegionFull
= 0,
27 class ExynosOverlayDisplay
: public ExynosDisplay
{
30 ExynosOverlayDisplay(int numGSCs
, struct exynos5_hwc_composer_device_1_t
*pdev
);
31 ~ExynosOverlayDisplay();
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
);
40 int getCompModeSwitch();
41 int32_t getDisplayAttributes(const uint32_t attribute
, uint32_t config
);
43 bool switchOTF(bool enable
);
46 ExynosMPPModule
**mMPPs
;
48 exynos5_hwc_post_data_t mPostData
;
49 const private_module_t
*mGrallocModule
;
51 #ifdef USE_FB_PHY_LINEAR
52 buffer_handle_t mWinBuf
[NUM_HW_WINDOWS
][NUM_GSC_DST_BUFS
];
53 #ifdef G2D_COMPOSITION
55 exynos5_g2d_data_t mG2d
;
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
;
68 struct s3c_fb_win_config_data mLastConfigData
;
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
;
77 bool mForceFbYuvLayer
;
79 /* g3d = 0, gsc = 1 */
81 video_layer_config mPrevDstConfig
[MAX_VIDEO_LAYERS
];
85 bool mPopupPlayYuvContents
;
89 bool mBypassSkipStaticLayer
;
90 uint32_t mDmaChannelMaxBandwidth
[MAX_NUM_FIMD_DMA_CH
];
91 uint32_t mDmaChannelMaxOverlapCount
[MAX_NUM_FIMD_DMA_CH
];
95 int mCurrentRGBMPPIndex
;
97 hwc_rect mFbUpdateRegion
;
102 int mForceOverlayLayerIndex
;
104 int mAllowedOverlays
;
105 size_t mMaxWindowOverlapCnt
;
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
);
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
);
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();