video: respect stride alignment when calculating planes offsets
authorArnaud Vrac <avrac@freebox.fr>
Thu, 18 Jul 2013 12:13:33 +0000 (14:13 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Thu, 18 Jul 2013 14:23:33 +0000 (16:23 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=694299

gst-libs/gst/video/video-info.c

index 25fb47a..4f569ed 100644 (file)
@@ -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;
   }
 }