From: Sangchul Lee Date: Tue, 25 Feb 2020 07:26:05 +0000 (+0900) Subject: pulsesink: Add property to apply render delay automatically based on the latency... X-Git-Tag: submit/tizen/20200312.101118^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fgst-plugins-good.git;a=commitdiff_plain;h=48e10bf098cdf998aea16745af6a2c0f82dcd4bc pulsesink: Add property to apply render delay automatically based on the latency change Change-Id: I496fca57bc627a3e09170ba32c9b50bccbc00cc9 Signed-off-by: Sangchul Lee --- diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index fca5601..b5eadb4 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -75,7 +75,8 @@ GST_DEBUG_CATEGORY_EXTERN (pulse_debug); #define DEFAULT_MUTE FALSE #define MAX_VOLUME 10.0 #ifdef __TIZEN__ -#define DEFAULT_AUDIO_LATENCY "mid" +#define DEFAULT_AUDIO_LATENCY "mid" +#define DEFAULT_AUTO_RENDER_DELAY FALSE #endif /* __TIZEN__ */ enum @@ -91,6 +92,7 @@ enum PROP_STREAM_PROPERTIES, #ifdef __TIZEN__ PROP_AUDIO_LATENCY, + PROP_AUTO_RENDER_DELAY, #endif /* __TIZEN__ */ PROP_LAST }; @@ -782,6 +784,19 @@ gst_pulsering_stream_latency_cb (pa_stream * s, void *userdata) GST_TIMEVAL_TO_TIME (info->timestamp), info->write_index_corrupt, info->write_index, info->read_index_corrupt, info->read_index, info->sink_usec, sink_usec); +#ifdef __TIZEN__ + if (!psink->auto_render_delay) + return; + + if (sink_usec < info->sink_usec) + gst_base_sink_set_render_delay (GST_BASE_SINK(psink), + (info->sink_usec - sink_usec) * G_GINT64_CONSTANT (1000)); + else + gst_base_sink_set_render_delay (GST_BASE_SINK(psink), 0); + + GST_DEBUG_OBJECT (psink, + "Current render delay is %llu", gst_base_sink_get_render_delay (GST_BASE_SINK(psink))); +#endif } static void @@ -2084,6 +2099,12 @@ gst_pulsesink_class_init (GstPulseSinkClass * klass) "Audio Backend Latency (\"low\": Low Latency, \"mid\": Mid Latency, \"high\": High Latency)", DEFAULT_AUDIO_LATENCY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, + PROP_AUTO_RENDER_DELAY, + g_param_spec_boolean ("auto-render-delay", "Auto Render Delay", + "Apply render delay automatically", DEFAULT_AUTO_RENDER_DELAY, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); #endif /* __TIZEN__ */ gst_element_class_set_static_metadata (gstelement_class, @@ -2493,6 +2514,7 @@ gst_pulsesink_init (GstPulseSink * pulsesink) pulsesink->proplist = NULL; #ifdef __TIZEN__ pulsesink->latency = g_strdup (DEFAULT_AUDIO_LATENCY); + pulsesink->auto_render_delay = DEFAULT_AUTO_RENDER_DELAY; pulsesink->proplist = pa_proplist_new(); pa_proplist_sets(pulsesink->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesink->latency); #ifdef PCM_DUMP_ENABLE @@ -3078,6 +3100,10 @@ gst_pulsesink_set_property (GObject * object, pa_proplist_sets(pulsesink->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesink->latency); GST_DEBUG_OBJECT(pulsesink, "latency(%s)", pulsesink->latency); break; + case PROP_AUTO_RENDER_DELAY: + pulsesink->auto_render_delay = g_value_get_boolean (value); + GST_DEBUG_OBJECT (pulsesink, "setting auto-render-delay to %d", g_value_get_boolean (value)); + break; #endif /* __TIZEN__ */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -3145,6 +3171,9 @@ gst_pulsesink_get_property (GObject * object, case PROP_AUDIO_LATENCY: g_value_set_string (value, pulsesink->latency); break; + case PROP_AUTO_RENDER_DELAY: + g_value_set_boolean (value, pulsesink->auto_render_delay); + break; #endif /* __TIZEN__ */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); diff --git a/ext/pulse/pulsesink.h b/ext/pulse/pulsesink.h index 8dca8fc..446bd27 100644 --- a/ext/pulse/pulsesink.h +++ b/ext/pulse/pulsesink.h @@ -84,6 +84,7 @@ struct _GstPulseSink #ifdef __TIZEN__ gchar *latency; + gboolean auto_render_delay:1; #ifdef PCM_DUMP_ENABLE gint need_dump_input; FILE *dump_fd_input;