From b3dfcfef52f30ccdec4011bf0c9fa051feb3590e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 3 Nov 2008 20:20:09 +0100 Subject: decoder_api: send song tag in decoder_data() Before passing the first chunk to the audio output device, send the current song's tag. --- src/decoder_api.c | 34 ++++++++++++++++++++++++++-------- 1 file 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; -- cgit v1.2.3