basesink: add accessors for the enable-last-buffer property.
authorAlessandro Decina <alessandro.d@gmail.com>
Tue, 6 Jul 2010 14:21:05 +0000 (16:21 +0200)
committerAlessandro Decina <alessandro.d@gmail.com>
Tue, 6 Jul 2010 14:39:18 +0000 (16:39 +0200)
API: gst_base_sink_set_last_buffer_enabled
API: gst_base_sink_is_last_buffer_enabled

docs/libs/gstreamer-libs-sections.txt
libs/gst/base/gstbasesink.c
libs/gst/base/gstbasesink.h
tests/check/libs/basesink.c
win32/common/libgstbase.def

index 44ee842..7f29ecb 100644 (file)
@@ -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
index 5eb1301..13e4944 100644 (file)
@@ -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));
index f503753..1ce7b22 100644 (file)
@@ -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,
index 9fbd46c..f2a2fce 100644 (file)
@@ -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);
index 0fc3cd3..c23b4bb 100644 (file)
@@ -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