On Tue, 2005-11-22 at 22:39 -0500, Daniel Kristjansson wrote:
> Can someone verify that this works?
Here's an update.
I believe it gets rid of the double compensation for scaling in the last
patch. I've tested with various non-square pixel videos of different
aspect ratios and sizes and with square pixel videos videos of different
aspect ratios. But I haven't tested yet with non-square display pixels
nor with chromakey OSD because I need to reboot for that.
-- Daniel
Index: libs/libmythtv/videooutbase.cpp
===================================================================
--- libs/libmythtv/videooutbase.cpp (revision 8010)
+++ libs/libmythtv/videooutbase.cpp (working copy)
@@ -509,6 +509,7 @@
visible = GetVisibleOSDBounds(visible_aspect, font_scaling);
}
+static float sq(float a) { return a*a; }
/**
* \fn VideoOutput::GetVisibleOSDBounds(float&) const
* \brief Returns visible portions of total OSD bounds
@@ -537,14 +538,24 @@
tl += s;
br -= (s * 2);
}
+ QRect vb(tl, br);
// set the physical aspect ratio of the displayable area
- float dispPixelAdj = (GetDisplayAspect() * XJ_height) / XJ_width;
- visible_aspect = XJ_aspect * dispPixelAdj;
+ float dispPixelAdj = (GetDisplayAspect() * disph) / dispw;
+ VERBOSE(VB_IMPORTANT, "XJ_aspect: "<<XJ_aspect);
+ VERBOSE(VB_IMPORTANT, "videoAspect: "<<videoAspect);
+ VERBOSE(VB_IMPORTANT, "display_aspect: "<<display_aspect
+ <<" dpa: "<<dispPixelAdj);
+ // now adjust for scaling of the video
+ float vs = ((float)vb.width())/vb.height();
+ VERBOSE(VB_IMPORTANT, "vb scale: "<<vs);
+ visible_aspect = (vs/XJ_aspect) * dispPixelAdj;
+ VERBOSE(VB_IMPORTANT, "visible_aspect: "<<visible_aspect);
// this can be used to account for Zooming letterbox modes
- font_scaling = 1.0f;
- return QRect(tl, br);
+ font_scaling = 1.0/sqrt(2.0/(sq(visible_aspect / 1.3333f) + 1.0));
+ VERBOSE(VB_IMPORTANT, "font_scaling: "<<font_scaling);
+ return vb;
}
/**
@@ -806,7 +817,7 @@
//printf("After: %dx%d%+d%+d\n", dispwoff, disphoff, dispxoff,
//dispyoff);
-#if 0
+#if 1
printf("VideoOutput::MoveResize:\n");
printf("Img(%d,%d %d,%d)\n", imgx, imgy, imgw, imgh);
printf("Disp(%d,%d %d,%d)\n", dispxoff, dispyoff, dispwoff, disphoff);
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev