output/Thread: ensure pending tags are flushed in all cases

Fixes hanging playback with soxr resampler.

Closes #139, #141
This commit is contained in:
cathugger 2017-11-04 03:38:49 +00:00 committed by Max Kellermann
parent 3b23cf0258
commit b111a8fe8d
2 changed files with 11 additions and 10 deletions

2
NEWS
View File

@ -5,6 +5,8 @@ ver 0.20.12 (not yet released)
- vorbis: fix Tremor support - vorbis: fix Tremor support
* player * player
- log message when decoder is too slow - log message when decoder is too slow
* output
- fix hanging playback with soxr resampler
ver 0.20.11 (2017/10/18) ver 0.20.11 (2017/10/18)
* storage * storage

View File

@ -271,9 +271,9 @@ try {
inline bool inline bool
AudioOutput::PlayChunk() AudioOutput::PlayChunk()
{ {
if (tags) { // ensure pending tags are flushed in all cases
const auto *tag = source.ReadTag(); const auto *tag = source.ReadTag();
if (tag != nullptr) { if (tags && tag != nullptr) {
const ScopeUnlock unlock(mutex); const ScopeUnlock unlock(mutex);
try { try {
ao_plugin_send_tag(this, *tag); ao_plugin_send_tag(this, *tag);
@ -282,7 +282,6 @@ AudioOutput::PlayChunk()
name, plugin.name); name, plugin.name);
} }
} }
}
while (command == Command::NONE) { while (command == Command::NONE) {
const auto data = source.PeekData(); const auto data = source.PeekData();