diff options
Diffstat (limited to '')
-rw-r--r-- | src/inputPlugins/audiofile_plugin.c | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/src/inputPlugins/audiofile_plugin.c b/src/inputPlugins/audiofile_plugin.c index 6db342f82..6b8e4e2bd 100644 --- a/src/inputPlugins/audiofile_plugin.c +++ b/src/inputPlugins/audiofile_plugin.c @@ -49,6 +49,8 @@ static int audiofile_decode(struct decoder * decoder, char *path) float total_time; mpd_uint16 bitRate; struct stat st; + int ret, current = 0; + char chunk[CHUNK_SIZE]; if (stat(path, &st) < 0) { ERROR("failed to stat: %s\n", path); @@ -87,36 +89,29 @@ static int audiofile_decode(struct decoder * decoder, char *path) decoder_initialized(decoder, &audio_format, total_time); - { - int ret, current = 0; - char chunk[CHUNK_SIZE]; - - do { - if (dc.command == DECODE_COMMAND_SEEK) { - decoder_clear(decoder); - current = dc.seekWhere * - audio_format.sampleRate; - afSeekFrame(af_fp, AF_DEFAULT_TRACK, current); - dc_command_finished(); - } - - ret = - afReadFrames(af_fp, AF_DEFAULT_TRACK, chunk, - CHUNK_SIZE / fs); - if (ret <= 0) - - current += ret; - decoder_data(decoder, NULL, - 1, - chunk, ret * fs, - (float)current / - (float)audio_format. - sampleRate, bitRate, - NULL); - } while (dc.command != DECODE_COMMAND_STOP); - - decoder_flush(decoder); - } + do { + if (dc.command == DECODE_COMMAND_SEEK) { + decoder_clear(decoder); + current = dc.seekWhere * + audio_format.sampleRate; + afSeekFrame(af_fp, AF_DEFAULT_TRACK, current); + dc_command_finished(); + } + + ret = afReadFrames(af_fp, AF_DEFAULT_TRACK, chunk, + CHUNK_SIZE / fs); + if (ret <= 0) + break; + + current += ret; + decoder_data(decoder, NULL, 1, + chunk, ret * fs, + (float)current / (float)audio_format.sampleRate, + bitRate, NULL); + } while (dc.command != DECODE_COMMAND_STOP); + + decoder_flush(decoder); + afCloseFile(af_fp); return 0; |