summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/cairo/gsttimeoverlay.c15
2 files changed, 17 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index b2602257..589b4fec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-03 Michael Smith <msmith@fluendo.com>
+
+ * ext/cairo/gsttimeoverlay.c: (gst_cairo_time_overlay_transform):
+ Fix timeoverlay for non-multiple-of-4 widths. This fourcc crap
+ SUCKS.
+
2006-05-02 Stefan Kost <ensonic@users.sf.net>
* gst/alpha/gstalphacolor.c: (gst_alpha_color_transform_caps):
diff --git a/ext/cairo/gsttimeoverlay.c b/ext/cairo/gsttimeoverlay.c
index d501a543..d48242d9 100644
--- a/ext/cairo/gsttimeoverlay.c
+++ b/ext/cairo/gsttimeoverlay.c
@@ -181,6 +181,7 @@ gst_cairo_time_overlay_transform (GstBaseTransform * trans, GstBuffer * in,
int width;
int height;
int b_width;
+ int stride_y, stride_u, stride_v;
char *string;
int i, j;
unsigned char *image;
@@ -238,16 +239,22 @@ gst_cairo_time_overlay_transform (GstBaseTransform * trans, GstBuffer * in,
if (b_width > width)
b_width = width;
+ stride_y = GST_VIDEO_I420_Y_ROWSTRIDE (width);
+ stride_u = GST_VIDEO_I420_U_ROWSTRIDE (width);
+ stride_v = GST_VIDEO_I420_V_ROWSTRIDE (width);
+
memcpy (dest, src, GST_BUFFER_SIZE (in));
for (i = 0; i < timeoverlay->text_height; i++) {
for (j = 0; j < b_width; j++) {
- ((unsigned char *) dest)[i * width + j] = image[(i * width + j) * 4 + 0];
+ ((unsigned char *) dest)[i * stride_y + j] =
+ image[(i * width + j) * 4 + 0];
}
}
for (i = 0; i < timeoverlay->text_height / 2; i++) {
- memset (dest + width * height + i * (width / 2), 128, b_width / 2);
- memset (dest + width * height + (width / 2) * (height / 2) +
- i * (width / 2), 128, b_width / 2);
+ memset (dest + GST_VIDEO_I420_U_OFFSET (width, height) + i * stride_u, 128,
+ b_width / 2);
+ memset (dest + GST_VIDEO_I420_V_OFFSET (width, height) + i * stride_v, 128,
+ b_width / 2);
}
cairo_destroy (text_cairo);