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 /firmware | |
parent | 8446cc461c04c796b49a6a37d26769f489a67132 (diff) | |
download | rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.tar.gz rockbox-a9875a96d2c04a025396ac0f7aa0068cba00c9ee.zip |
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
Diffstat (limited to 'firmware')
-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 4b9ab73101..b49c3b35b5 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -1267,6 +1267,16 @@ static const unsigned char empty_id3_header[] = | |||
1267 | 0x00, 0x00, 0x1f, 0x76 /* Size is 4096 minus 10 bytes for the header */ | 1267 | 0x00, 0x00, 0x1f, 0x76 /* Size is 4096 minus 10 bytes for the header */ |
1268 | }; | 1268 | }; |
1269 | 1269 | ||
1270 | static unsigned long get_last_recorded_header(void) | ||
1271 | { | ||
1272 | unsigned long tmp[2]; | ||
1273 | |||
1274 | /* Read the frame data from the MAS and reconstruct it with the | ||
1275 | frame sync and all */ | ||
1276 | mas_readmem(MAS_BANK_D0, 0xfd1, tmp, 2); | ||
1277 | return 0xffe00000 | ((tmp[0] & 0x7c00) << 6) | (tmp[1] & 0xffff); | ||
1278 | } | ||
1279 | |||
1270 | static void mpeg_thread(void) | 1280 | static void mpeg_thread(void) |
1271 | { | 1281 | { |
1272 | static int pause_tick = 0; | 1282 | static int pause_tick = 0; |
@@ -1282,7 +1292,7 @@ static void mpeg_thread(void) | |||
1282 | int amount_to_save; | 1292 | int amount_to_save; |
1283 | int writelen; | 1293 | int writelen; |
1284 | int framelen; | 1294 | int framelen; |
1285 | unsigned long saved_header; | 1295 | unsigned long saved_header = 0; |
1286 | int startpos; | 1296 | int startpos; |
1287 | int rc; | 1297 | int rc; |
1288 | int offset; | 1298 | int offset; |
@@ -1899,6 +1909,11 @@ static void mpeg_thread(void) | |||
1899 | case MPEG_STOP: | 1909 | case MPEG_STOP: |
1900 | DEBUGF("MPEG_STOP\n"); | 1910 | DEBUGF("MPEG_STOP\n"); |
1901 | demand_irq_enable(false); | 1911 | demand_irq_enable(false); |
1912 | |||
1913 | /* Store the last recorded header for later use by the | ||
1914 | Xing header generation */ | ||
1915 | saved_header = get_last_recorded_header(); | ||
1916 | |||
1902 | stop_recording(); | 1917 | stop_recording(); |
1903 | 1918 | ||
1904 | /* Save the remaining data in the buffer */ | 1919 | /* Save the remaining data in the buffer */ |
@@ -1924,18 +1939,9 @@ static void mpeg_thread(void) | |||
1924 | reached 0x7ffff, we can no longer trust it */ | 1939 | reached 0x7ffff, we can no longer trust it */ |
1925 | if(num_recorded_frames == 0x7ffff) | 1940 | if(num_recorded_frames == 0x7ffff) |
1926 | num_recorded_frames = 0; | 1941 | num_recorded_frames = 0; |
1927 | 1942 | ||
1928 | /* Read the first MP3 frame from the recorded stream */ | 1943 | /* saved_header is saved right before stopping |
1929 | lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET); | 1944 | the MAS */ |
1930 | rc = read(mpeg_file, &saved_header, 4); | ||
1931 | if(rc <= 0) | ||
1932 | { | ||
1933 | close(mpeg_file); | ||
1934 | mpeg_file = -1; | ||
1935 | mpeg_stop_done = true; | ||
1936 | break; | ||
1937 | } | ||
1938 | |||
1939 | framelen = create_xing_header(mpeg_file, 0, | 1945 | framelen = create_xing_header(mpeg_file, 0, |
1940 | num_rec_bytes, mp3buf, | 1946 | num_rec_bytes, mp3buf, |
1941 | num_recorded_frames, | 1947 | num_recorded_frames, |
@@ -1984,16 +1990,8 @@ static void mpeg_thread(void) | |||
1984 | startpos = mp3buf_write - 1800; | 1990 | startpos = mp3buf_write - 1800; |
1985 | if(startpos < 0) | 1991 | if(startpos < 0) |
1986 | startpos += mp3buflen; | 1992 | startpos += mp3buflen; |
1987 | 1993 | ||
1988 | { | 1994 | saved_header = get_last_recorded_header(); |
1989 | unsigned long tmp[2]; | ||
1990 | /* Find out how the mp3 header should look like */ | ||
1991 | mas_readmem(MAS_BANK_D0, 0xfd1, tmp, 2); | ||
1992 | saved_header = 0xffe00000 | | ||
1993 | ((tmp[0] & 0x7c00) << 6) | | ||
1994 | (tmp[1] & 0xffff); | ||
1995 | DEBUGF("Header: %08x\n", saved_header); | ||
1996 | } | ||
1997 | 1995 | ||
1998 | rc = mem_find_next_frame(startpos, &offset, 1800, | 1996 | rc = mem_find_next_frame(startpos, &offset, 1800, |
1999 | saved_header); | 1997 | saved_header); |