changeset 35060:c5c8d88d612e

directx: Support negative panscanrange (i.e. zooming) for noaccel. All that is necessary is to skip the code clipping the destination rectangle.
author reimar
date Fri, 07 Sep 2012 19:27:44 +0000
parents 568f0925d9a9
children b27fc7004bf2
files libvo/vo_directx.c
diffstat 1 files changed, 8 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_directx.c	Fri Sep 07 19:16:10 2012 +0000
+++ b/libvo/vo_directx.c	Fri Sep 07 19:27:44 2012 +0000
@@ -476,8 +476,14 @@
     rd.right  = rd.left + width;
     rd.bottom = rd.top + height;
 
+    if(nooverlay) {
+        g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0, vo_w32_window);
+        // For nooverlay we are done, the blitter can handle
+        // a destination RECT larger than the window.
+        return 0;
+    }
     /*ok, let's workaround some overlay limitations*/
-    if (!nooverlay) {
+    {
         uint32_t uStretchFactor1000;                 //minimum stretch
         uint32_t xstretch1000, ystretch1000;
 
@@ -564,8 +570,6 @@
             dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
         else if (!tmp_image)
             vo_ontop = 1;
-    } else {
-        g_lpddclipper->lpVtbl->SetHWnd(g_lpddclipper, 0, vo_w32_window);
     }
 
     /*make sure the overlay is inside the screen*/
@@ -574,10 +578,7 @@
     rd.bottom = FFMIN(rd.bottom, vo_screenheight);
     rd.right  = FFMIN(rd.right,  vo_screenwidth);
 
-    /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/
-    if (nooverlay)
-        return 0;
-
+    /* Now reconfigure/show the overlay */
 //    printf("overlay: %i %i %ix%i\n",rd.left,rd.top,rd.right - rd.left,rd.bottom - rd.top);
     ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay, &rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
     if (FAILED(ddrval)) {