invoke the notify API directly
Don't use wrappers like player_wakeup_decoder_nb(). These have been wrappers calling notify.c functions, for compatibility with the existing code when we migrated to notify.c.
This commit is contained in:
parent
87beded44f
commit
241cd043ca
55
src/decode.c
55
src/decode.c
@ -32,34 +32,10 @@ enum xfade_state {
|
|||||||
XFADE_ENABLED = 1
|
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)
|
static void dc_command_wait(void)
|
||||||
{
|
{
|
||||||
while (dc.command != DECODE_COMMAND_NONE) {
|
while (dc.command != DECODE_COMMAND_NONE) {
|
||||||
player_wakeup_decoder_nb();
|
notify_signal(&dc.notify);
|
||||||
notify_wait(&pc.notify);
|
notify_wait(&pc.notify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,10 +48,10 @@ static void dc_command(enum decoder_command cmd)
|
|||||||
|
|
||||||
void dc_command_finished(void)
|
void dc_command_finished(void)
|
||||||
{
|
{
|
||||||
assert(dc.command != DECODE_COMMAND_NONE);
|
assert(dc.command != DECODE_COMMAND_NONE);
|
||||||
|
|
||||||
dc.command = DECODE_COMMAND_NONE;
|
dc.command = DECODE_COMMAND_NONE;
|
||||||
decoder_wakeup_player();
|
notify_signal(&pc.notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stopDecode(void)
|
static void stopDecode(void)
|
||||||
@ -354,9 +330,11 @@ static void * decoder_task(mpd_unused void *arg)
|
|||||||
dc.command == DECODE_COMMAND_SEEK) {
|
dc.command == DECODE_COMMAND_SEEK) {
|
||||||
decodeStart();
|
decodeStart();
|
||||||
} else if (dc.command == DECODE_COMMAND_STOP) {
|
} else if (dc.command == DECODE_COMMAND_STOP) {
|
||||||
dc_command_finished();
|
dc.command = DECODE_COMMAND_NONE;
|
||||||
|
notify_signal(&pc.notify);
|
||||||
} else {
|
} else {
|
||||||
decoder_sleep();
|
notify_wait(&dc.notify);
|
||||||
|
notify_signal(&pc.notify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +423,7 @@ static void decodeParent(void)
|
|||||||
if (buffering) {
|
if (buffering) {
|
||||||
if (ob_available() < bbp) {
|
if (ob_available() < bbp) {
|
||||||
/* not enough decoded buffer space yet */
|
/* not enough decoded buffer space yet */
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
/* buffering is complete */
|
/* buffering is complete */
|
||||||
@ -469,7 +447,8 @@ static void decodeParent(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
player_wakeup_decoder();
|
notify_signal(&dc.notify);
|
||||||
|
notify_wait(&pc.notify);
|
||||||
|
|
||||||
if (do_pause) {
|
if (do_pause) {
|
||||||
dropBufferedAudio();
|
dropBufferedAudio();
|
||||||
@ -490,7 +469,7 @@ static void decodeParent(void)
|
|||||||
else {
|
else {
|
||||||
/* the decoder is not yet ready; wait
|
/* the decoder is not yet ready; wait
|
||||||
some more */
|
some more */
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -506,7 +485,7 @@ static void decodeParent(void)
|
|||||||
dc.command = DECODE_COMMAND_START;
|
dc.command = DECODE_COMMAND_START;
|
||||||
pc.queueState = PLAYER_QUEUE_DECODE;
|
pc.queueState = PLAYER_QUEUE_DECODE;
|
||||||
wakeup_main_task();
|
wakeup_main_task();
|
||||||
player_wakeup_decoder_nb();
|
notify_signal(&dc.notify);
|
||||||
}
|
}
|
||||||
if (next >= 0 && do_xfade == XFADE_UNKNOWN &&
|
if (next >= 0 && do_xfade == XFADE_UNKNOWN &&
|
||||||
dc.command != DECODE_COMMAND_START &&
|
dc.command != DECODE_COMMAND_START &&
|
||||||
@ -527,7 +506,7 @@ static void decodeParent(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (do_pause)
|
if (do_pause)
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
else if (!ob_is_empty() && (int)ob.begin != next) {
|
else if (!ob_is_empty() && (int)ob.begin != next) {
|
||||||
ob_chunk *beginChunk = ob_get_chunk(ob.begin);
|
ob_chunk *beginChunk = ob_get_chunk(ob.begin);
|
||||||
unsigned int fadePosition;
|
unsigned int fadePosition;
|
||||||
@ -563,7 +542,7 @@ static void decodeParent(void)
|
|||||||
/* wait for the
|
/* wait for the
|
||||||
decoder */
|
decoder */
|
||||||
ob_set_lazy(0);
|
ob_set_lazy(0);
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -574,7 +553,7 @@ static void decodeParent(void)
|
|||||||
sizeToTime) < 0)
|
sizeToTime) < 0)
|
||||||
break;
|
break;
|
||||||
ob_shift();
|
ob_shift();
|
||||||
player_wakeup_decoder_nb();
|
notify_signal(&dc.notify);
|
||||||
} else if (!ob_is_empty() && (int)ob.begin == next) {
|
} else if (!ob_is_empty() && (int)ob.begin == next) {
|
||||||
/* at the beginning of a new song */
|
/* 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 */
|
/* wait for the decoder to work on the new song */
|
||||||
if (pc.queueState == PLAYER_QUEUE_DECODE ||
|
if (pc.queueState == PLAYER_QUEUE_DECODE ||
|
||||||
pc.queueLockState == PLAYER_QUEUE_LOCKED) {
|
pc.queueLockState == PLAYER_QUEUE_LOCKED) {
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (pc.queueState != PLAYER_QUEUE_PLAY)
|
if (pc.queueState != PLAYER_QUEUE_PLAY)
|
||||||
|
@ -61,10 +61,6 @@ typedef struct _DecoderControl {
|
|||||||
|
|
||||||
void decode(void);
|
void decode(void);
|
||||||
|
|
||||||
void decoder_wakeup_player(void);
|
|
||||||
|
|
||||||
void decoder_sleep(void);
|
|
||||||
|
|
||||||
void decoderInit(void);
|
void decoderInit(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,7 +73,7 @@ static void output_buffer_expand(unsigned i)
|
|||||||
/* if the buffer was empty, the player thread might be
|
/* if the buffer was empty, the player thread might be
|
||||||
waiting for us; wake it up now that another decoded
|
waiting for us; wake it up now that another decoded
|
||||||
buffer has become available. */
|
buffer has become available. */
|
||||||
decoder_wakeup_player();
|
notify_signal(&pc.notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ob_flush(void)
|
void ob_flush(void)
|
||||||
@ -183,7 +183,8 @@ static int tailChunk(InputStream * inStream,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!inStream || bufferInputStream(inStream) <= 0) {
|
if (!inStream || bufferInputStream(inStream) <= 0) {
|
||||||
decoder_sleep();
|
notify_wait(&dc.notify);
|
||||||
|
notify_signal(&pc.notify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
src/player.c
18
src/player.c
@ -27,22 +27,12 @@
|
|||||||
|
|
||||||
static void playerCloseAudio(void);
|
static void playerCloseAudio(void);
|
||||||
|
|
||||||
void wakeup_player_nb(void)
|
|
||||||
{
|
|
||||||
notify_signal(&pc.notify);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void wakeup_player(void)
|
static void wakeup_player(void)
|
||||||
{
|
{
|
||||||
notify_signal(&pc.notify);
|
notify_signal(&pc.notify);
|
||||||
wait_main_task();
|
wait_main_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
void player_sleep(void)
|
|
||||||
{
|
|
||||||
notify_wait(&pc.notify);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void * player_task(mpd_unused void *arg)
|
static void * player_task(mpd_unused void *arg)
|
||||||
{
|
{
|
||||||
notify_enter(&pc.notify);
|
notify_enter(&pc.notify);
|
||||||
@ -67,7 +57,7 @@ static void * player_task(mpd_unused void *arg)
|
|||||||
pc.queueLockState = PLAYER_QUEUE_UNLOCKED;
|
pc.queueLockState = PLAYER_QUEUE_UNLOCKED;
|
||||||
pc.unlockQueue = 0;
|
pc.unlockQueue = 0;
|
||||||
} else {
|
} else {
|
||||||
player_sleep();
|
notify_wait(&pc.notify);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* we did something, tell the main task about it */
|
/* we did something, tell the main task about it */
|
||||||
@ -112,7 +102,7 @@ int playerPlay(int fd, Song * song)
|
|||||||
|
|
||||||
pc.play = 1;
|
pc.play = 1;
|
||||||
/* FIXME: _nb() variant is probably wrong here, and everywhere... */
|
/* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -249,7 +239,7 @@ int getPlayerQueueState(void)
|
|||||||
void setQueueState(int queueState)
|
void setQueueState(int queueState)
|
||||||
{
|
{
|
||||||
pc.queueState = queueState;
|
pc.queueState = queueState;
|
||||||
wakeup_player_nb();
|
notify_signal(&pc.notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
void playerQueueLock(void)
|
void playerQueueLock(void)
|
||||||
@ -285,7 +275,7 @@ int playerSeek(int fd, Song * song, float seek_time)
|
|||||||
pc.seekWhere = seek_time;
|
pc.seekWhere = seek_time;
|
||||||
pc.seek = 1;
|
pc.seek = 1;
|
||||||
/* FIXME: _nb() is probably wrong here, too */
|
/* FIXME: _nb() is probably wrong here, too */
|
||||||
do { wakeup_player_nb(); } while (pc.seek);
|
do { notify_signal(&pc.notify); } while (pc.seek);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -76,10 +76,6 @@ typedef struct _PlayerControl {
|
|||||||
volatile double totalPlayTime;
|
volatile double totalPlayTime;
|
||||||
} PlayerControl;
|
} PlayerControl;
|
||||||
|
|
||||||
void wakeup_player_nb(void);
|
|
||||||
|
|
||||||
void player_sleep(void);
|
|
||||||
|
|
||||||
int playerPlay(int fd, Song * song);
|
int playerPlay(int fd, Song * song);
|
||||||
|
|
||||||
int playerSetPause(int fd, int pause_flag);
|
int playerSetPause(int fd, int pause_flag);
|
||||||
|
Loading…
Reference in New Issue
Block a user