From 8a6d448aaf2095a691982eb7c2942dbad125a755 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 26 Dec 2009 00:35:05 +0100 Subject: decoder/wavpack: allow fine-grained seeking First multiply the floating point return value of decoder_seek_where(), then cast to integer. --- src/decoder/wavpack_plugin.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/decoder/wavpack_plugin.c b/src/decoder/wavpack_plugin.c index 645c8962e..7ad3a62b0 100644 --- a/src/decoder/wavpack_plugin.c +++ b/src/decoder/wavpack_plugin.c @@ -185,10 +185,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek, do { if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { if (can_seek) { - int where; + unsigned where = decoder_seek_where(decoder) * + audio_format.sample_rate; - where = decoder_seek_where(decoder); - where *= audio_format.sample_rate; if (WavpackSeekSample(wpc, where)) { position = where; decoder_command_finished(decoder); -- cgit v1.2.3 From 915d1d0738c1327d30ad1d2a9d58fa96fb136db8 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 26 Dec 2009 01:10:23 +0100 Subject: 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(). --- src/decoder_api.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') 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); } -- cgit v1.2.3 From d66c055fec3923dd38e5b28d74c1c4e7e70040db Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 27 Dec 2009 16:49:04 +0100 Subject: dbUtils: return multiple tag values per song When collecting tag values for the result set, add all of a song's tag values of the searched type. This affects the "list" command. Previously, "list" only considered the first tag value of a song. --- src/dbUtils.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/dbUtils.c b/src/dbUtils.c index f89148c1b..fa2cfa27a 100644 --- a/src/dbUtils.c +++ b/src/dbUtils.c @@ -246,7 +246,6 @@ visitTag(struct client *client, struct strset *set, for (unsigned i = 0; i < tag->num_items; i++) { if (tag->items[i]->type == tagType) { strset_add(set, tag->items[i]->value); - return; } } -- cgit v1.2.3