diff --git a/src/audio.c b/src/audio.c index d8abc5648..713519f5c 100644 --- a/src/audio.c +++ b/src/audio.c @@ -131,18 +131,21 @@ int isCurrentAudioFormat(AudioFormat * audioFormat) { int initAudio(AudioFormat * audioFormat) { ao_sample_format format; - if(audio_device && !isCurrentAudioFormat(audioFormat)) { + if(audioFormat && audio_device && !isCurrentAudioFormat(audioFormat)) { finishAudio(); } if(!audio_device) { - format.bits = audioFormat->bits; - format.rate = audioFormat->sampleRate; + if(audioFormat) { + audio_format.bits = audioFormat->bits; + audio_format.sampleRate = audioFormat->sampleRate; + audio_format.channels = audioFormat->channels; + } + + format.bits = audio_format.bits; + format.rate = audio_format.sampleRate; format.byte_format = AO_FMT_NATIVE; - format.channels = audioFormat->channels; - audio_format.bits = format.bits; - audio_format.sampleRate = format.rate; - audio_format.channels = format.channels; + format.channels = audio_format.channels; blockSignals(); audio_device = ao_open_live(audio_ao_driver_id, &format, diff --git a/src/audiofile_decode.c b/src/audiofile_decode.c index 9683ce177..0c2824dc6 100644 --- a/src/audiofile_decode.c +++ b/src/audiofile_decode.c @@ -104,10 +104,6 @@ int audiofile_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) if(dc->stop) break; else if(dc->seek) continue; -#ifdef WORDS_BIGENDIAN - pcm_changeBufferEndianness(chunk,CHUNK_SIZE, - af->bits); -#endif memcpy(cb->chunks+cb->end*CHUNK_SIZE,chunk, CHUNK_SIZE); cb->chunkSize[cb->end] = CHUNK_SIZE; diff --git a/src/decode.c b/src/decode.c index 19efd6b1e..b80166af4 100644 --- a/src/decode.c +++ b/src/decode.c @@ -180,8 +180,19 @@ void decodeSeek(PlayerControl * pc, AudioFormat * af, DecoderControl * dc, } \ if(pc->pause) { \ pause = !pause; \ - if(pause) pc->state = PLAYER_STATE_PAUSE; \ - else pc->state = PLAYER_STATE_PLAY; \ + if(pause) { \ + finishAudio(); \ + pc->state = PLAYER_STATE_PAUSE; \ + } \ + else { \ + if(initAudio(NULL)<0) { \ + strncpy(pc->erroredFile,pc->file,MAXPATHLEN); \ + pc->error = PLAYER_ERROR_AUDIO; \ + quitDecode(pc,dc); \ + return; \ + } \ + pc->state = PLAYER_STATE_PLAY; \ + } \ pc->pause = 0; \ kill(getppid(),SIGUSR1); \ } \ @@ -296,7 +307,6 @@ void decode() { { /* PARENT */ - char silence[CHUNK_SIZE]; int pause = 0; int quit = 0; int bbp = buffered_before_play; @@ -306,8 +316,6 @@ void decode() { int nextChunk = -1; int test; - memset(silence,0,CHUNK_SIZE); - if(waitOnDecode(pc,af,dc,cb)<0) return; pc->state = PLAYER_STATE_PLAY; @@ -348,9 +356,7 @@ void decode() { } else doCrossFade = -1; } - if(pause) { - if(playAudio(silence,CHUNK_SIZE)<0) quit = 1; - } + if(pause) usleep(10000); else if((cb->begin!=cb->end || cb->wrap) && cb->begin!=cb->next) { diff --git a/src/mp4_decode.c b/src/mp4_decode.c index 607253e4f..4a0e168b8 100644 --- a/src/mp4_decode.c +++ b/src/mp4_decode.c @@ -251,9 +251,6 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { size_t size = sampleBufferLen>CHUNK_SIZE-chunkLen ? CHUNK_SIZE-chunkLen: sampleBufferLen; -#ifdef WORDS_BIGENDIAN - pcm_changeBufferEndianness(sampleBuffer,size,af->bits); -#endif while(cb->begin==cb->end && cb->wrap && !dc->stop && !dc->seek) {