summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2009-09-04 12:19:10 +0100
committerDamien Lespiau <damien.lespiau@intel.com>2009-09-04 12:19:10 +0100
commit2f9ac6869b832f8d07e367e1cceb68f688cae347 (patch)
tree687465cc117020d43a8b078983294cab05df27f6
parentbcd6bede7751e3b52002ad759129db4fcdae7a17 (diff)
downloadclutter-gst-2f9ac6869b832f8d07e367e1cceb68f688cae347.tar.gz
[VideoSink] Fix remaining stride issues with the YUV upload
Rows are always a multiple of 4 in GStreamer buffers, fix the case where the width of the video is not a multiple of 4.
-rw-r--r--clutter-gst/clutter-gst-video-sink.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/clutter-gst/clutter-gst-video-sink.c b/clutter-gst/clutter-gst-video-sink.c
index 034c702..3281419 100644
--- a/clutter-gst/clutter-gst-video-sink.c
+++ b/clutter-gst/clutter-gst-video-sink.c
@@ -419,14 +419,15 @@ clutter_gst_yv12_upload (ClutterGstVideoSink *sink,
GstBuffer *buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
- gint row_stride = GST_ROUND_UP_4 (priv->width / 2);
+ gint y_row_stride = GST_ROUND_UP_4 (priv->width);
+ gint uv_row_stride = GST_ROUND_UP_4 (priv->width / 2);
CoglHandle y_tex = cogl_texture_new_from_data (priv->width,
priv->height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_G_8,
COGL_PIXEL_FORMAT_G_8,
- priv->width,
+ y_row_stride,
GST_BUFFER_DATA (buffer));
clutter_texture_set_cogl_texture (priv->texture, y_tex);
@@ -443,19 +444,20 @@ clutter_gst_yv12_upload (ClutterGstVideoSink *sink,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_G_8,
COGL_PIXEL_FORMAT_G_8,
- row_stride,
+ uv_row_stride,
GST_BUFFER_DATA (buffer) +
- (priv->width * priv->height));
-
- priv->u_tex = cogl_texture_new_from_data (priv->width / 2,
- priv->height / 2,
- COGL_TEXTURE_NO_SLICING,
- COGL_PIXEL_FORMAT_G_8,
- COGL_PIXEL_FORMAT_G_8,
- row_stride,
- GST_BUFFER_DATA (buffer)
- + (priv->width * priv->height)
- + (row_stride * priv->height / 2));
+ (y_row_stride * priv->height));
+
+ priv->u_tex =
+ cogl_texture_new_from_data (priv->width / 2,
+ priv->height / 2,
+ COGL_TEXTURE_NO_SLICING,
+ COGL_PIXEL_FORMAT_G_8,
+ COGL_PIXEL_FORMAT_G_8,
+ uv_row_stride,
+ GST_BUFFER_DATA (buffer)
+ + (y_row_stride * priv->height)
+ + (uv_row_stride * priv->height / 2));
}
static void