forked from len0rd/rockbox
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
This commit is contained in:
parent
8446cc461c
commit
a9875a96d2
1 changed files with 21 additions and 23 deletions
|
@ -1267,6 +1267,16 @@ static const unsigned char empty_id3_header[] =
|
||||||
0x00, 0x00, 0x1f, 0x76 /* Size is 4096 minus 10 bytes for the 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 void mpeg_thread(void)
|
||||||
{
|
{
|
||||||
static int pause_tick = 0;
|
static int pause_tick = 0;
|
||||||
|
@ -1282,7 +1292,7 @@ static void mpeg_thread(void)
|
||||||
int amount_to_save;
|
int amount_to_save;
|
||||||
int writelen;
|
int writelen;
|
||||||
int framelen;
|
int framelen;
|
||||||
unsigned long saved_header;
|
unsigned long saved_header = 0;
|
||||||
int startpos;
|
int startpos;
|
||||||
int rc;
|
int rc;
|
||||||
int offset;
|
int offset;
|
||||||
|
@ -1899,6 +1909,11 @@ static void mpeg_thread(void)
|
||||||
case MPEG_STOP:
|
case MPEG_STOP:
|
||||||
DEBUGF("MPEG_STOP\n");
|
DEBUGF("MPEG_STOP\n");
|
||||||
demand_irq_enable(false);
|
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();
|
stop_recording();
|
||||||
|
|
||||||
/* Save the remaining data in the buffer */
|
/* Save the remaining data in the buffer */
|
||||||
|
@ -1924,18 +1939,9 @@ static void mpeg_thread(void)
|
||||||
reached 0x7ffff, we can no longer trust it */
|
reached 0x7ffff, we can no longer trust it */
|
||||||
if(num_recorded_frames == 0x7ffff)
|
if(num_recorded_frames == 0x7ffff)
|
||||||
num_recorded_frames = 0;
|
num_recorded_frames = 0;
|
||||||
|
|
||||||
/* Read the first MP3 frame from the recorded stream */
|
/* saved_header is saved right before stopping
|
||||||
lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET);
|
the MAS */
|
||||||
rc = read(mpeg_file, &saved_header, 4);
|
|
||||||
if(rc <= 0)
|
|
||||||
{
|
|
||||||
close(mpeg_file);
|
|
||||||
mpeg_file = -1;
|
|
||||||
mpeg_stop_done = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
framelen = create_xing_header(mpeg_file, 0,
|
framelen = create_xing_header(mpeg_file, 0,
|
||||||
num_rec_bytes, mp3buf,
|
num_rec_bytes, mp3buf,
|
||||||
num_recorded_frames,
|
num_recorded_frames,
|
||||||
|
@ -1984,16 +1990,8 @@ static void mpeg_thread(void)
|
||||||
startpos = mp3buf_write - 1800;
|
startpos = mp3buf_write - 1800;
|
||||||
if(startpos < 0)
|
if(startpos < 0)
|
||||||
startpos += mp3buflen;
|
startpos += mp3buflen;
|
||||||
|
|
||||||
{
|
saved_header = get_last_recorded_header();
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = mem_find_next_frame(startpos, &offset, 1800,
|
rc = mem_find_next_frame(startpos, &offset, 1800,
|
||||||
saved_header);
|
saved_header);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue