diff --git a/gst-libs/gst/audio/gstbaseaudiosink.c b/gst-libs/gst/audio/gstbaseaudiosink.c index 29a2dc2d62..38c40e4c19 100644 --- a/gst-libs/gst/audio/gstbaseaudiosink.c +++ b/gst-libs/gst/audio/gstbaseaudiosink.c @@ -80,13 +80,17 @@ enum #define DEFAULT_PROVIDE_CLOCK TRUE #define DEFAULT_SLAVE_METHOD GST_BASE_AUDIO_SINK_SLAVE_SKEW +/* FIXME, enable pull mode when clock slaving and trick modes are figured out */ +#define DEFAULT_CAN_ACTIVATE_PULL FALSE + enum { PROP_0, PROP_BUFFER_TIME, PROP_LATENCY_TIME, PROP_PROVIDE_CLOCK, - PROP_SLAVE_METHOD + PROP_SLAVE_METHOD, + PROP_CAN_ACTIVATE_PULL }; GType @@ -200,6 +204,11 @@ gst_base_audio_sink_class_init (GstBaseAudioSinkClass * klass) GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD, DEFAULT_SLAVE_METHOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL, + g_param_spec_boolean ("can-activate-pull", "Allow Pull Scheduling", + "Allow pull-based scheduling", DEFAULT_CAN_ACTIVATE_PULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_base_audio_sink_change_state); gstelement_class->provide_clock = @@ -239,9 +248,7 @@ gst_base_audio_sink_init (GstBaseAudioSink * baseaudiosink, (GstAudioClockGetTimeFunc) gst_base_audio_sink_get_time, baseaudiosink); GST_BASE_SINK (baseaudiosink)->can_activate_push = TRUE; - /* FIXME, enable pull mode when segments, latency, state changes, negotiation - * and clock slaving are figured out */ - GST_BASE_SINK (baseaudiosink)->can_activate_pull = FALSE; + GST_BASE_SINK (baseaudiosink)->can_activate_pull = DEFAULT_CAN_ACTIVATE_PULL; /* install some custom pad_query functions */ gst_pad_set_query_function (GST_BASE_SINK_PAD (baseaudiosink), @@ -574,6 +581,9 @@ gst_base_audio_sink_set_property (GObject * object, guint prop_id, case PROP_SLAVE_METHOD: gst_base_audio_sink_set_slave_method (sink, g_value_get_enum (value)); break; + case PROP_CAN_ACTIVATE_PULL: + GST_BASE_SINK (sink)->can_activate_pull = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -601,6 +611,9 @@ gst_base_audio_sink_get_property (GObject * object, guint prop_id, case PROP_SLAVE_METHOD: g_value_set_enum (value, gst_base_audio_sink_get_slave_method (sink)); break; + case PROP_CAN_ACTIVATE_PULL: + g_value_set_boolean (value, GST_BASE_SINK (sink)->can_activate_pull); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break;