From e07073ff286ed22d4859aba3584285586c7781c8 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 6 Oct 2011 00:25:44 +0200 Subject: [PATCH] decoder_api: move code to _prepare_initial_seek() .. and add a few code comments. --- src/decoder_api.c | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/decoder_api.c b/src/decoder_api.c index bec271179..3e4917508 100644 --- a/src/decoder_api.c +++ b/src/decoder_api.c @@ -78,6 +78,40 @@ decoder_initialized(struct decoder *decoder, &af_string)); } +/** + * Checks if we need an "initial seek". If so, then the initial seek + * is prepared, and the function returns true. + */ +G_GNUC_PURE +static bool +decoder_prepare_initial_seek(struct decoder *decoder) +{ + const struct decoder_control *dc = decoder->dc; + assert(dc->pipe != NULL); + + if (decoder->initial_seek_running) + /* initial seek has already begun - override any other + command */ + return true; + + if (decoder->initial_seek_pending) { + if (dc->command == DECODE_COMMAND_NONE) { + /* begin initial seek */ + + decoder->initial_seek_pending = false; + decoder->initial_seek_running = true; + return true; + } + + /* skip initial seek when there's another command + (e.g. STOP) */ + + decoder->initial_seek_pending = false; + } + + return false; +} + /** * Returns the current decoder command. May return a "virtual" * synthesized command, e.g. to seek to the beginning of the CUE @@ -90,19 +124,9 @@ decoder_get_virtual_command(struct decoder *decoder) const struct decoder_control *dc = decoder->dc; assert(dc->pipe != NULL); - if (decoder->initial_seek_running) + if (decoder_prepare_initial_seek(decoder)) return DECODE_COMMAND_SEEK; - if (decoder->initial_seek_pending) { - if (dc->command == DECODE_COMMAND_NONE) { - decoder->initial_seek_pending = false; - decoder->initial_seek_running = true; - return DECODE_COMMAND_SEEK; - } - - decoder->initial_seek_pending = false; - } - return dc->command; }