diff --git a/subprojects/gst-docs/symbols/symbol_index.json b/subprojects/gst-docs/symbols/symbol_index.json index 9230d00de2..c2001df1a6 100644 --- a/subprojects/gst-docs/symbols/symbol_index.json +++ b/subprojects/gst-docs/symbols/symbol_index.json @@ -15477,6 +15477,8 @@ "GstShout2send:timeout", "GstShout2send:url", "GstShout2send:username", + "GstShout2send:send-title-info", + "GstShout2send:user-agent", "GstSidClock", "GstSidClock::ntsc", "GstSidClock::pal", @@ -64940,6 +64942,8 @@ "shout2send:timeout", "shout2send:url", "shout2send:username", + "shout2send:send-title-info", + "shout2send:user-agent", "siddec", "siddec:blocksize", "siddec:clock", diff --git a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json index 6ea3cbec48..7f29364c6c 100644 --- a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json +++ b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json @@ -21672,6 +21672,18 @@ "type": "gboolean", "writable": true }, + "send-title-info": { + "blurb": "Update stream metadata with song title and artist information", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, "streamname": { "blurb": "name of the stream", "conditionally-available": false, @@ -21710,6 +21722,18 @@ "type": "gchararray", "writable": true }, + "user-agent": { + "blurb": "User agent of the source", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "GStreamer 1.21.0.1", + "mutable": "null", + "readable": true, + "type": "gchararray", + "writable": true + }, "username": { "blurb": "username", "conditionally-available": false, diff --git a/subprojects/gst-plugins-good/ext/shout2/gstshout2.c b/subprojects/gst-plugins-good/ext/shout2/gstshout2.c index 0c32b6aecb..d2a224d990 100644 --- a/subprojects/gst-plugins-good/ext/shout2/gstshout2.c +++ b/subprojects/gst-plugins-good/ext/shout2/gstshout2.c @@ -72,22 +72,26 @@ enum ARG_MOUNT, /* mountpoint of stream (icecast only) */ ARG_URL, /* the stream's homepage URL */ - ARG_TIMEOUT /* The max amount of time to wait for + ARG_TIMEOUT, /* The max amount of time to wait for network activity */ + ARG_SEND_TITLE_INFO, /* If stream song title updates should be made */ + ARG_USERAGENT /* User-Agent setting */ }; #define DEFAULT_IP "127.0.0.1" #define DEFAULT_PORT 8000 #define DEFAULT_PASSWORD "hackme" #define DEFAULT_USERNAME "source" -#define DEFAULT_PUBLIC FALSE +#define DEFAULT_PUBLIC FALSE #define DEFAULT_STREAMNAME "" #define DEFAULT_DESCRIPTION "" +#define DEFAULT_USERAGENT "GStreamer " PACKAGE_VERSION #define DEFAULT_GENRE "" #define DEFAULT_MOUNT "" #define DEFAULT_URL "" #define DEFAULT_PROTOCOL SHOUT2SEND_PROTOCOL_HTTP #define DEFAULT_TIMEOUT 10000 +#define DEFAULT_SEND_TITLE_INFO TRUE #ifdef SHOUT_FORMAT_WEBM #define WEBM_CAPS "; video/webm; audio/webm" @@ -219,6 +223,32 @@ gst_shout2send_class_init (GstShout2sendClass * klass) GST_TYPE_SHOUT_PROTOCOL, DEFAULT_PROTOCOL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstShout2send:send-title-info + * + * Update stream metadata with song title and artist information + * + * Since: 1.22 + **/ + + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_SEND_TITLE_INFO, + g_param_spec_boolean ("send-title-info", "send-title-info", + "Update stream metadata with song title and artist information", + DEFAULT_SEND_TITLE_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GstShout2send:user-agent + * + * User agent of the source + * + * Since: 1.22 + **/ + + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_USERAGENT, + g_param_spec_string ("user-agent", "user-agent", + "User agent of the source", DEFAULT_USERAGENT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* icecast only */ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MOUNT, @@ -296,6 +326,8 @@ gst_shout2send_init (GstShout2send * shout2send) shout2send->songmetadata = NULL; shout2send->songartist = NULL; shout2send->songtitle = NULL; + shout2send->send_title_info = DEFAULT_SEND_TITLE_INFO; + shout2send->user_agent = g_strdup (DEFAULT_USERAGENT); } static void @@ -309,6 +341,7 @@ gst_shout2send_finalize (GstShout2send * shout2send) g_free (shout2send->genre); g_free (shout2send->mount); g_free (shout2send->url); + g_free (shout2send->user_agent); gst_tag_list_unref (shout2send->tags); @@ -358,6 +391,10 @@ set_shout_metadata (const GstTagList * list, const gchar * tag, if (*shout_metadata != NULL) g_free (*shout_metadata); + if (!shout2send->send_title_info) { + *shout_metadata = NULL; + return; + } if (*song_title && *song_artist) { *shout_metadata = g_strdup_printf ("%s - %s", *song_artist, *song_title); @@ -461,7 +498,6 @@ gst_shout2send_start (GstBaseSink * basesink) GstShout2send *sink = GST_SHOUT2SEND (basesink); const gchar *cur_prop; gshort proto = 3; - gchar *version_string; GST_DEBUG_OBJECT (sink, "starting"); @@ -530,15 +566,12 @@ gst_shout2send_start (GstBaseSink * basesink) if (shout_set_user (sink->conn, sink->username) != SHOUTERR_SUCCESS) goto set_failed; - version_string = gst_version_string (); cur_prop = "agent"; - GST_DEBUG_OBJECT (sink, "setting %s: %s", cur_prop, version_string); - if (shout_set_agent (sink->conn, version_string) != SHOUTERR_SUCCESS) { - g_free (version_string); + GST_DEBUG_OBJECT (sink, "setting %s: %s", cur_prop, sink->user_agent); + if (shout_set_agent (sink->conn, sink->user_agent) != SHOUTERR_SUCCESS) { goto set_failed; } - g_free (version_string); return TRUE; /* ERROR */ @@ -876,6 +909,13 @@ gst_shout2send_set_property (GObject * object, guint prop_id, case ARG_TIMEOUT: shout2send->timeout = g_value_get_uint (value); break; + case ARG_SEND_TITLE_INFO: + shout2send->send_title_info = g_value_get_boolean (value); + break; + case ARG_USERAGENT: + g_free (shout2send->user_agent); + shout2send->user_agent = g_value_dup_string (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -927,6 +967,12 @@ gst_shout2send_get_property (GObject * object, guint prop_id, case ARG_TIMEOUT: g_value_set_uint (value, shout2send->timeout); break; + case ARG_SEND_TITLE_INFO: + g_value_set_boolean (value, shout2send->send_title_info); + break; + case ARG_USERAGENT: + g_value_set_string (value, shout2send->user_agent); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/subprojects/gst-plugins-good/ext/shout2/gstshout2.h b/subprojects/gst-plugins-good/ext/shout2/gstshout2.h index 904d289b33..100e0fdf74 100644 --- a/subprojects/gst-plugins-good/ext/shout2/gstshout2.h +++ b/subprojects/gst-plugins-good/ext/shout2/gstshout2.h @@ -68,6 +68,8 @@ struct _GstShout2send { gchar *songmetadata; gchar *songartist; gchar *songtitle; + gboolean send_title_info; + gchar *user_agent; gint format; guint timeout;