diff options
Diffstat (limited to '')
-rw-r--r-- | src/decoder_api.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/decoder_api.c b/src/decoder_api.c index 6d577ec79..1f51cb1f6 100644 --- a/src/decoder_api.c +++ b/src/decoder_api.c @@ -176,14 +176,32 @@ decoder_data(struct decoder *decoder, char *data; if (is != NULL && !decoder->stream_tag_sent) { - struct tag *tag1 = tag_new(), *tag2; - - tag2 = tag_add_stream_tags(tag1, is); - tag_free(tag1); - - if (tag2 != NULL) { - music_pipe_tag(tag2); - tag_free(tag2); + const struct tag *src; + struct tag *tag1, *tag2; + + /* base is the current song's tag, or an empty new + tag if the song has no tag */ + src = dc.current_song->tag; + if (src == NULL) + src = tag1 = tag_new(); + else + tag1 = NULL; + + tag2 = tag_add_stream_tags(src, is); + if (tag1 != NULL) + /* free the empty tag created by tag_new(), we + aren't going to send it */ + tag_free(tag1); + + if (tag2 != NULL) + /* use the composite tag returned by + tag_add_stream_tags() */ + src = tag2; + + if (src != NULL) { + music_pipe_tag(src); + if (tag2 != NULL) + tag_free(tag2); } decoder->stream_tag_sent = true; |