From 209c8a540c80faffb6b04ac6e7fed64a03c679ac Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 25 Mar 2009 19:48:14 +0100 Subject: player_thread: wait for decoder before seeking When the decoder initialization has not been completed yet, all calls to dc_seek() will fail, because dc.seekable is not initialized yet. Wait for the decoder to complete its initialization, i.e. until it has called decoder_initialized(). --- src/decoder_control.c | 1 + src/player_thread.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/decoder_control.c b/src/decoder_control.c index c04b373ad..4e7ade22c 100644 --- a/src/decoder_control.c +++ b/src/decoder_control.c @@ -86,6 +86,7 @@ dc_stop(struct notify *notify) bool dc_seek(struct notify *notify, double where) { + assert(dc.state != DECODE_STATE_START); assert(where >= 0.0); if (dc.state == DECODE_STATE_STOP || diff --git a/src/player_thread.c b/src/player_thread.c index 84487c7bb..02f80ae8c 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -301,6 +301,17 @@ static bool player_seek_decoder(struct player *player) player->queued = false; } + /* wait for the decoder to complete initialization */ + + while (player->decoder_starting) { + ret = player_check_decoder_startup(player); + if (!ret) { + /* decoder failure */ + player_command_finished(); + return false; + } + } + /* send the SEEK command */ where = pc.seek_where; -- cgit v1.2.3