aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/decode.c55
-rw-r--r--src/decode.h4
-rw-r--r--src/outputBuffer.c5
-rw-r--r--src/player.c18
-rw-r--r--src/player.h4
5 files changed, 24 insertions, 62 deletions
diff --git a/src/decode.c b/src/decode.c
index b6e91e9f6..628dca14f 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -32,34 +32,10 @@ enum xfade_state {
XFADE_ENABLED = 1
};
-/* called inside decoder_task (inputPlugins) */
-void decoder_wakeup_player(void)
-{
- wakeup_player_nb();
-}
-
-void decoder_sleep(void)
-{
- notify_wait(&dc.notify);
- wakeup_player_nb();
-}
-
-static void player_wakeup_decoder_nb(void)
-{
- notify_signal(&dc.notify);
-}
-
-/* called from player_task */
-static void player_wakeup_decoder(void)
-{
- notify_signal(&dc.notify);
- player_sleep();
-}
-
static void dc_command_wait(void)
{
while (dc.command != DECODE_COMMAND_NONE) {
- player_wakeup_decoder_nb();
+ notify_signal(&dc.notify);
notify_wait(&pc.notify);
}
}
@@ -72,10 +48,10 @@ static void dc_command(enum decoder_command cmd)
void dc_command_finished(void)
{
- assert(dc.command != DECODE_COMMAND_NONE);
+ assert(dc.command != DECODE_COMMAND_NONE);
- dc.command = DECODE_COMMAND_NONE;
- decoder_wakeup_player();
+ dc.command = DECODE_COMMAND_NONE;
+ notify_signal(&pc.notify);
}
static void stopDecode(void)
@@ -354,9 +330,11 @@ static void * decoder_task(mpd_unused void *arg)
dc.command == DECODE_COMMAND_SEEK) {
decodeStart();
} else if (dc.command == DECODE_COMMAND_STOP) {
- dc_command_finished();
+ dc.command = DECODE_COMMAND_NONE;
+ notify_signal(&pc.notify);
} else {
- decoder_sleep();
+ notify_wait(&dc.notify);
+ notify_signal(&pc.notify);
}
}
@@ -445,7 +423,7 @@ static void decodeParent(void)
if (buffering) {
if (ob_available() < bbp) {
/* not enough decoded buffer space yet */
- player_sleep();
+ notify_wait(&pc.notify);
continue;
} else {
/* buffering is complete */
@@ -469,7 +447,8 @@ static void decodeParent(void)
break;
}
- player_wakeup_decoder();
+ notify_signal(&dc.notify);
+ notify_wait(&pc.notify);
if (do_pause) {
dropBufferedAudio();
@@ -490,7 +469,7 @@ static void decodeParent(void)
else {
/* the decoder is not yet ready; wait
some more */
- player_sleep();
+ notify_wait(&pc.notify);
continue;
}
}
@@ -506,7 +485,7 @@ static void decodeParent(void)
dc.command = DECODE_COMMAND_START;
pc.queueState = PLAYER_QUEUE_DECODE;
wakeup_main_task();
- player_wakeup_decoder_nb();
+ notify_signal(&dc.notify);
}
if (next >= 0 && do_xfade == XFADE_UNKNOWN &&
dc.command != DECODE_COMMAND_START &&
@@ -527,7 +506,7 @@ static void decodeParent(void)
}
if (do_pause)
- player_sleep();
+ notify_wait(&pc.notify);
else if (!ob_is_empty() && (int)ob.begin != next) {
ob_chunk *beginChunk = ob_get_chunk(ob.begin);
unsigned int fadePosition;
@@ -563,7 +542,7 @@ static void decodeParent(void)
/* wait for the
decoder */
ob_set_lazy(0);
- player_sleep();
+ notify_wait(&pc.notify);
continue;
}
}
@@ -574,7 +553,7 @@ static void decodeParent(void)
sizeToTime) < 0)
break;
ob_shift();
- player_wakeup_decoder_nb();
+ notify_signal(&dc.notify);
} else if (!ob_is_empty() && (int)ob.begin == next) {
/* at the beginning of a new song */
@@ -590,7 +569,7 @@ static void decodeParent(void)
/* wait for the decoder to work on the new song */
if (pc.queueState == PLAYER_QUEUE_DECODE ||
pc.queueLockState == PLAYER_QUEUE_LOCKED) {
- player_sleep();
+ notify_wait(&pc.notify);
continue;
}
if (pc.queueState != PLAYER_QUEUE_PLAY)
diff --git a/src/decode.h b/src/decode.h
index 2f60319a1..5c4d0e864 100644
--- a/src/decode.h
+++ b/src/decode.h
@@ -61,10 +61,6 @@ typedef struct _DecoderControl {
void decode(void);
-void decoder_wakeup_player(void);
-
-void decoder_sleep(void);
-
void decoderInit(void);
/**
diff --git a/src/outputBuffer.c b/src/outputBuffer.c
index f4c56a36a..ff8cf7587 100644
--- a/src/outputBuffer.c
+++ b/src/outputBuffer.c
@@ -73,7 +73,7 @@ static void output_buffer_expand(unsigned i)
/* if the buffer was empty, the player thread might be
waiting for us; wake it up now that another decoded
buffer has become available. */
- decoder_wakeup_player();
+ notify_signal(&pc.notify);
}
void ob_flush(void)
@@ -183,7 +183,8 @@ static int tailChunk(InputStream * inStream,
}
}
if (!inStream || bufferInputStream(inStream) <= 0) {
- decoder_sleep();
+ notify_wait(&dc.notify);
+ notify_signal(&pc.notify);
}
}
diff --git a/src/player.c b/src/player.c
index 61b380b84..e7ec926e4 100644
--- a/src/player.c
+++ b/src/player.c
@@ -27,22 +27,12 @@
static void playerCloseAudio(void);
-void wakeup_player_nb(void)
-{
- notify_signal(&pc.notify);
-}
-
static void wakeup_player(void)
{
notify_signal(&pc.notify);
wait_main_task();
}
-void player_sleep(void)
-{
- notify_wait(&pc.notify);
-}
-
static void * player_task(mpd_unused void *arg)
{
notify_enter(&pc.notify);
@@ -67,7 +57,7 @@ static void * player_task(mpd_unused void *arg)
pc.queueLockState = PLAYER_QUEUE_UNLOCKED;
pc.unlockQueue = 0;
} else {
- player_sleep();
+ notify_wait(&pc.notify);
continue;
}
/* we did something, tell the main task about it */
@@ -112,7 +102,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 { notify_signal(&pc.notify); } while (pc.play);
return 0;
}
@@ -249,7 +239,7 @@ int getPlayerQueueState(void)
void setQueueState(int queueState)
{
pc.queueState = queueState;
- wakeup_player_nb();
+ notify_signal(&pc.notify);
}
void playerQueueLock(void)
@@ -285,7 +275,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 { notify_signal(&pc.notify); } while (pc.seek);
}
return 0;
diff --git a/src/player.h b/src/player.h
index db8f44de6..e204639e7 100644
--- a/src/player.h
+++ b/src/player.h
@@ -76,10 +76,6 @@ typedef struct _PlayerControl {
volatile double totalPlayTime;
} PlayerControl;
-void wakeup_player_nb(void);
-
-void player_sleep(void);
-
int playerPlay(int fd, Song * song);
int playerSetPause(int fd, int pause_flag);