diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/decode.c | 28 | ||||
-rw-r--r-- | src/player.c | 27 | ||||
-rw-r--r-- | src/player.h | 4 |
3 files changed, 29 insertions, 30 deletions
diff --git a/src/decode.c b/src/decode.c index 142cc46cc..da9550dff 100644 --- a/src/decode.c +++ b/src/decode.c @@ -33,13 +33,15 @@ /* called inside decoder_task (inputPlugins) */ void decoder_wakeup_player(void) { - wakeup_player_nb(); + PlayerControl *pc = &(getPlayerData()->playerControl); + wakeup_player_nb(pc); } void decoder_sleep(DecoderControl * dc) { + PlayerControl *pc = &(getPlayerData()->playerControl); notifyWait(&dc->notify); - wakeup_player_nb(); + wakeup_player_nb(pc); } static void player_wakeup_decoder_nb(DecoderControl * dc) @@ -48,10 +50,10 @@ static void player_wakeup_decoder_nb(DecoderControl * dc) } /* called from player_task */ -static void player_wakeup_decoder(DecoderControl * dc) +static void player_wakeup_decoder(PlayerControl * pc, DecoderControl * dc) { notifySignal(&dc->notify); - player_sleep(); + player_sleep(pc); } static void stopDecode(DecoderControl * dc) @@ -102,7 +104,7 @@ static int waitOnDecode(PlayerControl * pc, DecoderControl * dc, OutputBuffer * cb, int *decodeWaitedOn) { while (dc->start) - player_wakeup_decoder(dc); + player_wakeup_decoder(pc, dc); if (dc->error != DECODE_ERROR_NOERROR) { pc->errored_song = pc->current_song; @@ -143,7 +145,7 @@ static int decodeSeek(PlayerControl * pc, DecoderControl * dc, dc->seekWhere = 0 > dc->seekWhere ? 0 : dc->seekWhere; dc->seekError = 0; dc->seek = 1; - do { player_wakeup_decoder(dc); } while (dc->seek); + do { player_wakeup_decoder(pc, dc); } while (dc->seek); if (!dc->seekError) { pc->elapsedTime = dc->seekWhere; ret = 0; @@ -431,7 +433,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * if (buffering) { if (availableOutputBuffer(cb) < bbp) { /* not enough decoded buffer space yet */ - player_sleep(); + player_sleep(pc); continue; } else /* buffering is complete */ @@ -452,7 +454,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * get_song_url(tmp, pc->current_song)); break; } else { - player_wakeup_decoder(dc); + player_wakeup_decoder(pc, dc); } if (do_pause) { dropBufferedAudio(); @@ -473,7 +475,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * else { /* the decoder is not yet ready; wait some more */ - player_sleep(); + player_sleep(pc); continue; } } @@ -509,7 +511,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * } if (do_pause) - player_sleep(); + player_sleep(pc); else if (!outputBufferEmpty(cb) && (int)cb->begin != next) { OutputBufferChunk *beginChunk = outputBufferGetChunk(cb, cb->begin); @@ -544,7 +546,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * } else { /* wait for the decoder */ - player_sleep(); + player_sleep(pc); continue; } } @@ -571,7 +573,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * /* wait for the decoder to work on the new song */ if (pc->queueState == PLAYER_QUEUE_DECODE || pc->queueLockState == PLAYER_QUEUE_LOCKED) { - player_sleep(); + player_sleep(pc); continue; } if (pc->queueState != PLAYER_QUEUE_PLAY) @@ -615,7 +617,7 @@ void decode(void) dc->seek = 0; dc->stop = 0; dc->start = 1; - do { player_wakeup_decoder(dc); } while (dc->start); + do { player_wakeup_decoder(pc, dc); } while (dc->start); decodeParent(pc, dc, cb); } diff --git a/src/player.c b/src/player.c index 5ef35f214..b930056e2 100644 --- a/src/player.c +++ b/src/player.c @@ -35,22 +35,19 @@ static void playerCloseAudio(void); -void wakeup_player_nb(void) +void wakeup_player_nb(PlayerControl *pc) { - PlayerControl *pc = &(getPlayerData()->playerControl); notifySignal(&pc->notify); } -static void wakeup_player(void) +static void wakeup_player(PlayerControl *pc) { - PlayerControl *pc = &(getPlayerData()->playerControl); notifySignal(&pc->notify); wait_main_task(); } -void player_sleep(void) +void player_sleep(PlayerControl *pc) { - PlayerControl *pc = &(getPlayerData()->playerControl); notifyWait(&pc->notify); } @@ -80,7 +77,7 @@ static void * player_task(mpd_unused void *unused) pc->queueLockState = PLAYER_QUEUE_UNLOCKED; pc->unlockQueue = 0; } else { - player_sleep(); + player_sleep(pc); continue; } /* we did something, tell the main task about it */ @@ -129,7 +126,7 @@ int playerPlay(int fd, Song * song) pc->play = 1; /* FIXME: _nb() variant is probably wrong here, and everywhere... */ - do { wakeup_player_nb(); } while (pc->play); + do { wakeup_player_nb(pc); } while (pc->play); return 0; } @@ -140,7 +137,7 @@ int playerStop(int fd) if (pc->state != PLAYER_STATE_STOP) { pc->stop = 1; - do { wakeup_player(); } while (pc->stop); + do { wakeup_player(pc); } while (pc->stop); } pc->queueState = PLAYER_QUEUE_BLANK; @@ -160,7 +157,7 @@ int playerPause(int fd) if (pc->state != PLAYER_STATE_STOP) { pc->pause = 1; - do { wakeup_player(); } while (pc->pause); + do { wakeup_player(pc); } while (pc->pause); } return 0; @@ -253,7 +250,7 @@ static void playerCloseAudio(void) if (playerStop(STDERR_FILENO) < 0) return; pc->closeAudio = 1; - do { wakeup_player(); } while (pc->closeAudio); + do { wakeup_player(pc); } while (pc->closeAudio); } int queueSong(Song * song) @@ -281,7 +278,7 @@ void setQueueState(int queueState) PlayerControl *pc = &(getPlayerData()->playerControl); pc->queueState = queueState; - wakeup_player_nb(); + wakeup_player_nb(pc); } void playerQueueLock(void) @@ -290,7 +287,7 @@ void playerQueueLock(void) if (pc->queueLockState == PLAYER_QUEUE_UNLOCKED) { pc->lockQueue = 1; - do { wakeup_player(); } while (pc->lockQueue); + do { wakeup_player(pc); } while (pc->lockQueue); } } @@ -300,7 +297,7 @@ void playerQueueUnlock(void) if (pc->queueLockState == PLAYER_QUEUE_LOCKED) { pc->unlockQueue = 1; - do { wakeup_player(); } while (pc->unlockQueue); + do { wakeup_player(pc); } while (pc->unlockQueue); } } @@ -323,7 +320,7 @@ int playerSeek(int fd, Song * song, float seek_time) pc->seekWhere = seek_time; pc->seek = 1; /* FIXME: _nb() is probably wrong here, too */ - do { wakeup_player_nb(); } while (pc->seek); + do { wakeup_player_nb(pc); } while (pc->seek); } return 0; diff --git a/src/player.h b/src/player.h index 4260d149a..943a059b4 100644 --- a/src/player.h +++ b/src/player.h @@ -82,9 +82,9 @@ void wakeup_main_task(void); void wait_main_task(void); -void wakeup_player_nb(void); +void wakeup_player_nb(PlayerControl *pc); -void player_sleep(void); +void player_sleep(PlayerControl *pc); int playerPlay(int fd, Song * song); |