summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2016-01-08 21:41:56 +0000
committerSebastian Dröge <sebastian@centricular.com>2016-11-04 19:36:25 +0200
commit158b25d87717ded884681a4771c19ff02ccb2feb (patch)
tree369ceef3954925c7cb1a26ad21dfcbd449cf383b
parent1fc224999d9dab8be2587971906621ac70795064 (diff)
downloadgstreamer-plugins-bad-158b25d87717ded884681a4771c19ff02ccb2feb.tar.gz
bayer: fix stride inconsistencies for odd widths
Consistently use GST_ROUND_UP_4(width) as stride for bayer buffers. Bayer data will usually come in widths that are multiples of 4 anyway, so hopefully this should not have any adverse impact on anyone in practice. Before, bayer2rgb required input buffers to are sized accordingly, but then didn't actually round up when calculating row offsets. rgb2bayer didn't use a rounded stride nor buffer size. https://bugzilla.gnome.org/show_bug.cgi?id=752014
-rw-r--r--gst/bayer/gstbayer2rgb.c2
-rw-r--r--gst/bayer/gstrgb2bayer.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c
index bf723b107..de356edff 100644
--- a/gst/bayer/gstbayer2rgb.c
+++ b/gst/bayer/gstbayer2rgb.c
@@ -470,7 +470,7 @@ gst_bayer2rgb_transform (GstBaseTransform * base, GstBuffer * inbuf,
output = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
gst_bayer2rgb_process (filter, output, frame.info.stride[0],
- map.data, filter->width);
+ map.data, GST_ROUND_UP_4 (filter->width));
gst_video_frame_unmap (&frame);
gst_buffer_unmap (inbuf, &map);
diff --git a/gst/bayer/gstrgb2bayer.c b/gst/bayer/gstrgb2bayer.c
index 21e78119f..787fe9950 100644
--- a/gst/bayer/gstrgb2bayer.c
+++ b/gst/bayer/gstrgb2bayer.c
@@ -173,7 +173,7 @@ gst_rgb2bayer_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
name = gst_structure_get_name (structure);
/* Our name must be either video/x-bayer video/x-raw */
if (g_str_equal (name, "video/x-bayer")) {
- *size = width * height;
+ *size = GST_ROUND_UP_4 (width) * height;
return TRUE;
} else {
/* For output, calculate according to format */
@@ -249,7 +249,7 @@ gst_rgb2bayer_transform (GstBaseTransform * trans, GstBuffer * inbuf,
src = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
for (j = 0; j < height; j++) {
- guint8 *dest_line = dest + width * j;
+ guint8 *dest_line = dest + GST_ROUND_UP_4 (width) * j;
guint8 *src_line = src + frame.info.stride[0] * j;
for (i = 0; i < width; i++) {