ext/cairo/gsttimeoverlay.c: Fix timeoverlay for non-multiple-of-4 widths. This fourcc crap

Original commit message from CVS:
* ext/cairo/gsttimeoverlay.c: (gst_cairo_time_overlay_transform):
Fix timeoverlay for non-multiple-of-4 widths. This fourcc crap
SUCKS.
This commit is contained in:
Michael Smith 2006-05-02 22:34:52 +00:00
parent 7ce14b6bd8
commit 757797ef3a
2 changed files with 17 additions and 4 deletions

View file

@ -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):

View file

@ -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);