From b979245d6c9491d5cd6bd12b250ccd6dc7a13609 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Aug 2021 17:59:51 +0200 Subject: [PATCH] decoder/Bridge: call UpdateStreamTag() only if there is no pending seek If UpdateStreamTag() gets called while an initial seek is pending, the result will never be submitted to a MusicChunk. By avoiding the UpdateStreamTag() call in that case (by moving UpdateStreamTag() to after the PrepareInitialSeek() check), the song_tag is preserved until UpdateStreamTag() is called again from SubmitData(). This fixes missing tags in the "httpd" output. Closes https://github.com/MusicPlayerDaemon/MPD/issues/1137 --- NEWS | 1 + src/decoder/Bridge.cxx | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index a56c573e9..ab2ddd9ca 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ ver 0.22.10 (not yet released) * tags - fix crash caused by bug in TagBuilder and a few potential reference leaks * output + - httpd: fix missing tag after seeking into a new song - oss: fix channel order of multi-channel files ver 0.22.9 (2021/06/23) diff --git a/src/decoder/Bridge.cxx b/src/decoder/Bridge.cxx index 79ef2c4f7..30a56d53d 100644 --- a/src/decoder/Bridge.cxx +++ b/src/decoder/Bridge.cxx @@ -581,10 +581,6 @@ DecoderBridge::SubmitTag(InputStream *is, Tag &&tag) noexcept decoder_tag = std::make_unique(std::move(tag)); - /* check for a new stream tag */ - - UpdateStreamTag(is); - /* check if we're seeking */ if (PrepareInitialSeek()) @@ -593,6 +589,10 @@ DecoderBridge::SubmitTag(InputStream *is, Tag &&tag) noexcept function here */ return DecoderCommand::SEEK; + /* check for a new stream tag */ + + UpdateStreamTag(is); + /* send tag to music pipe */ if (stream_tag != nullptr)