From 915d1d0738c1327d30ad1d2a9d58fa96fb136db8 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 26 Dec 2009 01:10:23 +0100 Subject: [PATCH] decoder_thread: eliminate jitter after seek failure Don't clear the music pipe when seeking has failed - check the "seeking" flag instead of "command==SEEK". Clear the "seeking" flag in decoder_seek_error(). --- NEWS | 1 + src/decoder_api.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 24ded72e2..4134ea085 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ ver 0.15.7 (2009/??/??) * tags: - id3: fix ID3v1 charset conversion * decoders: + - eliminate jitter after seek failure - ffmpeg: don't try to force stereo - wavpack: allow fine-grained seeking * mixer: explicitly close all mixers on shutdown diff --git a/src/decoder_api.c b/src/decoder_api.c index 2ece3bb98..c696ba101 100644 --- a/src/decoder_api.c +++ b/src/decoder_api.c @@ -93,7 +93,9 @@ void decoder_command_finished(G_GNUC_UNUSED struct decoder * decoder) dc.seek_error || decoder->seeking); assert(dc.pipe != NULL); - if (dc.command == DECODE_COMMAND_SEEK) { + if (decoder->seeking) { + decoder->seeking = false; + /* delete frames from the old song position */ if (decoder->chunk != NULL) { @@ -124,6 +126,8 @@ void decoder_seek_error(struct decoder * decoder) assert(dc.pipe != NULL); dc.seek_error = true; + decoder->seeking = false; + decoder_command_finished(decoder); }