diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2019-09-24 12:52:14 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2019-09-25 14:49:06 +0300 |
commit | 40bc9d1095228ab1377625be3479491263d696d7 (patch) | |
tree | 68e02263767217c5302788a7c974c3786fb9e44b /kms++/src | |
parent | f887436cebefd30f2bfadcfb7210703baa8ca93c (diff) |
videomode to_string improvements
Add to_string_short() and to_string_long() to videomode (using the fmt
library) for easy printing of videomodes.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'kms++/src')
-rw-r--r-- | kms++/src/videomode.cpp | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/kms++/src/videomode.cpp b/kms++/src/videomode.cpp index b8bd797..7099898 100644 --- a/kms++/src/videomode.cpp +++ b/kms++/src/videomode.cpp @@ -2,6 +2,7 @@ #include <xf86drmMode.h> #include <math.h> #include <sstream> +#include <fmt/format.h> #include <kms++/kms++.h> #include "helpers.h" @@ -88,14 +89,53 @@ void Videomode::set_vsync(SyncPolarity pol) } } -string Videomode::to_string() const +string Videomode::to_string_short() const { - std::stringstream ss; - ss << hdisplay << "x" << vdisplay; - if (interlace()) - ss << "i"; - ss << "@" << calculated_vrefresh(); - return ss.str(); + return fmt::format("{}x{}{}@{:.2f}", hdisplay, vdisplay, interlace() ? "i" : "", calculated_vrefresh()); +} + +static char sync_to_char(SyncPolarity pol) +{ + switch (pol) { + case SyncPolarity::Positive: + return '+'; + case SyncPolarity::Negative: + return '-'; + default: + return '?'; + } +} + +string Videomode::to_string_long() const +{ + string h = fmt::format("{}/{}/{}/{}/{}", hdisplay, hfp(), hsw(), hbp(), sync_to_char(hsync())); + string v = fmt::format("{}/{}/{}/{}/{}", vdisplay, vfp(), vsw(), vbp(), sync_to_char(vsync())); + + string str = fmt::format("{} {:.3f} {} {} {} ({:.2f}) {:#x} {:#x}", + to_string_short(), + clock / 1000.0, + h, v, + vrefresh, calculated_vrefresh(), + flags, + type); + + return str; +} + +string Videomode::to_string_long_padded() const +{ + string h = fmt::format("{}/{}/{}/{}/{}", hdisplay, hfp(), hsw(), hbp(), sync_to_char(hsync())); + string v = fmt::format("{}/{}/{}/{}/{}", vdisplay, vfp(), vsw(), vbp(), sync_to_char(vsync())); + + string str = fmt::format("{:<16} {:7.3f} {:<18} {:<18} {:2} ({:.2f}) {:#10x} {:#6x}", + to_string_short(), + clock / 1000.0, + h, v, + vrefresh, calculated_vrefresh(), + flags, + type); + + return str; } Videomode videomode_from_timings(uint32_t clock_khz, |