videoscale: Don't read after the end of a line when lineary scaling YUYV/UYVY
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 28 Mar 2009 10:27:56 +0000 (11:27 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 28 Mar 2009 10:27:56 +0000 (11:27 +0100)
Partially fixes bug #577054.

gst/videoscale/vs_scanline.c

index 9a045722e4c76fbdd0780cc0fff73e7edd6e8f6d..6e8576cd528be2d4e0d97b1c1b1358095a9e1db9 100644 (file)
@@ -280,10 +280,16 @@ vs_scanline_resample_linear_YUYV (uint8_t * dest, uint8_t * src, int n,
 
     j = acc >> 17;
     x = acc & 0x1ffff;
-    dest[i * 4 + 1] =
-        (src[j * 4 + 1] * (131072 - x) + src[j * 4 + 5] * x) >> 17;
-    dest[i * 4 + 3] =
-        (src[j * 4 + 3] * (131072 - x) + src[j * 4 + 7] * x) >> 17;
+
+    if (i < n - 1) {
+      dest[i * 4 + 1] =
+          (src[j * 4 + 1] * (131072 - x) + src[j * 4 + 5] * x) >> 17;
+      dest[i * 4 + 3] =
+          (src[j * 4 + 3] * (131072 - x) + src[j * 4 + 7] * x) >> 17;
+    } else {
+      dest[i * 4 + 1] = src[j * 4 + 1];
+      dest[i * 4 + 3] = src[j * 4 + 3];
+    }
 
     acc += increment;
 
@@ -379,10 +385,16 @@ vs_scanline_resample_linear_UYVY (uint8_t * dest, uint8_t * src, int n,
 
     j = acc >> 17;
     x = acc & 0x1ffff;
-    dest[i * 4 + 0] =
-        (src[j * 4 + 0] * (131072 - x) + src[j * 4 + 4] * x) >> 17;
-    dest[i * 4 + 2] =
-        (src[j * 4 + 2] * (131072 - x) + src[j * 4 + 6] * x) >> 17;
+
+    if (i < n - 1) {
+      dest[i * 4 + 0] =
+          (src[j * 4 + 0] * (131072 - x) + src[j * 4 + 4] * x) >> 17;
+      dest[i * 4 + 2] =
+          (src[j * 4 + 2] * (131072 - x) + src[j * 4 + 6] * x) >> 17;
+    } else {
+      dest[i * 4 + 0] = src[j * 4 + 0];
+      dest[i * 4 + 2] = src[j * 4 + 2];
+    }
 
     acc += increment;