mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-23 09:04:15 +00:00
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
This commit is contained in:
parent
f079ff3f20
commit
3a553f4eda
5 changed files with 62 additions and 14 deletions
|
@ -279,6 +279,8 @@ gst_base_sink_set_ts_offset
|
||||||
gst_base_sink_get_ts_offset
|
gst_base_sink_get_ts_offset
|
||||||
gst_base_sink_set_render_delay
|
gst_base_sink_set_render_delay
|
||||||
gst_base_sink_get_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_get_last_buffer
|
||||||
gst_base_sink_set_blocksize
|
gst_base_sink_set_blocksize
|
||||||
gst_base_sink_get_blocksize
|
gst_base_sink_get_blocksize
|
||||||
|
|
|
@ -985,6 +985,55 @@ out:
|
||||||
GST_OBJECT_UNLOCK (sink);
|
GST_OBJECT_UNLOCK (sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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:
|
* gst_base_sink_get_latency:
|
||||||
* @sink: the sink
|
* @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));
|
gst_base_sink_set_render_delay (sink, g_value_get_uint64 (value));
|
||||||
break;
|
break;
|
||||||
case PROP_ENABLE_LAST_BUFFER:
|
case PROP_ENABLE_LAST_BUFFER:
|
||||||
{
|
gst_base_sink_set_last_buffer_enabled (sink, g_value_get_boolean (value));
|
||||||
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);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
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));
|
gst_value_take_buffer (value, gst_base_sink_get_last_buffer (sink));
|
||||||
break;
|
break;
|
||||||
case PROP_ENABLE_LAST_BUFFER:
|
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;
|
break;
|
||||||
case PROP_BLOCKSIZE:
|
case PROP_BLOCKSIZE:
|
||||||
g_value_set_uint (value, gst_base_sink_get_blocksize (sink));
|
g_value_set_uint (value, gst_base_sink_get_blocksize (sink));
|
||||||
|
|
|
@ -218,6 +218,8 @@ GstClockTimeDiff gst_base_sink_get_ts_offset (GstBaseSink *sink);
|
||||||
|
|
||||||
/* last buffer */
|
/* last buffer */
|
||||||
GstBuffer * gst_base_sink_get_last_buffer (GstBaseSink *sink);
|
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 */
|
/* latency */
|
||||||
gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean *live, gboolean *upstream_live,
|
gboolean gst_base_sink_query_latency (GstBaseSink *sink, gboolean *live, gboolean *upstream_live,
|
||||||
|
|
|
@ -53,12 +53,16 @@ GST_START_TEST (basesink_last_buffer_enabled)
|
||||||
gst_message_unref (msg);
|
gst_message_unref (msg);
|
||||||
|
|
||||||
/* last-buffer should be != NULL */
|
/* 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);
|
g_object_get (sink, "last-buffer", &last_buffer, NULL);
|
||||||
fail_unless (last_buffer != NULL);
|
fail_unless (last_buffer != NULL);
|
||||||
gst_buffer_unref (last_buffer);
|
gst_buffer_unref (last_buffer);
|
||||||
|
|
||||||
/* set enable-last-buffer to FALSE now, this should set last-buffer to NULL */
|
/* set enable-last-buffer to FALSE now, this should set last-buffer to NULL */
|
||||||
g_object_set (sink, "enable-last-buffer", FALSE, 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);
|
g_object_get (sink, "last-buffer", &last_buffer, NULL);
|
||||||
fail_unless (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 */
|
/* set enable-last-buffer to FALSE */
|
||||||
g_object_set (src, "num-buffers", 1, NULL);
|
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);
|
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||||
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
|
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
|
||||||
fail_unless (msg != NULL);
|
fail_unless (msg != NULL);
|
||||||
|
|
|
@ -23,10 +23,12 @@ EXPORTS
|
||||||
gst_base_sink_get_ts_offset
|
gst_base_sink_get_ts_offset
|
||||||
gst_base_sink_get_type
|
gst_base_sink_get_type
|
||||||
gst_base_sink_is_async_enabled
|
gst_base_sink_is_async_enabled
|
||||||
|
gst_base_sink_is_last_buffer_enabled
|
||||||
gst_base_sink_is_qos_enabled
|
gst_base_sink_is_qos_enabled
|
||||||
gst_base_sink_query_latency
|
gst_base_sink_query_latency
|
||||||
gst_base_sink_set_async_enabled
|
gst_base_sink_set_async_enabled
|
||||||
gst_base_sink_set_blocksize
|
gst_base_sink_set_blocksize
|
||||||
|
gst_base_sink_set_last_buffer_enabled
|
||||||
gst_base_sink_set_max_lateness
|
gst_base_sink_set_max_lateness
|
||||||
gst_base_sink_set_qos_enabled
|
gst_base_sink_set_qos_enabled
|
||||||
gst_base_sink_set_render_delay
|
gst_base_sink_set_render_delay
|
||||||
|
|
Loading…
Reference in a new issue