diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2003-12-28 03:37:23 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2003-12-28 03:37:23 +0000 |
| commit | a9875a96d2c04a025396ac0f7aa0068cba00c9ee (patch) | |
| tree | 316ba8c7e724e61659d12776a0a9dee1ba4d30fc | |
| parent | 8446cc461c04c796b49a6a37d26769f489a67132 (diff) | |
| download | rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.zip rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.tar.gz rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.tar.bz2 rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.tar.xz | |
Internal code cleanup - the header template for the Xing header generation is read from the MAS instead of from the recorded file
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4179 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/mpeg.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 4b9ab73..b49c3b3 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c @@ -1267,6 +1267,16 @@ static const unsigned char empty_id3_header[] = 0x00, 0x00, 0x1f, 0x76 /* Size is 4096 minus 10 bytes for the header */ }; +static unsigned long get_last_recorded_header(void) +{ + unsigned long tmp[2]; + + /* Read the frame data from the MAS and reconstruct it with the + frame sync and all */ + mas_readmem(MAS_BANK_D0, 0xfd1, tmp, 2); + return 0xffe00000 | ((tmp[0] & 0x7c00) << 6) | (tmp[1] & 0xffff); +} + static void mpeg_thread(void) { static int pause_tick = 0; @@ -1282,7 +1292,7 @@ static void mpeg_thread(void) int amount_to_save; int writelen; int framelen; - unsigned long saved_header; + unsigned long saved_header = 0; int startpos; int rc; int offset; @@ -1899,6 +1909,11 @@ static void mpeg_thread(void) case MPEG_STOP: DEBUGF("MPEG_STOP\n"); demand_irq_enable(false); + + /* Store the last recorded header for later use by the + Xing header generation */ + saved_header = get_last_recorded_header(); + stop_recording(); /* Save the remaining data in the buffer */ @@ -1924,18 +1939,9 @@ static void mpeg_thread(void) reached 0x7ffff, we can no longer trust it */ if(num_recorded_frames == 0x7ffff) num_recorded_frames = 0; - - /* Read the first MP3 frame from the recorded stream */ - lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET); - rc = read(mpeg_file, &saved_header, 4); - if(rc <= 0) - { - close(mpeg_file); - mpeg_file = -1; - mpeg_stop_done = true; - break; - } - + + /* saved_header is saved right before stopping + the MAS */ framelen = create_xing_header(mpeg_file, 0, num_rec_bytes, mp3buf, num_recorded_frames, @@ -1984,16 +1990,8 @@ static void mpeg_thread(void) startpos = mp3buf_write - 1800; if(startpos < 0) startpos += mp3buflen; - - { - unsigned long tmp[2]; - /* Find out how the mp3 header should look like */ - mas_readmem(MAS_BANK_D0, 0xfd1, tmp, 2); - saved_header = 0xffe00000 | - ((tmp[0] & 0x7c00) << 6) | - (tmp[1] & 0xffff); - DEBUGF("Header: %08x\n", saved_header); - } + + saved_header = get_last_recorded_header(); rc = mem_find_next_frame(startpos, &offset, 1800, saved_header); |