diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/mpeg.c | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index fae6f5a3b0..eb065d5a51 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -35,7 +35,12 @@ | |||
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | #define MPEG_CHUNKSIZE 0x20000 | 37 | #define MPEG_CHUNKSIZE 0x20000 |
38 | #ifdef ARCHOS_RECORDER | ||
39 | /* recorder is slower and needs more load time */ | ||
40 | #define MPEG_LOW_WATER 0x40000 | ||
41 | #else | ||
38 | #define MPEG_LOW_WATER 0x30000 | 42 | #define MPEG_LOW_WATER 0x30000 |
43 | #endif | ||
39 | 44 | ||
40 | #define MPEG_PLAY 1 | 45 | #define MPEG_PLAY 1 |
41 | #define MPEG_STOP 2 | 46 | #define MPEG_STOP 2 |
@@ -450,25 +455,28 @@ static int new_file(bool next_track) | |||
450 | { | 455 | { |
451 | char *trackname; | 456 | char *trackname; |
452 | 457 | ||
453 | trackname = peek_next_track( next_track ? 1 : -1 ); | 458 | do { |
454 | if ( !trackname ) | 459 | trackname = peek_next_track( next_track ? 1 : -1 ); |
455 | return -1; | 460 | if ( !trackname ) |
456 | 461 | return -1; | |
457 | DEBUGF("playing %s\n", trackname); | 462 | |
458 | 463 | DEBUGF("playing %s\n", trackname); | |
459 | /* grab id3 tag of new file and remember where in memory it starts */ | 464 | |
460 | if ( last_tag < MAX_ID3_TAGS ) { | 465 | mpeg_file = open(trackname, O_RDONLY); |
461 | mp3info(&(id3tags[last_tag].id3), trackname); | 466 | if(mpeg_file < 0) { |
462 | id3tags[last_tag].mempos = mp3buf_write; | 467 | DEBUGF("Couldn't open file: %s\n",trackname); |
463 | last_tag++; | 468 | } |
464 | } | 469 | else { |
470 | /* grab id3 tag of new file and remember where | ||
471 | in memory it starts */ | ||
472 | if ( last_tag < MAX_ID3_TAGS ) { | ||
473 | mp3info(&(id3tags[last_tag].id3), trackname); | ||
474 | id3tags[last_tag].mempos = mp3buf_write; | ||
475 | last_tag++; | ||
476 | } | ||
477 | } | ||
478 | } while ( mpeg_file < 0 ); | ||
465 | 479 | ||
466 | mpeg_file = open(trackname, O_RDONLY); | ||
467 | if(mpeg_file < 0) | ||
468 | { | ||
469 | debugf("Couldn't open file\n"); | ||
470 | return -1; | ||
471 | } | ||
472 | return 0; | 480 | return 0; |
473 | } | 481 | } |
474 | 482 | ||
@@ -513,10 +521,10 @@ static void mpeg_thread(void) | |||
513 | close(mpeg_file); | 521 | close(mpeg_file); |
514 | 522 | ||
515 | mpeg_file = open((char*)ev.data, O_RDONLY); | 523 | mpeg_file = open((char*)ev.data, O_RDONLY); |
516 | if(mpeg_file < 0) | 524 | while (mpeg_file < 0) { |
517 | { | 525 | DEBUGF("Couldn't open file: %s\n",ev.data); |
518 | DEBUGF("Couldn't open %s\n",ev.data); | 526 | if ( new_file(true) == -1 ) |
519 | break; | 527 | return; |
520 | } | 528 | } |
521 | 529 | ||
522 | /* grab id3 tag of new file and | 530 | /* grab id3 tag of new file and |