]> git.sesse.net Git - vlc/commitdiff
* scaled_bitmap.cpp: - fixed an infinite loop when width=1
authorCyril Deguet <asmax@videolan.org>
Tue, 15 Aug 2006 22:25:27 +0000 (22:25 +0000)
committerCyril Deguet <asmax@videolan.org>
Tue, 15 Aug 2006 22:25:27 +0000 (22:25 +0000)
   + fixed a huge bug in horizontal scaling (btw, TODO: use bresenham for
   vertical scaling too)

modules/gui/skins2/src/scaled_bitmap.cpp

index 86b4763be30d6a9a5528c1745ab5df6d5258910f..402a4b015501e6472825725765b66bcca71a129d 100644 (file)
@@ -45,10 +45,10 @@ ScaledBitmap::ScaledBitmap( intf_thread_t *pIntf, const GenericBitmap &rBitmap,
         // Decision variables for Bresenham algorithm
         int incX1 = 2 * (srcWidth-1);
         int incX2 = incX1 - 2 * (width-1);
-        int dX = incX1 - (width-1);
 
         for( int y = 0; y < height; y++ )
         {
+            int dX = incX1 - (width-1);
             uint32_t yOffset = ((y * srcHeight) / height) * srcWidth;
             pSrcData = ((uint32_t*)rBitmap.getData()) + yOffset;
 
@@ -74,14 +74,16 @@ ScaledBitmap::ScaledBitmap( intf_thread_t *pIntf, const GenericBitmap &rBitmap,
         // Decision variables for Bresenham algorithm
         int incX1 = 2 * (width-1);
         int incX2 = incX1 - 2 * (srcWidth-1);
-        int dX = incX1 - (srcWidth-1);
 
         for( int y = 0; y < height; y++ )
         {
+            int dX = incX1 - (srcWidth-1);
             uint32_t yOffset = ((y * srcHeight) / height) * srcWidth;
             pSrcData = ((uint32_t*)rBitmap.getData()) + yOffset;
 
-            for( int x = 0; x < width; x++ )
+            *(pDestData++) = *(pSrcData++);
+            // Don't start with x=0 to avoid an infinite loop if width==1
+            for( int x = 1; x < width; x++ )
             {
                 *(pDestData++) = *(pSrcData++);