summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 0903da69e4..37723df7a6 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -258,12 +258,12 @@ volatile int videostatus IBSS_ATTR;
258/* TODO: Can we reduce the PCM buffer size? */ 258/* TODO: Can we reduce the PCM buffer size? */
259#define PCMBUFFER_SIZE ((512*1024)-PCMBUFFER_GUARD_SIZE) 259#define PCMBUFFER_SIZE ((512*1024)-PCMBUFFER_GUARD_SIZE)
260#define PCMBUFFER_GUARD_SIZE (1152*4 + sizeof (struct pcm_frame_header)) 260#define PCMBUFFER_GUARD_SIZE (1152*4 + sizeof (struct pcm_frame_header))
261#define MPA_MAX_FRAME_SIZE 1441 /* Largest frame with a padding byte */ 261#define MPA_MAX_FRAME_SIZE 1729 /* Largest frame - MPEG1, Layer II, 384kbps, 32kHz, pad */
262#define MPABUF_SIZE (64*1024 + ALIGN_UP(MPA_MAX_FRAME_SIZE + 2*MAD_BUFFER_GUARD, 4)) 262#define MPABUF_SIZE (64*1024 + ALIGN_UP(MPA_MAX_FRAME_SIZE + 2*MAD_BUFFER_GUARD, 4))
263#define LIBMPEG2BUFFER_SIZE (2*1024*1024) 263#define LIBMPEG2BUFFER_SIZE (2*1024*1024)
264 264
265/* 65536+6 is required since each PES has a 6 byte header with a 16 bit packet length field */ 265/* 65536+6 is required since each PES has a 6 byte header with a 16 bit packet length field */
266#define MPEG_GUARDBUF_SIZE (64*1024+16) /* Keep a bit extra */ 266#define MPEG_GUARDBUF_SIZE (64*1024+1024) /* Keep a bit extra - excessive for now */
267#define MPEG_LOW_WATERMARK (1024*1024) 267#define MPEG_LOW_WATERMARK (1024*1024)
268 268
269static void pcm_playback_play_pause(bool play); 269static void pcm_playback_play_pause(bool play);
@@ -544,6 +544,11 @@ static void get_next_data( Stream* str )
544 header_length += *p++; 544 header_length += *p++;
545 545
546 p += header_length; 546 p += header_length;
547
548 if (p >= disk_buf_end)
549 {
550 p = disk_buf + (p - disk_buf_end);
551 }
547 /*rb->splash( 30, "System header" );*/ 552 /*rb->splash( 30, "System header" );*/
548 } 553 }
549 554
@@ -1021,8 +1026,7 @@ static void audio_thread(void)
1021 } 1026 }
1022 1027
1023 /** Decoding **/ 1028 /** Decoding **/
1024 if (stream.error == 0) 1029 mad_stream_buffer(&stream, mpabuf, mpabuf_used);
1025 mad_stream_buffer(&stream, mpabuf, mpabuf_used);
1026 1030
1027 mad_stat = mad_frame_decode(&frame, &stream); 1031 mad_stat = mad_frame_decode(&frame, &stream);
1028 1032
@@ -1061,16 +1065,16 @@ static void audio_thread(void)
1061 || stream.error == MAD_ERROR_BUFLEN) 1065 || stream.error == MAD_ERROR_BUFLEN)
1062 { 1066 {
1063 /* This makes the codec support partially corrupted files */ 1067 /* This makes the codec support partially corrupted files */
1064 if (mad_errors >= 30) 1068 if (++mad_errors > 30)
1065 break; 1069 break;
1066 1070
1067 stream.error = 0; 1071 stream.error = 0;
1068 mad_errors++;
1069 rb->priority_yield(); 1072 rb->priority_yield();
1070 continue; 1073 continue;
1071 } 1074 }
1072 else if (MAD_RECOVERABLE(stream.error)) 1075 else if (MAD_RECOVERABLE(stream.error))
1073 { 1076 {
1077 stream.error = 0;
1074 rb->priority_yield(); 1078 rb->priority_yield();
1075 continue; 1079 continue;
1076 } 1080 }