integrated macro handleDecodeStart() into caller
Another patch indended to improve the CPP macro hell. This enlarges the function decodeParent(), but it cannot be converted into a standalone function easily, because it references so many local variables. git-svn-id: https://svn.musicpd.org/mpd/trunk@7258 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
753b5cf360
commit
7ee436b435
83
src/decode.c
83
src/decode.c
@ -96,48 +96,6 @@ static int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af)
|
||||
return (int)chunks;
|
||||
}
|
||||
|
||||
#define handleDecodeStart() \
|
||||
if(decodeWaitedOn) { \
|
||||
if(dc->state!=DECODE_STATE_START && \
|
||||
dc->error==DECODE_ERROR_NOERROR) \
|
||||
{ \
|
||||
decodeWaitedOn = 0; \
|
||||
if(openAudioDevice(&(cb->audioFormat))<0) { \
|
||||
char tmp[MPD_PATH_MAX]; \
|
||||
pc->errored_song = pc->current_song; \
|
||||
pc->error = PLAYER_ERROR_AUDIO; \
|
||||
ERROR("problems opening audio device " \
|
||||
"while playing \"%s\"\n", \
|
||||
get_song_url(tmp, pc->current_song)); \
|
||||
quitDecode(pc,dc); \
|
||||
return; \
|
||||
} else { \
|
||||
player_wakeup_decoder(); \
|
||||
} \
|
||||
if (pause) { \
|
||||
dropBufferedAudio(); \
|
||||
closeAudioDevice(); \
|
||||
} \
|
||||
pc->totalTime = dc->totalTime; \
|
||||
pc->sampleRate = dc->audioFormat.sampleRate; \
|
||||
pc->bits = dc->audioFormat.bits; \
|
||||
pc->channels = dc->audioFormat.channels; \
|
||||
sizeToTime = 8.0/cb->audioFormat.bits/ \
|
||||
cb->audioFormat.channels/ \
|
||||
cb->audioFormat.sampleRate; \
|
||||
} \
|
||||
else if(dc->state!=DECODE_STATE_START) { \
|
||||
pc->errored_song = pc->current_song; \
|
||||
pc->error = PLAYER_ERROR_FILE; \
|
||||
quitDecode(pc,dc); \
|
||||
return; \
|
||||
} \
|
||||
else { \
|
||||
player_sleep(); \
|
||||
continue; \
|
||||
} \
|
||||
}
|
||||
|
||||
static int waitOnDecode(PlayerControl * pc, DecoderControl * dc,
|
||||
OutputBuffer * cb, int *decodeWaitedOn)
|
||||
{
|
||||
@ -451,7 +409,46 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
|
||||
return;
|
||||
}
|
||||
|
||||
handleDecodeStart();
|
||||
if (decodeWaitedOn) {
|
||||
if(dc->state!=DECODE_STATE_START &&
|
||||
dc->error==DECODE_ERROR_NOERROR) {
|
||||
decodeWaitedOn = 0;
|
||||
if(openAudioDevice(&(cb->audioFormat))<0) {
|
||||
char tmp[MPD_PATH_MAX];
|
||||
pc->errored_song = pc->current_song;
|
||||
pc->error = PLAYER_ERROR_AUDIO;
|
||||
ERROR("problems opening audio device "
|
||||
"while playing \"%s\"\n",
|
||||
get_song_url(tmp, pc->current_song));
|
||||
quitDecode(pc,dc);
|
||||
return;
|
||||
} else {
|
||||
player_wakeup_decoder();
|
||||
}
|
||||
if (pause) {
|
||||
dropBufferedAudio();
|
||||
closeAudioDevice();
|
||||
}
|
||||
pc->totalTime = dc->totalTime;
|
||||
pc->sampleRate = dc->audioFormat.sampleRate;
|
||||
pc->bits = dc->audioFormat.bits;
|
||||
pc->channels = dc->audioFormat.channels;
|
||||
sizeToTime = 8.0/cb->audioFormat.bits/
|
||||
cb->audioFormat.channels/
|
||||
cb->audioFormat.sampleRate;
|
||||
}
|
||||
else if(dc->state!=DECODE_STATE_START) {
|
||||
pc->errored_song = pc->current_song;
|
||||
pc->error = PLAYER_ERROR_FILE;
|
||||
quitDecode(pc,dc);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
player_sleep();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (dc->state == DECODE_STATE_STOP &&
|
||||
pc->queueState == PLAYER_QUEUE_FULL &&
|
||||
pc->queueLockState == PLAYER_QUEUE_UNLOCKED) {
|
||||
|
Loading…
Reference in New Issue
Block a user