1 #ifndef EXYNOS_LEGACY_HDMI_H
2 #define EXYNOS_LEGACY_HDMI_H
5 #include "ExynosDisplay.h"
6 #include "../../exynos/kernel-3.10-headers/videodev2.h"
7 #include "../../exynos/kernel-3.10-headers/v4l2-dv-timings.h"
9 #define NUM_VIRT_OVER_HDMI 5
10 #define MAX_HDMI_VIDEO_LAYERS 1
12 #if defined(USE_GRALLOC_FLAG_FOR_HDMI)
13 #define HWC_SKIP_HDMI_RENDERING 0x80000000
16 #define SUPPORTED_DV_TIMINGS_NUM 28
17 struct preset_index_mapping
{
22 const struct preset_index_mapping preset_index_mappings
[SUPPORTED_DV_TIMINGS_NUM
] = {
23 {V4L2_DV_480P59_94
, 0},
33 {V4L2_DV_1080P60
, 10},
34 {V4L2_DV_2160P24
, 11},
35 {V4L2_DV_2160P25
, 12},
36 {V4L2_DV_2160P30
, 13},
37 {V4L2_DV_2160P24_1
, 14},
38 {V4L2_DV_720P60_SB_HALF
, 15},
39 {V4L2_DV_720P60_TB
, 16},
40 {V4L2_DV_720P50_SB_HALF
, 17},
41 {V4L2_DV_720P50_TB
, 18},
42 {V4L2_DV_1080P24_FP
, 19},
43 {V4L2_DV_1080P24_SB_HALF
, 20},
44 {V4L2_DV_1080P24_TB
, 21},
45 {V4L2_DV_1080I60_SB_HALF
, 22},
46 {V4L2_DV_1080I50_SB_HALF
, 23},
47 {V4L2_DV_1080P60_SB_HALF
, 24},
48 {V4L2_DV_1080P60_TB
, 25},
49 {V4L2_DV_1080P30_SB_HALF
, 26},
50 {V4L2_DV_1080P30_TB
, 27}
53 class ExynosExternalDisplay
: public ExynosDisplay
{
56 ExynosExternalDisplay(struct exynos5_hwc_composer_device_1_t
*pdev
);
57 ~ExynosExternalDisplay();
59 void setHdmiStatus(bool status
);
61 bool isPresetSupported(unsigned int preset
);
63 int getDisplayConfigs(uint32_t *configs
, size_t *numConfigs
);
66 void setPreset(int preset
);
67 int convert3DTo2D(int preset
);
68 void setHdcpStatus(int status
);
69 void setAudioChannel(uint32_t channels
);
70 uint32_t getAudioChannel();
73 virtual int openHdmi();
74 virtual void closeHdmi();
76 virtual int prepare(hwc_display_contents_1_t
* contents
);
77 virtual int set(hwc_display_contents_1_t
* contents
);
78 void checkGrallocFlags(hwc_display_contents_1_t
*contents
);
82 ExynosMPPModule
*mMPPs
[1];
87 const void *mLastLayerHandles
[NUM_VIRT_OVER_HDMI
];
88 int mVirtualOverlayFlag
;
90 exynos5_hwc_post_data_t mPostData
;
92 int mForceOverlayLayerIndex
;
99 bool mBypassSkipStaticLayer
;
100 int mLastOverlayWindowIndex
;
101 int mLastOverlayLayerIndex
;
103 size_t mLastFbWindow
;
105 uint32_t mDmaChannelMaxBandwidth
[MAX_NUM_HDMI_DMA_CH
];
106 uint32_t mDmaChannelMaxOverlapCount
[MAX_NUM_HDMI_DMA_CH
];
107 struct s3c_fb_win_config_data mLastConfigData
;
108 exynos5_gsc_map_t mLastGscMap
[NUM_HW_WINDOWS
];
109 const void *mLastHandles
[NUM_HDMI_WINDOWS
];
111 bool mLocalExternalDisplayPause
;
112 bool mIsCameraStarted
;
113 uint32_t mFBT_Transform
;
114 bool mUseProtectedLayer
;
115 #if defined(USE_GRALLOC_FLAG_FOR_HDMI)
116 bool mUseScreenshootLayer
;
120 void determineYuvOverlay(hwc_display_contents_1_t
*contents
);
121 void determineSupportedOverlays(hwc_display_contents_1_t
*contents
);
122 void determineBandwidthSupport(hwc_display_contents_1_t
*contents
);
123 void assignWindows(hwc_display_contents_1_t
*contents
);
124 bool assignGscLayer(hwc_layer_1_t
&layer
, int index
, int nextWindow
);
125 int postGscM2M(hwc_layer_1_t
&layer
, struct s3c_fb_win_config
*config
, int win_map
, int index
);
126 void configureHandle(private_handle_t
*handle
, hwc_frect_t
&sourceCrop
,
127 hwc_rect_t
&displayFrame
, int32_t blending
, int32_t planeAlpha
, int fence_fd
, s3c_fb_win_config
&cfg
);
128 void skipStaticLayers(hwc_display_contents_1_t
*contents
);
129 void handleStaticLayers(hwc_display_contents_1_t
*contents
, struct s3c_fb_win_config_data
&win_data
, int tot_ovly_wins
);
130 void skipUILayers(hwc_display_contents_1_t
*contents
);
132 int getDVTimingsIndex(int preset
);
134 //virtual void configureOverlay(hwc_layer_1_t *layer, s3c_fb_win_config &cfg);
135 //virtual bool isOverlaySupported(hwc_layer_1_t &layer, size_t i);
136 //virtual int postFrame(hwc_display_contents_1_t *contents);
137 void configureOverlay(hwc_layer_1_t
*layer
, s3c_fb_win_config
&cfg
);
138 bool isOverlaySupported(hwc_layer_1_t
&layer
, size_t i
);
139 int postFrame(hwc_display_contents_1_t
*contents
);
140 bool checkConfigChanged(struct s3c_fb_win_config_data lastConfigData
, struct s3c_fb_win_config_data newConfigData
);