[gst-cvs] gst-plugins-base: videotestsrc: Fix YVU9 and YUV9

Benjamin Otte company at kemper.freedesktop.org
Thu Sep 10 01:59:16 PDT 2009


Module: gst-plugins-base
Branch: master
Commit: 7ed2531b2781d74055bda5823a296bda2b2dd439
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=7ed2531b2781d74055bda5823a296bda2b2dd439

Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Sep 10 10:43:37 2009 +0200

videotestsrc: Fix YVU9 and YUV9

- Buffer sizes were computed different from ffmpegcolorspace
- Green bar on right size for widths not divisable by 4

---

 gst/videotestsrc/videotestsrc.c |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/gst/videotestsrc/videotestsrc.c b/gst/videotestsrc/videotestsrc.c
index 88b49f2..81a8277 100644
--- a/gst/videotestsrc/videotestsrc.c
+++ b/gst/videotestsrc/videotestsrc.c
@@ -1865,11 +1865,11 @@ paint_setup_YVU9 (paintinfo * p, unsigned char *dest)
 
   p->yp = dest;
   p->ystride = GST_ROUND_UP_4 (p->width);
-  p->vp = p->yp + p->ystride * GST_ROUND_UP_4 (p->height);
+  p->vp = p->yp + p->ystride * h;
   p->vstride = GST_ROUND_UP_4 (p->ystride / 4);
-  p->up = p->vp + p->vstride * GST_ROUND_UP_4 (h / 4);
+  p->up = p->vp + p->vstride * h / 4;
   p->ustride = GST_ROUND_UP_4 (p->ystride / 4);
-  p->endptr = p->up + p->ustride * GST_ROUND_UP_4 (h / 4);
+  p->endptr = p->up + p->ustride * h / 4;
 }
 
 static void
@@ -1882,22 +1882,24 @@ paint_setup_YUV9 (paintinfo * p, unsigned char *dest)
   p->ystride = GST_ROUND_UP_4 (p->width);
   p->up = p->yp + p->ystride * h;
   p->ustride = GST_ROUND_UP_4 (p->ystride / 4);
-  p->vp = p->up + p->ustride * GST_ROUND_UP_4 (h / 4);
+  p->vp = p->up + p->ustride * h / 4;
   p->vstride = GST_ROUND_UP_4 (p->ystride / 4);
-  p->endptr = p->vp + p->vstride * GST_ROUND_UP_4 (h / 4);
+  p->endptr = p->vp + p->vstride * h / 4;
 }
 
 static void
 paint_hline_YUV9 (paintinfo * p, int x, int y, int w)
 {
   int x1 = x / 4;
-  int x2 = (x + w) / 4;
+  int w1 = (x + w) / 4 - x1;
   int offset = y * p->ystride;
   int offset1 = (y / 4) * p->ustride;
 
+  if (x + w == p->width)
+    w1++;
   oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
-  oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, x2 - x1);
-  oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, x2 - x1);
+  oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
+  oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
 }
 
 static void





More information about the Gstreamer-commits mailing list