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
* player
- log message when decoder is too slow
* output
- fix hanging playback with soxr resampler
ver 0.20.11 (2017/10/18)
* storage

View File

@ -271,16 +271,15 @@ try {
inline bool
AudioOutput::PlayChunk()
{
if (tags) {
const auto *tag = source.ReadTag();
if (tag != nullptr) {
const ScopeUnlock unlock(mutex);
try {
ao_plugin_send_tag(this, *tag);
} catch (const std::runtime_error &e) {
FormatError(e, "Failed to send tag to \"%s\" [%s]",
name, plugin.name);
}
// ensure pending tags are flushed in all cases
const auto *tag = source.ReadTag();
if (tags && tag != nullptr) {
const ScopeUnlock unlock(mutex);
try {
ao_plugin_send_tag(this, *tag);
} catch (const std::runtime_error &e) {
FormatError(e, "Failed to send tag to \"%s\" [%s]",
name, plugin.name);
}
}