blob: 9913a3551d3039acd849ed47ff091c70b7949b31
1 | /* |
2 | * Copyright (c) 2017 Amlogic, Inc. All rights reserved. |
3 | * |
4 | * This source code is subject to the terms and conditions defined in the |
5 | * file 'LICENSE' which is part of this source code package. |
6 | * |
7 | * Description: |
8 | */ |
9 | |
10 | #include "FixedSizeModeMgr.h" |
11 | #include <MesonLog.h> |
12 | #include <HwcConfig.h> |
13 | #include <hardware/hwcomposer2.h> |
14 | |
15 | |
16 | #define DEFUALT_DPI (159) |
17 | #define DEFAULT_REFRESH_RATE (60.0f) |
18 | |
19 | FixedSizeModeMgr::FixedSizeModeMgr() { |
20 | } |
21 | |
22 | FixedSizeModeMgr::~FixedSizeModeMgr() { |
23 | |
24 | } |
25 | |
26 | hwc_modes_policy_t FixedSizeModeMgr::getPolicyType() { |
27 | return FIXED_SIZE_POLICY; |
28 | } |
29 | |
30 | const char * FixedSizeModeMgr::getName() { |
31 | return "FixedSizeMode"; |
32 | } |
33 | |
34 | void FixedSizeModeMgr::setFramebufferSize(uint32_t w, uint32_t h) { |
35 | mCurMode.pixelW = mFbWidth = w; |
36 | mCurMode.pixelH = mFbHeight = h; |
37 | } |
38 | |
39 | void FixedSizeModeMgr::setDisplayResources( |
40 | std::shared_ptr<HwDisplayCrtc> & crtc, |
41 | std::shared_ptr<HwDisplayConnector> & connector) { |
42 | mConnector = connector; |
43 | mCrtc = crtc; |
44 | } |
45 | |
46 | int32_t FixedSizeModeMgr::update() { |
47 | bool useFakeMode = true; |
48 | drm_mode_info_t realMode; |
49 | |
50 | if (mConnector->isConnected() && 0 == mCrtc->getMode(realMode)) { |
51 | if (realMode.name[0] != 0) { |
52 | mCurMode.refreshRate = realMode.refreshRate; |
53 | mCurMode.dpiX = ((float)mCurMode.pixelW / realMode.pixelW) * realMode.dpiX; |
54 | mCurMode.dpiY = ((float)mCurMode.pixelH / realMode.pixelH) * realMode.dpiY; |
55 | strncpy(mCurMode.name, realMode.name , DRM_DISPLAY_MODE_LEN); |
56 | MESON_LOGI("ModeMgr update to (%s)", mCurMode.name); |
57 | useFakeMode = false; |
58 | } |
59 | } |
60 | |
61 | if (useFakeMode) { |
62 | mCurMode.refreshRate = DEFAULT_REFRESH_RATE; |
63 | mCurMode.dpiX = mCurMode.dpiY = DEFUALT_DPI; |
64 | strncpy(mCurMode.name, "NULL", DRM_DISPLAY_MODE_LEN); |
65 | } |
66 | |
67 | return 0; |
68 | } |
69 | |
70 | int32_t FixedSizeModeMgr::getDisplayMode(drm_mode_info_t & mode) { |
71 | return mCrtc->getMode(mode); |
72 | } |
73 | |
74 | int32_t FixedSizeModeMgr::getDisplayConfigs( |
75 | uint32_t * outNumConfigs, uint32_t * outConfigs) { |
76 | *outNumConfigs = 1; |
77 | if (outConfigs) { |
78 | *outConfigs = 0; |
79 | } |
80 | return HWC2_ERROR_NONE; |
81 | } |
82 | |
83 | int32_t FixedSizeModeMgr::getDisplayAttribute( |
84 | uint32_t config __unused, int32_t attribute, int32_t * outValue, |
85 | int32_t caller __unused) { |
86 | switch (attribute) { |
87 | case HWC2_ATTRIBUTE_WIDTH: |
88 | *outValue = mCurMode.pixelW; |
89 | break; |
90 | case HWC2_ATTRIBUTE_HEIGHT: |
91 | *outValue = mCurMode.pixelH; |
92 | break; |
93 | case HWC2_ATTRIBUTE_VSYNC_PERIOD: |
94 | if (HwcConfig::isHeadlessMode()) { |
95 | *outValue = 1e9 / HwcConfig::headlessRefreshRate(); |
96 | } else { |
97 | *outValue = 1e9 / mCurMode.refreshRate; |
98 | } |
99 | break; |
100 | case HWC2_ATTRIBUTE_DPI_X: |
101 | *outValue = mCurMode.dpiX * 1000.0f; |
102 | break; |
103 | case HWC2_ATTRIBUTE_DPI_Y: |
104 | *outValue = mCurMode.dpiY * 1000.0f; |
105 | break; |
106 | default: |
107 | MESON_LOGE("Unkown display attribute(%d)", attribute); |
108 | break; |
109 | } |
110 | |
111 | return HWC2_ERROR_NONE; |
112 | } |
113 | |
114 | int32_t FixedSizeModeMgr::getActiveConfig( |
115 | uint32_t * outConfig, int32_t caller __unused) { |
116 | *outConfig = 0; |
117 | return HWC2_ERROR_NONE; |
118 | } |
119 | |
120 | int32_t FixedSizeModeMgr::setActiveConfig( |
121 | uint32_t config) { |
122 | if (config > 0) { |
123 | MESON_LOGE("FixedSizeModeMgr dont support config (%d)", config); |
124 | } |
125 | return HWC2_ERROR_NONE; |
126 | } |
127 | |
128 | void FixedSizeModeMgr::dump(String8 & dumpstr) { |
129 | dumpstr.appendFormat("FixedSizeModeMgr:(%s)\n", mCurMode.name); |
130 | dumpstr.append("---------------------------------------------------------" |
131 | "-------------------------\n"); |
132 | dumpstr.append("| CONFIG | VSYNC_PERIOD | WIDTH | HEIGHT |" |
133 | " DPI_X | DPI_Y |\n"); |
134 | dumpstr.append("+------------+------------------+-----------+------------+" |
135 | "-----------+-----------+\n"); |
136 | dumpstr.appendFormat("| %2d | %.3f | %5d | %5d |" |
137 | " %3d | %3d |\n", |
138 | 0, |
139 | mCurMode.refreshRate, |
140 | mCurMode.pixelW, |
141 | mCurMode.pixelH, |
142 | mCurMode.dpiX, |
143 | mCurMode.dpiY); |
144 | dumpstr.append("---------------------------------------------------------" |
145 | "-------------------------\n"); |
146 | } |
147 | |
148 |