diff options
Diffstat (limited to 'libhwc2.1/libdevice/ExynosDisplay.cpp')
-rw-r--r-- | libhwc2.1/libdevice/ExynosDisplay.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libhwc2.1/libdevice/ExynosDisplay.cpp b/libhwc2.1/libdevice/ExynosDisplay.cpp index 4be73da..bc17c2e 100644 --- a/libhwc2.1/libdevice/ExynosDisplay.cpp +++ b/libhwc2.1/libdevice/ExynosDisplay.cpp @@ -6058,3 +6058,27 @@ bool ExynosDisplay::isMixedComposition() { } return false; } + +int ExynosDisplay::lookupDisplayConfigs(const int32_t &width, + const int32_t &height, + const int32_t &fps, + int32_t *outConfig) { + if (!fps) + return HWC2_ERROR_BAD_CONFIG; + + constexpr auto nsecsPerSec = std::chrono::nanoseconds(1s).count(); + constexpr auto nsecsPerMs = std::chrono::nanoseconds(1ms).count(); + + const auto vsyncPeriod = nsecsPerSec / fps; + + for (auto const& [config, mode] : mDisplayConfigs) { + long delta = abs(vsyncPeriod - mode.vsyncPeriod); + if ((width == mode.width) && (height == mode.height) && (delta < nsecsPerMs)) { + ALOGD("%s: found display config for mode: %dx%d@%d=%d", + __func__, width, height, fps, config); + *outConfig = config; + return HWC2_ERROR_NONE; + } + } + return HWC2_ERROR_BAD_CONFIG; +} |