summaryrefslogtreecommitdiffstats
path: root/src/GSTInput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GSTInput.cpp')
-rw-r--r--src/GSTInput.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/GSTInput.cpp b/src/GSTInput.cpp
index 97bcc0f..aa46003 100644
--- a/src/GSTInput.cpp
+++ b/src/GSTInput.cpp
@@ -209,28 +209,42 @@ void GSTInput::process()
gst_message_parse_tag(msg, &tags);
//fprintf(stderr, "Got tags from element %s\n", GST_OBJECT_NAME(msg->src));
- string new_title;
+ struct user_data_t {
+ string new_artist;
+ string new_title;
+ } user_data;
auto extract_title = [](const GstTagList *list, const gchar *tag, void *user_data) {
GValue val = { 0, };
- auto new_title = (string*)user_data;
+ auto data = (user_data_t*)user_data;
gst_tag_list_copy_value(&val, list, tag);
- if (strcmp(tag, "title") == 0 and G_VALUE_HOLDS_STRING(&val)) {
- *new_title = g_value_dup_string(&val);
+ if (G_VALUE_HOLDS_STRING(&val)) {
+ if (strcmp(tag, "title") == 0) {
+ data->new_title = g_value_get_string(&val);
+ }
+ else if (strcmp(tag, "artist") == 0) {
+ data->new_artist = g_value_get_string(&val);
+ }
}
g_value_unset(&val);
};
- gst_tag_list_foreach(tags, extract_title, &new_title);
+ gst_tag_list_foreach(tags, extract_title, &user_data);
gst_tag_list_unref(tags);
+
{
std::lock_guard<std::mutex> lock(m_nowplaying_mutex);
- m_nowplaying.useNowPlaying(new_title);
+ if (user_data.new_artist.empty()) {
+ m_nowplaying.useNowPlaying(user_data.new_title);
+ }
+ else {
+ m_nowplaying.useArtistTitle(user_data.new_artist, user_data.new_title);
+ }
}
break;
}