aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio.c17
-rw-r--r--src/audiofile_decode.c4
-rw-r--r--src/decode.c22
-rw-r--r--src/mp4_decode.c3
4 files changed, 24 insertions, 22 deletions
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)
{