MythTv has been working well here (my thanks to everyone) but recently I have
added a second monitor to my workstation. I've played with TwinView and
Xinerama with much success.
MythTv has nice Xinerama support (which TwinView also uses) but the video
aspect is wrong for my case. My monitors are standard 4:3 but all dvb-t
channels are 16:9 in Australia. This combination produces a picture
stretched vertically.
Searching thought the mail list brings up this thread on Xinerama and aspect
ratios:
http://www.gossamer-threads.com/lists/mythtv/users/45506?search_string=xinerama;#45506
The patch mentioned is here:
http://cvs.mythtv.org/cgi-bin/viewcvs.cgi/mythtv/libs/libmythtv/videoout_xv.cpp?rev=1.144&view=log#rev1.88
This makes Xinerama displays the same aspect as the videos.
My first included patch fixes screen aspect ratio detection with Xinerama.
Also adding a log message for when no physical display size found.
My second patch allows changes to setup->appearance to have effect without
restarting mythfrontend. This patch has a side effect of
d->GetScreenBounds() getting called twice at startup because LoadQtConfig()
is called twice.
Hopefully helpful,
Paul
--
diff -ur mythtv.old/libs/libmythtv/videoout_xv.cpp mythtv/libs/libmythtv/videoout_xv.cpp
--- mythtv.old/libs/libmythtv/videoout_xv.cpp 2005-06-09 22:08:19.742240312 +1000
+++ mythtv/libs/libmythtv/videoout_xv.cpp 2005-06-09 22:29:24.505967000 +1000
@@ -315,18 +315,28 @@
X11S(usingXinerama =
(XineramaQueryExtension(XJ_disp, &event_base, &error_base) &&
XineramaIsActive(XJ_disp)));
- if (w_mm == 0 || h_mm == 0 || usingXinerama)
+ if (w_mm == 0 || h_mm == 0)
{
w_mm = (int)(300 * XJ_aspect);
h_mm = 300;
display_aspect = XJ_aspect;
+
+ VERBOSE(VB_GENERAL,QString("Physical size of display unknown, using DisplaySize %1 %2").arg(w_mm).arg(h_mm));
}
- else if (gContext->GetNumSetting("GuiSizeForTV", 0))
+ else if (gContext->GetNumSetting("GuiSizeForTV", 0) || usingXinerama)
{
int w = DisplayWidth(XJ_disp, XJ_screen_num);
int h = DisplayHeight(XJ_disp, XJ_screen_num);
+
int gui_w = w, gui_h = h;
- gContext->GetResolutionSetting("Gui", gui_w, gui_h);
+ if (gContext->GetNumSetting("GuiSizeForTV", 0))
+ gContext->GetResolutionSetting("Gui", gui_w, gui_h);
+ else // usingXinerama
+ {
+ int xbase, ybase;
+ gContext->GetScreenBounds(xbase,ybase,gui_w,gui_h);
+ }
+
if (gui_w)
w_mm = w_mm * gui_w / w;
if (gui_h)
diff -ur mythtv.old/libs/libmyth/mythcontext.cpp mythtv/libs/libmyth/mythcontext.cpp
--- mythtv.old/libs/libmyth/mythcontext.cpp 2005-06-09 22:08:19.609260528 +1000
+++ mythtv/libs/libmyth/mythcontext.cpp 2005-06-09 22:15:00.880258064 +1000
@@ -955,18 +955,11 @@
// Switch to desired GUI resolution
d->display_res->SwitchToGUI();
-
- // Note the possibly changed screen settings
- d->GetScreenBounds();
- }
- else if (d->m_width <= 0 || d->m_height <= 0)
- {
- // For some reason, the screen resolution has not been stored yet.
- // This could be some strange error, or we could be bootstrapping
- // before connecting to a database. Either way, store screen size
- d->GetScreenBounds();
}
+ // Note the possibly changed screen settings
+ d->GetScreenBounds();
+
if (d->m_qtThemeSettings)
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev