diff --git a/src/output/Internal.hxx b/src/output/Internal.hxx index 39e3ae345..8c7902fe2 100644 --- a/src/output/Internal.hxx +++ b/src/output/Internal.hxx @@ -256,6 +256,11 @@ struct AudioOutput { * The #AudioFormat requested by #Command::OPEN. */ AudioFormat audio_format; + + /** + * The #MusicPipe passed to #Command::OPEN. + */ + const MusicPipe *pipe; } request; /** diff --git a/src/output/OutputControl.cxx b/src/output/OutputControl.cxx index e8a02dbda..f92d058ba 100644 --- a/src/output/OutputControl.cxx +++ b/src/output/OutputControl.cxx @@ -122,8 +122,7 @@ AudioOutput::Open(const AudioFormat audio_format, const MusicPipe &mp) } request.audio_format = audio_format; - - pipe.Init(mp); + request.pipe = ∓ if (!thread.IsDefined()) StartThread(); diff --git a/src/output/OutputThread.cxx b/src/output/OutputThread.cxx index a38ed19e2..c21ca933a 100644 --- a/src/output/OutputThread.cxx +++ b/src/output/OutputThread.cxx @@ -145,6 +145,7 @@ AudioOutput::Open() return; in_audio_format = request.audio_format; + pipe.Init(*request.pipe); bool success; @@ -284,8 +285,9 @@ AudioOutput::Reopen() { assert(open); - if (request.audio_format != in_audio_format && - !config_audio_format.IsFullyDefined()) { + if ((request.audio_format != in_audio_format && + !config_audio_format.IsFullyDefined()) || + request.pipe != &pipe.GetPipe()) { Close(true); Open(); } else {