summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro.d@gmail.com>2010-07-06 16:21:05 +0200
committerAlessandro Decina <alessandro.d@gmail.com>2010-07-06 16:39:18 +0200
commit3a553f4eda6f86771febddcd28e14dc06a066ea8 (patch)
treedda447e18be5440e4beb27e592a55a390519c4b2
parentf079ff3f203303b57f539b0266aa4a36f1843402 (diff)
basesink: add accessors for the enable-last-buffer property.
API: gst_base_sink_set_last_buffer_enabled API: gst_base_sink_is_last_buffer_enabled
-rw-r--r--docs/libs/gstreamer-libs-sections.txt2
-rw-r--r--libs/gst/base/gstbasesink.c64
-rw-r--r--libs/gst/base/gstbasesink.h2
-rw-r--r--tests/check/libs/basesink.c6
-rw-r--r--win32/common/libgstbase.def2
5 files changed, 62 insertions, 14 deletions
diff --git a/docs/libs/gstreamer-libs-sections.txt b/docs/libs/gstreamer-libs-sections.txt
index 44ee842c4e..7f29ecbe97 100644
--- a/docs/libs/gstreamer-libs-sections.txt
+++ b/docs/libs/gstreamer-libs-sections.txt
@@ -279,6 +279,8 @@ gst_base_sink_set_ts_offset
gst_base_sink_get_ts_offset
gst_base_sink_set_render_delay
gst_base_sink_get_render_delay
+gst_base_sink_set_last_buffer_enabled
+gst_base_sink_is_last_buffer_enabled
gst_base_sink_get_last_buffer
gst_base_sink_set_blocksize
gst_base_sink_get_blocksize
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index 5eb1301f66..13e49441c6 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -986,6 +986,55 @@ out:
}
/**
+ * gst_base_sink_set_last_buffer_enabled:
+ * @sink: the sink
+ * @enabled: the new enable-last-buffer value.
+ *
+ * Configures @sink to store the last received buffer in the last-buffer
+ * property.
+ *
+ * Since: 0.10.30
+ */
+void
+gst_base_sink_set_last_buffer_enabled (GstBaseSink * sink, gboolean enabled)
+{
+ g_return_if_fail (GST_IS_BASE_SINK (sink));
+
+ GST_OBJECT_LOCK (sink);
+ if (enabled != sink->priv->enable_last_buffer) {
+ sink->priv->enable_last_buffer = enabled;
+ if (!enabled)
+ gst_base_sink_set_last_buffer_unlocked (sink, NULL);
+ }
+ GST_OBJECT_UNLOCK (sink);
+}
+
+/**
+ * gst_base_sink_is_last_buffer_enabled:
+ * @sink: the sink
+ *
+ * Checks if @sink is currently configured to store the last received buffer in
+ * the last-buffer property.
+ *
+ * Returns: TRUE if the sink is configured to store the last received buffer.
+ *
+ * Since: 0.10.30
+ */
+gboolean
+gst_base_sink_is_last_buffer_enabled (GstBaseSink * sink)
+{
+ gboolean res;
+
+ g_return_val_if_fail (GST_IS_BASE_SINK (sink), FALSE);
+
+ GST_OBJECT_LOCK (sink);
+ res = sink->priv->enable_last_buffer;
+ GST_OBJECT_UNLOCK (sink);
+
+ return res;
+}
+
+/**
* gst_base_sink_get_latency:
* @sink: the sink
*
@@ -1254,19 +1303,8 @@ gst_base_sink_set_property (GObject * object, guint prop_id,
gst_base_sink_set_render_delay (sink, g_value_get_uint64 (value));
break;
case PROP_ENABLE_LAST_BUFFER:
- {
- gboolean enable;
- enable = g_value_get_boolean (value);
-
- GST_OBJECT_LOCK (sink);
- if (enable != sink->priv->enable_last_buffer) {
- sink->priv->enable_last_buffer = enable;
- if (!enable)
- gst_base_sink_set_last_buffer_unlocked (sink, NULL);
- }
- GST_OBJECT_UNLOCK (sink);
+ gst_base_sink_set_last_buffer_enabled (sink, g_value_get_boolean (value));
break;
- }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1304,7 +1342,7 @@ gst_base_sink_get_property (GObject * object, guint prop_id, GValue * value,
gst_value_take_buffer (value, gst_base_sink_get_last_buffer (sink));
break;
case PROP_ENABLE_LAST_BUFFER:
- g_value_set_boolean (value, sink->priv->enable_last_buffer);
+ g_value_set_boolean (value, gst_base_sink_is_last_buffer_enabled (sink));
break;
case PROP_BLOCKSIZE:
g_value_set_uint (value, gst_base_sink_get_blocksize (sink));
diff --git a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h
index f503753979..1ce7b2221d 100644
--- a/libs/gst/base/gstbasesink.h
+++ b/libs/gst/base/gstbasesink.h
@@ -218,6 +218,8 @@ GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink);
/* last buffer */
GstBuffer * gst_base_sink_get_last_buffer (GstBaseSink *sink);
+void gst_base_sink_set_last_buffer_enabled (GstBaseSink *sink, gboolean enable);
+gboolean gst_base_sink_is_last_buffer_enabled (GstBaseSink *sink);
/* latency */
gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean *live, gboolean *upstream_live,
diff --git a/tests/check/libs/basesink.c b/tests/check/libs/basesink.c
index 9fbd46c65d..f2a2fce747 100644
--- a/tests/check/libs/basesink.c
+++ b/tests/check/libs/basesink.c
@@ -53,12 +53,16 @@ GST_START_TEST (basesink_last_buffer_enabled)
gst_message_unref (msg);
/* last-buffer should be != NULL */
+ fail_unless (gst_base_sink_is_last_buffer_enabled (GST_BASE_SINK (sink))
+ == TRUE);
g_object_get (sink, "last-buffer", &last_buffer, NULL);
fail_unless (last_buffer != NULL);
gst_buffer_unref (last_buffer);
/* set enable-last-buffer to FALSE now, this should set last-buffer to NULL */
g_object_set (sink, "enable-last-buffer", FALSE, NULL);
+ fail_unless (gst_base_sink_is_last_buffer_enabled (GST_BASE_SINK (sink))
+ == FALSE);
g_object_get (sink, "last-buffer", &last_buffer, NULL);
fail_unless (last_buffer == NULL);
@@ -91,7 +95,7 @@ GST_START_TEST (basesink_last_buffer_disabled)
/* set enable-last-buffer to FALSE */
g_object_set (src, "num-buffers", 1, NULL);
- g_object_set (sink, "enable-last-buffer", FALSE, NULL);
+ gst_base_sink_set_last_buffer_enabled (GST_BASE_SINK (sink), FALSE);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
fail_unless (msg != NULL);
diff --git a/win32/common/libgstbase.def b/win32/common/libgstbase.def
index 0fc3cd3dde..c23b4bb866 100644
--- a/win32/common/libgstbase.def
+++ b/win32/common/libgstbase.def
@@ -23,10 +23,12 @@ EXPORTS
gst_base_sink_get_ts_offset
gst_base_sink_get_type
gst_base_sink_is_async_enabled
+ gst_base_sink_is_last_buffer_enabled
gst_base_sink_is_qos_enabled
gst_base_sink_query_latency
gst_base_sink_set_async_enabled
gst_base_sink_set_blocksize
+ gst_base_sink_set_last_buffer_enabled
gst_base_sink_set_max_lateness
gst_base_sink_set_qos_enabled
gst_base_sink_set_render_delay