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:

committed by
Eric Wong

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;
|
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,
|
static int waitOnDecode(PlayerControl * pc, DecoderControl * dc,
|
||||||
OutputBuffer * cb, int *decodeWaitedOn)
|
OutputBuffer * cb, int *decodeWaitedOn)
|
||||||
{
|
{
|
||||||
@@ -451,7 +409,46 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
|
|||||||
return;
|
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 &&
|
if (dc->state == DECODE_STATE_STOP &&
|
||||||
pc->queueState == PLAYER_QUEUE_FULL &&
|
pc->queueState == PLAYER_QUEUE_FULL &&
|
||||||
pc->queueLockState == PLAYER_QUEUE_UNLOCKED) {
|
pc->queueLockState == PLAYER_QUEUE_UNLOCKED) {
|
||||||
|
Reference in New Issue
Block a user