From 9acefcb256347ac252db3ea61be2e047d32c0a51 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 21 Jun 2015 15:02:14 +0200 Subject: [PATCH] DecoderThread: set Decoder::song_tag only for local files If the song tag comes from a stream, and MPD playback restarts, MPD would believe the tag should override the newly received tag. This makes the previous tag appear stuck. This change passes the song tag only if it's authoritative - i.e. if it's a song file. --- NEWS | 1 + src/decoder/DecoderThread.cxx | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 03400d83a..b77559f56 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ ver 0.19.10 (not yet released) - smbclient: fix DFF playback * decoder - ffmpeg: improve seeking accuracy + - fix stuck stream tags * encoder - opus: fix bogus granulepos * output diff --git a/src/decoder/DecoderThread.cxx b/src/decoder/DecoderThread.cxx index dd5518b98..b4362a548 100644 --- a/src/decoder/DecoderThread.cxx +++ b/src/decoder/DecoderThread.cxx @@ -380,7 +380,11 @@ decoder_run_song(DecoderControl &dc, const DetachedSong &song, const char *uri, Path path_fs) { Decoder decoder(dc, dc.start_time.IsPositive(), - new Tag(song.GetTag())); + /* pass the song tag only if it's + authoritative, i.e. if it's a local file - + tags on "stream" songs are just remembered + from the last time we played it*/ + song.IsFile() ? new Tag(song.GetTag()) : nullptr); int ret; dc.state = DecoderState::START;