xrandr patch: an additional decimal place is required to distinguish different refresh rates in query
Kevin Mitchell
kevmitch at gmail.com
Tue Jan 21 21:50:02 PST 2014
I have a Samsung eh5000 HDTV that I connect to my Intel Mobile Ivy
Bridge chipset via HDMI1 as reported by xrandr. Without modification
xrandr reports the display's native resolution as
1920x1080 60.0 + 59.9 30.0 24.0 30.0 24.0*
This is confusing because it lists 30.0 and 24.0 twice each. I
discovered that I could switch to either one by specifying --rate
30/--rate 29.97 or --rate 24/--rate 23.98.
With the attached patch, I have added one more decimal everywhere a
frequency is reported so that now it's clearer what the supported
refresh rates are and how to switch to them:
1920x1080 60.00 + 59.94 30.00 24.00 29.97 23.98*
Kevin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-devel/attachments/20140121/400988dc/attachment.html>
-------------- next part --------------
--- xrandr.orig.c 2014-01-21 21:47:27.916161001 -0800
+++ xrandr.c 2014-01-21 21:47:02.153331952 -0800
@@ -1566,7 +1566,7 @@ crtc_apply (crtc_t *crtc)
rr_outputs[o] = crtc->outputs[o]->output.xid;
mode = crtc->mode_info->id;
if (verbose) {
- printf ("crtc %d: %12s %6.1f +%d+%d", crtc->crtc.index,
+ printf ("crtc %d: %12s %6.2f +%d+%d", crtc->crtc.index,
crtc->mode_info->name, mode_refresh (crtc->mode_info),
crtc->x, crtc->y);
for (o = 0; o < crtc->noutput; o++)
@@ -3592,7 +3592,7 @@ main (int argc, char **argv)
XRRModeInfo *mode = find_mode_by_xid (output_info->modes[j]);
int f;
- printf (" %s (0x%x) %6.1fMHz",
+ printf (" %s (0x%x) %6.2fMHz",
mode->name, (int)mode->id,
(double)mode->dotClock / 1000000.0);
for (f = 0; mode_flags[f].flag; f++)
@@ -3603,10 +3603,10 @@ main (int argc, char **argv)
if (j < output_info->npreferred)
printf (" +preferred");
printf ("\n");
- printf (" h: width %4d start %4d end %4d total %4d skew %4d clock %6.1fKHz\n",
+ printf (" h: width %4d start %4d end %4d total %4d skew %4d clock %6.2fKHz\n",
mode->width, mode->hSyncStart, mode->hSyncEnd,
mode->hTotal, mode->hSkew, mode_hsync (mode) / 1000);
- printf (" v: height %4d start %4d end %4d total %4d clock %6.1fHz\n",
+ printf (" v: height %4d start %4d end %4d total %4d clock %6.2fHz\n",
mode->height, mode->vSyncStart, mode->vSyncEnd, mode->vTotal,
mode_refresh (mode));
mode->modeFlags |= ModeShown;
@@ -3633,7 +3633,7 @@ main (int argc, char **argv)
if (strcmp (jmode->name, kmode->name) != 0) continue;
mode_shown[k] = True;
kmode->modeFlags |= ModeShown;
- printf (" %6.1f", mode_refresh (kmode));
+ printf (" %6.2f", mode_refresh (kmode));
if (kmode == output->mode_info)
printf ("*");
else
@@ -3654,13 +3654,13 @@ main (int argc, char **argv)
if (!(mode->modeFlags & ModeShown))
{
- printf (" %s (0x%x) %6.1fMHz\n",
+ printf (" %s (0x%x) %6.2fMHz\n",
mode->name, (int)mode->id,
(double)mode->dotClock / 1000000.0);
- printf (" h: width %4d start %4d end %4d total %4d skew %4d clock %6.1fKHz\n",
+ printf (" h: width %4d start %4d end %4d total %4d skew %4d clock %6.2fKHz\n",
mode->width, mode->hSyncStart, mode->hSyncEnd,
mode->hTotal, mode->hSkew, mode_hsync (mode) / 1000);
- printf (" v: height %4d start %4d end %4d total %4d clock %6.1fHz\n",
+ printf (" v: height %4d start %4d end %4d total %4d clock %6.2fHz\n",
mode->height, mode->vSyncStart, mode->vSyncEnd, mode->vTotal,
mode_refresh (mode));
}
More information about the xorg-devel
mailing list