diff options
author | Damien Lespiau <damien.lespiau@intel.com> | 2009-09-04 12:19:10 +0100 |
---|---|---|
committer | Damien Lespiau <damien.lespiau@intel.com> | 2009-09-04 12:19:10 +0100 |
commit | 2f9ac6869b832f8d07e367e1cceb68f688cae347 (patch) | |
tree | 687465cc117020d43a8b078983294cab05df27f6 | |
parent | bcd6bede7751e3b52002ad759129db4fcdae7a17 (diff) | |
download | clutter-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.c | 30 |
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 |