summaryrefslogtreecommitdiff
path: root/hwc2/FixedSizeModeMgr.cpp (plain)
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
19FixedSizeModeMgr::FixedSizeModeMgr() {
20}
21
22FixedSizeModeMgr::~FixedSizeModeMgr() {
23
24}
25
26hwc_modes_policy_t FixedSizeModeMgr::getPolicyType() {
27 return FIXED_SIZE_POLICY;
28}
29
30const char * FixedSizeModeMgr::getName() {
31 return "FixedSizeMode";
32}
33
34void FixedSizeModeMgr::setFramebufferSize(uint32_t w, uint32_t h) {
35 mCurMode.pixelW = mFbWidth = w;
36 mCurMode.pixelH = mFbHeight = h;
37}
38
39void FixedSizeModeMgr::setDisplayResources(
40 std::shared_ptr<HwDisplayCrtc> & crtc,
41 std::shared_ptr<HwDisplayConnector> & connector) {
42 mConnector = connector;
43 mCrtc = crtc;
44}
45
46int32_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
70int32_t FixedSizeModeMgr::getDisplayMode(drm_mode_info_t & mode) {
71 return mCrtc->getMode(mode);
72}
73
74int32_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
83int32_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
114int32_t FixedSizeModeMgr::getActiveConfig(
115 uint32_t * outConfig, int32_t caller __unused) {
116 *outConfig = 0;
117 return HWC2_ERROR_NONE;
118}
119
120int32_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
128void 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