From 28e1dadbfaa403679e69f8173d1aa2c7500fd556 Mon Sep 17 00:00:00 2001 From: Arnaud Vrac Date: Thu, 18 Jul 2013 14:13:33 +0200 Subject: [PATCH] video: respect stride alignment when calculating planes offsets https://bugzilla.gnome.org/show_bug.cgi?id=694299 --- gst-libs/gst/video/video-info.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gst-libs/gst/video/video-info.c b/gst-libs/gst/video/video-info.c index 25fb47a..4f569ed 100644 --- a/gst-libs/gst/video/video-info.c +++ b/gst-libs/gst/video/video-info.c @@ -767,6 +767,7 @@ gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align) for (i = 0; i < n_planes; i++) { gint vedge, hedge, comp; + guint offset; /* Find the component for this plane, FIXME, we assume the plane number and * component number is the same for now, for scaling the dimensions this is @@ -780,10 +781,15 @@ gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align) vedge = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo, comp, align->padding_top); - GST_DEBUG ("plane %d: comp: %d, hedge %d vedge %d align %d stride %d", i, - comp, hedge, vedge, align->stride_align[i], info->stride[i]); - - info->offset[i] += (vedge * info->stride[i]) + + offset = (vedge * info->stride[i]) + (hedge * GST_VIDEO_FORMAT_INFO_PSTRIDE (vinfo, comp)); + + offset = (offset + align->stride_align[i]) & ~align->stride_align[i]; + + GST_DEBUG ("plane %d: comp: %d, hedge %d vedge %d align %d stride %d " + "offset %u", i, comp, hedge, vedge, align->stride_align[i], + info->stride[i], offset); + + info->offset[i] += offset; } } -- 2.7.4