summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2011-01-09 13:10:02 +0100
committerWim Taymans <wim.taymans@gmail.com>2011-01-09 13:10:02 +0100
commit264591d505fab7a8deb6972de728c2b6c951202c (patch)
treeac2dc4afb0443461aff8057ec12df21448c41c11
parent0e0bc0a55eda4c4cc5b6d12ff8aa36775dbb6a76 (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.c69
-rw-r--r--clutter-gst/clutter-gst-video-texture.h21
-rw-r--r--doc/reference/clutter-gst-sections.txt3
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