diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2011-01-09 13:10:02 +0100 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2011-01-09 13:10:02 +0100 |
commit | 264591d505fab7a8deb6972de728c2b6c951202c (patch) | |
tree | ac2dc4afb0443461aff8057ec12df21448c41c11 | |
parent | 0e0bc0a55eda4c4cc5b6d12ff8aa36775dbb6a76 (diff) |
video-texture: add buffer-mode property
Add a buffer-mode property and methods to get/set the new enum property. This
property will be used to influence the buffering strategy.
-rw-r--r-- | clutter-gst/clutter-gst-video-texture.c | 69 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-video-texture.h | 21 | ||||
-rw-r--r-- | doc/reference/clutter-gst-sections.txt | 3 |
3 files changed, 92 insertions, 1 deletions
diff --git a/clutter-gst/clutter-gst-video-texture.c b/clutter-gst/clutter-gst-video-texture.c index b4a58b2..2a70718 100644 --- a/clutter-gst/clutter-gst-video-texture.c +++ b/clutter-gst/clutter-gst-video-texture.c @@ -91,6 +91,7 @@ struct _ClutterGstVideoTexturePrivate CoglColor idle_color_unpre; GstSeekFlags seek_flags; /* flags for the seek in set_progress(); */ + ClutterGstBufferMode buffer_mode; }; enum { @@ -109,7 +110,8 @@ enum { PROP_IDLE_MATERIAL, PROP_USER_AGENT, - PROP_SEEK_FLAGS + PROP_SEEK_FLAGS, + PROP_BUFFER_MODE }; #define TICK_TIMEOUT 0.5 @@ -993,6 +995,11 @@ clutter_gst_video_texture_set_property (GObject *object, g_value_get_flags (value)); break; + case PROP_BUFFER_MODE: + clutter_gst_video_texture_set_buffer_mode (video_texture, + g_value_get_enum (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -1072,6 +1079,15 @@ clutter_gst_video_texture_get_property (GObject *object, } break; + case PROP_BUFFER_MODE: + { + ClutterGstBufferMode buffer_mode; + + buffer_mode = clutter_gst_video_texture_get_buffer_mode (video_texture); + g_value_set_enum (value, buffer_mode); + } + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -1141,6 +1157,14 @@ clutter_gst_video_texture_class_init (ClutterGstVideoTextureClass *klass) CLUTTER_GST_SEEK_FLAG_NONE, CLUTTER_GST_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_SEEK_FLAGS, pspec); + + pspec = g_param_spec_enum ("buffer-mode", + "Buffer Mode", + "The buffer mode to use", + CLUTTER_GST_TYPE_BUFFER_MODE, + CLUTTER_GST_BUFFER_MODE_LOW_HIGH, + CLUTTER_GST_PARAM_READWRITE); + g_object_class_install_property (object_class, PROP_BUFFER_MODE, pspec); } static void @@ -1689,3 +1713,46 @@ clutter_gst_video_texture_set_seek_flags (ClutterGstVideoTexture *texture, else if (flags & CLUTTER_GST_SEEK_FLAG_ACCURATE) priv->seek_flags = GST_SEEK_FLAG_ACCURATE; } + +/** + * clutter_gst_video_texture_get_buffer_mode: + * @texture: a #ClutterGstVideoTexture + * + * Get the current value of the buffer-mode property. + * + * Return value: a #ClutterGstBufferMode + * + * Since: 1.4 + */ +ClutterGstBufferMode +clutter_gst_video_texture_get_buffer_mode (ClutterGstVideoTexture *texture) +{ + ClutterGstVideoTexturePrivate *priv; + + g_return_val_if_fail (CLUTTER_GST_IS_VIDEO_TEXTURE (texture), + CLUTTER_GST_BUFFER_MODE_LOW_HIGH); + priv = texture->priv; + + return priv->buffer_mode; +} + +/** + * clutter_gst_video_texture_set_buffer_mode: + * @texture: a #ClutterGstVideoTexture + * @mode: a #ClutterGstBufferMode + * + * Select the buffer mode to use. + * + * Since: 1.4 + */ +void +clutter_gst_video_texture_set_buffer_mode (ClutterGstVideoTexture *texture, + ClutterGstBufferMode mode) +{ + ClutterGstVideoTexturePrivate *priv; + + g_return_if_fail (CLUTTER_GST_IS_VIDEO_TEXTURE (texture)); + priv = texture->priv; + + priv->buffer_mode = mode; +} diff --git a/clutter-gst/clutter-gst-video-texture.h b/clutter-gst/clutter-gst-video-texture.h index eba4468..63ee770 100644 --- a/clutter-gst/clutter-gst-video-texture.h +++ b/clutter-gst/clutter-gst-video-texture.h @@ -76,6 +76,24 @@ typedef enum _ClutterGstSeekFlags CLUTTER_GST_SEEK_FLAG_ACCURATE = 1 << 0 } ClutterGstSeekFlags; +/** + * ClutterGstBufferMode: + * @CLUTTER_GST_BUFFER_MODE_LOW_HIGH: Low/high watermark buffering, default. + * @CLUTTER_GST_BUFFER_MODE_NO_REBUFFER: Try to buffer enough data to play the + * media without having to rebuffer. + * + * Different bufferring modes that can be given to + * clutter_gst_video_texture_set_buffer_mode(). + * + * Since: 1.4 + */ +typedef enum _ClutterGstBufferMode +{ + CLUTTER_GST_BUFFER_MODE_LOW_HIGH = 0, + CLUTTER_GST_BUFFER_MODE_NO_REBUFFER = 1 +} ClutterGstBufferMode; + + typedef struct _ClutterGstVideoTexture ClutterGstVideoTexture; typedef struct _ClutterGstVideoTextureClass ClutterGstVideoTextureClass; typedef struct _ClutterGstVideoTexturePrivate ClutterGstVideoTexturePrivate; @@ -129,6 +147,9 @@ ClutterGstSeekFlags clutter_gst_video_texture_get_seek_flags (ClutterGstVid void clutter_gst_video_texture_set_seek_flags (ClutterGstVideoTexture *texture, ClutterGstSeekFlags flags); +ClutterGstBufferMode clutter_gst_video_texture_get_buffer_mode (ClutterGstVideoTexture *texture); +void clutter_gst_video_texture_set_buffer_mode (ClutterGstVideoTexture *texture, + ClutterGstBufferMode mode); G_END_DECLS #endif /* __CLUTTER_GST_VIDEO_TEXTURE_H__ */ diff --git a/doc/reference/clutter-gst-sections.txt b/doc/reference/clutter-gst-sections.txt index b88d287..7e04347 100644 --- a/doc/reference/clutter-gst-sections.txt +++ b/doc/reference/clutter-gst-sections.txt @@ -2,6 +2,7 @@ <FILE>clutter-gst-video-texture</FILE> <TITLE>ClutterGstVideoTexture</TITLE> ClutterGstSeekFlags +ClutterGstBufferMode ClutterGstVideoTexture ClutterGstVideoTextureClass clutter_gst_video_texture_new @@ -12,6 +13,8 @@ clutter_gst_video_texture_get_user_agent clutter_gst_video_texture_set_user_agent clutter_gst_video_texture_set_seek_flags clutter_gst_video_texture_get_seek_flags +clutter_gst_video_texture_set_buffer_mode +clutter_gst_video_texture_get_buffer_mode <SUBSECTION Standard> clutter_gst_seek_flags_get_type CLUTTER_GST_VIDEO_TEXTURE |