use the notify API in the decoder
git-svn-id: https://svn.musicpd.org/mpd/trunk@7281 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
0146fbe3ce
commit
701cf6884c
14
src/decode.c
14
src/decode.c
@ -30,9 +30,6 @@
|
|||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
#include "os_compat.h"
|
#include "os_compat.h"
|
||||||
|
|
||||||
static pthread_cond_t decoder_wakeup_cond = PTHREAD_COND_INITIALIZER;
|
|
||||||
static pthread_mutex_t decoder_wakeup_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
|
|
||||||
/* called inside decoder_task (inputPlugins) */
|
/* called inside decoder_task (inputPlugins) */
|
||||||
void decoder_wakeup_player(void)
|
void decoder_wakeup_player(void)
|
||||||
{
|
{
|
||||||
@ -41,19 +38,22 @@ void decoder_wakeup_player(void)
|
|||||||
|
|
||||||
void decoder_sleep(void)
|
void decoder_sleep(void)
|
||||||
{
|
{
|
||||||
pthread_cond_wait(&decoder_wakeup_cond, &decoder_wakeup_mutex);
|
DecoderControl *dc = &(getPlayerData()->decoderControl);
|
||||||
|
notifyWait(&dc->notify);
|
||||||
wakeup_player_nb();
|
wakeup_player_nb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void player_wakeup_decoder_nb(void)
|
static void player_wakeup_decoder_nb(void)
|
||||||
{
|
{
|
||||||
pthread_cond_signal(&decoder_wakeup_cond);
|
DecoderControl *dc = &(getPlayerData()->decoderControl);
|
||||||
|
notifySignal(&dc->notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called from player_task */
|
/* called from player_task */
|
||||||
static void player_wakeup_decoder(void)
|
static void player_wakeup_decoder(void)
|
||||||
{
|
{
|
||||||
pthread_cond_signal(&decoder_wakeup_cond);
|
DecoderControl *dc = &(getPlayerData()->decoderControl);
|
||||||
|
notifySignal(&dc->notify);
|
||||||
player_sleep();
|
player_sleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,6 +332,8 @@ static void * decoder_task(mpd_unused void *unused)
|
|||||||
PlayerControl *pc = &(getPlayerData()->playerControl);
|
PlayerControl *pc = &(getPlayerData()->playerControl);
|
||||||
DecoderControl *dc = &(getPlayerData()->decoderControl);
|
DecoderControl *dc = &(getPlayerData()->decoderControl);
|
||||||
|
|
||||||
|
notifyEnter(&dc->notify);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (dc->start || dc->seek) {
|
if (dc->start || dc->seek) {
|
||||||
decodeStart(pc, cb, dc);
|
decodeStart(pc, cb, dc);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "mpd_types.h"
|
#include "mpd_types.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
|
#include "notify.h"
|
||||||
|
|
||||||
#include "os_compat.h"
|
#include "os_compat.h"
|
||||||
|
|
||||||
@ -41,6 +42,8 @@
|
|||||||
#define DECODE_ERROR_FILE 20
|
#define DECODE_ERROR_FILE 20
|
||||||
|
|
||||||
typedef struct _DecoderControl {
|
typedef struct _DecoderControl {
|
||||||
|
Notify notify;
|
||||||
|
|
||||||
volatile mpd_sint8 state;
|
volatile mpd_sint8 state;
|
||||||
volatile mpd_sint8 stop;
|
volatile mpd_sint8 stop;
|
||||||
volatile mpd_sint8 start;
|
volatile mpd_sint8 start;
|
||||||
|
@ -113,6 +113,7 @@ void initPlayerData(void)
|
|||||||
playerData_pd->playerControl.softwareVolume = 1000;
|
playerData_pd->playerControl.softwareVolume = 1000;
|
||||||
playerData_pd->playerControl.totalPlayTime = 0;
|
playerData_pd->playerControl.totalPlayTime = 0;
|
||||||
|
|
||||||
|
notifyInit(&playerData_pd->decoderControl.notify);
|
||||||
playerData_pd->decoderControl.stop = 0;
|
playerData_pd->decoderControl.stop = 0;
|
||||||
playerData_pd->decoderControl.start = 0;
|
playerData_pd->decoderControl.start = 0;
|
||||||
playerData_pd->decoderControl.state = DECODE_STATE_STOP;
|
playerData_pd->decoderControl.state = DECODE_STATE_STOP;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user