From e464be5f3922d87942a3afd0f7e9239b89901f2e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 19 Jul 2011 22:32:48 +0200 Subject: decoder/wavpack: simplify the WavpackUnpackSamples()==0 check .. and remove one indent level. --- src/decoder/wavpack_decoder_plugin.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) (limited to 'src/decoder') diff --git a/src/decoder/wavpack_decoder_plugin.c b/src/decoder/wavpack_decoder_plugin.c index efed98851..601f05065 100644 --- a/src/decoder/wavpack_decoder_plugin.c +++ b/src/decoder/wavpack_decoder_plugin.c @@ -197,7 +197,7 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) decoder_initialized(decoder, &audio_format, can_seek, total_time); - do { + while (true) { if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { if (can_seek) { unsigned where = decoder_seek_where(decoder) * @@ -220,22 +220,19 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) samples_got = WavpackUnpackSamples( wpc, (int32_t *)chunk, samples_requested ); - if (samples_got > 0) { - int bitrate = (int)(WavpackGetInstantBitrate(wpc) / - 1000 + 0.5); - - format_samples( - bytes_per_sample, chunk, - samples_got * audio_format.channels - ); - - decoder_data( - decoder, NULL, chunk, - samples_got * output_sample_size, - bitrate - ); - } - } while (samples_got > 0); + + if (samples_got == 0) + break; + + int bitrate = (int)(WavpackGetInstantBitrate(wpc) / 1000 + + 0.5); + format_samples(bytes_per_sample, chunk, + samples_got * audio_format.channels); + + decoder_data(decoder, NULL, chunk, + samples_got * output_sample_size, + bitrate); + } } /** -- cgit v1.2.3 From 4c4f8bf02a6315ce988fcacab9cfd890c67ca5d0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 19 Jul 2011 22:47:12 +0200 Subject: decoder/wavpack: use the correct integer types libwavpack provides int32_t samples, and wants uin32_t for sample counts. --- src/decoder/wavpack_decoder_plugin.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'src/decoder') diff --git a/src/decoder/wavpack_decoder_plugin.c b/src/decoder/wavpack_decoder_plugin.c index 601f05065..c8f0b7152 100644 --- a/src/decoder/wavpack_decoder_plugin.c +++ b/src/decoder/wavpack_decoder_plugin.c @@ -34,9 +34,6 @@ #undef G_LOG_DOMAIN #define G_LOG_DOMAIN "wavpack" -/* pick 1020 since its devisible for 8,16,24, and 32-bit audio */ -#define CHUNK_SIZE 1020 - #define ERRORLEN 80 static struct { @@ -162,8 +159,6 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) enum sample_format sample_format; struct audio_format audio_format; format_samples_t format_samples; - char chunk[CHUNK_SIZE]; - int samples_requested, samples_got; float total_time; int bytes_per_sample, output_sample_size; @@ -193,7 +188,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) output_sample_size = audio_format_frame_size(&audio_format); /* wavpack gives us all kind of samples in a 32-bit space */ - samples_requested = sizeof(chunk) / (4 * audio_format.channels); + int32_t chunk[1024]; + const uint32_t samples_requested = G_N_ELEMENTS(chunk) / + audio_format.channels; decoder_initialized(decoder, &audio_format, can_seek, total_time); @@ -217,10 +214,8 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) break; } - samples_got = WavpackUnpackSamples( - wpc, (int32_t *)chunk, samples_requested - ); - + uint32_t samples_got = WavpackUnpackSamples(wpc, chunk, + samples_requested); if (samples_got == 0) break; -- cgit v1.2.3 From 2e28ed8f81630cdadf9e3a22d0cd460f6afffe1a Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 20 Jul 2011 12:30:56 +0200 Subject: wavpack: obey all decoder commands, stop at CUE track border It used to ignore the decoder_data() return value. --- src/decoder/wavpack_decoder_plugin.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'src/decoder') diff --git a/src/decoder/wavpack_decoder_plugin.c b/src/decoder/wavpack_decoder_plugin.c index c8f0b7152..24d0c1703 100644 --- a/src/decoder/wavpack_decoder_plugin.c +++ b/src/decoder/wavpack_decoder_plugin.c @@ -194,8 +194,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) decoder_initialized(decoder, &audio_format, can_seek, total_time); - while (true) { - if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { + enum decoder_command cmd = decoder_get_command(decoder); + while (cmd != DECODE_COMMAND_STOP) { + if (cmd == DECODE_COMMAND_SEEK) { if (can_seek) { unsigned where = decoder_seek_where(decoder) * audio_format.sample_rate; @@ -210,10 +211,6 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) } } - if (decoder_get_command(decoder) == DECODE_COMMAND_STOP) { - break; - } - uint32_t samples_got = WavpackUnpackSamples(wpc, chunk, samples_requested); if (samples_got == 0) @@ -224,9 +221,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek) format_samples(bytes_per_sample, chunk, samples_got * audio_format.channels); - decoder_data(decoder, NULL, chunk, - samples_got * output_sample_size, - bitrate); + cmd = decoder_data(decoder, NULL, chunk, + samples_got * output_sample_size, + bitrate); } } -- cgit v1.2.3