diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2003-04-19 01:59:23 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2003-04-19 01:59:23 +0000 |
commit | 7fdef57d572a5f81f5efec4fd6f73a4f797cc823 (patch) | |
tree | f686ce671a0b1d1bce0418a7bbb3400789fb6094 /firmware/mpeg.c | |
parent | 1c32bd0f48605b9ee4623418812c30bc9ca4ba1b (diff) | |
download | rockbox-7fdef57d572a5f81f5efec4fd6f73a4f797cc823.tar.gz rockbox-7fdef57d572a5f81f5efec4fd6f73a4f797cc823.zip |
Better generation of Xing headers, now they contain the correct MPEG version and sample rate info.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3567 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 85f9c72a25..7e48040da2 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -489,7 +489,8 @@ unsigned long record_start_time; /* Value of current_tick when recording | |||
489 | was started */ | 489 | was started */ |
490 | static bool saving; /* We are saving the buffer to disk */ | 490 | static bool saving; /* We are saving the buffer to disk */ |
491 | static char recording_filename[MAX_PATH]; | 491 | static char recording_filename[MAX_PATH]; |
492 | 492 | static int rec_frequency_index; /* For create_xing_header() calls */ | |
493 | static int rec_version_index; /* For create_xing_header() calls */ | ||
493 | #endif | 494 | #endif |
494 | 495 | ||
495 | static int mpeg_file; | 496 | static int mpeg_file; |
@@ -1010,13 +1011,6 @@ void IRQ3(void) | |||
1010 | dma_tick(); | 1011 | dma_tick(); |
1011 | else | 1012 | else |
1012 | postpone_dma_tick(); | 1013 | postpone_dma_tick(); |
1013 | |||
1014 | #if 0 | ||
1015 | if(mpeg_mode == MPEG_ENCODER) | ||
1016 | /* Shut off if recording is stopped */ | ||
1017 | if(!is_recording) | ||
1018 | demand_irq_enable(false); | ||
1019 | #endif | ||
1020 | } | 1014 | } |
1021 | #endif | 1015 | #endif |
1022 | 1016 | ||
@@ -1271,6 +1265,7 @@ static void mpeg_thread(void) | |||
1271 | #ifdef HAVE_MAS3587F | 1265 | #ifdef HAVE_MAS3587F |
1272 | int amount_to_save; | 1266 | int amount_to_save; |
1273 | int writelen; | 1267 | int writelen; |
1268 | int framelen; | ||
1274 | #endif | 1269 | #endif |
1275 | 1270 | ||
1276 | is_playing = false; | 1271 | is_playing = false; |
@@ -1734,15 +1729,6 @@ static void mpeg_thread(void) | |||
1734 | DEBUGF("R\n"); | 1729 | DEBUGF("R\n"); |
1735 | t1 = current_tick; | 1730 | t1 = current_tick; |
1736 | len = read(mpeg_file, mp3buf+mp3buf_write, amount_to_read); | 1731 | len = read(mpeg_file, mp3buf+mp3buf_write, amount_to_read); |
1737 | #if 0 | ||
1738 | if(id3tags[tag_read_idx]->id3.vbr) | ||
1739 | /* Average bitrate * 1.5 */ | ||
1740 | recalculate_watermark( | ||
1741 | (id3tags[tag_read_idx]->id3.bitrate * 3) / 2); | ||
1742 | else | ||
1743 | recalculate_watermark( | ||
1744 | id3tags[tag_read_idx]->id3.bitrate); | ||
1745 | #endif | ||
1746 | if(len > 0) | 1732 | if(len > 0) |
1747 | { | 1733 | { |
1748 | t2 = current_tick; | 1734 | t2 = current_tick; |
@@ -1854,10 +1840,10 @@ static void mpeg_thread(void) | |||
1854 | DEBUGF("Recording...\n"); | 1840 | DEBUGF("Recording...\n"); |
1855 | reset_mp3_buffer(); | 1841 | reset_mp3_buffer(); |
1856 | 1842 | ||
1857 | /* Advance the write pointer 4096+417 bytes to make | 1843 | /* Advance the write pointer 4096+1500 bytes to make |
1858 | room for an ID3 tag plus a VBR header */ | 1844 | room for an ID3 tag plus a VBR header */ |
1859 | mp3buf_write = 4096+417; | 1845 | mp3buf_write = 4096+1500; |
1860 | memset(mp3buf, 0, 4096+417); | 1846 | memset(mp3buf, 0, 4096+1500); |
1861 | 1847 | ||
1862 | /* Insert the ID3 header */ | 1848 | /* Insert the ID3 header */ |
1863 | memcpy(mp3buf, empty_id3_header, sizeof(empty_id3_header)); | 1849 | memcpy(mp3buf, empty_id3_header, sizeof(empty_id3_header)); |
@@ -1898,12 +1884,14 @@ static void mpeg_thread(void) | |||
1898 | if(num_recorded_frames == 0x7ffff) | 1884 | if(num_recorded_frames == 0x7ffff) |
1899 | num_recorded_frames = 0; | 1885 | num_recorded_frames = 0; |
1900 | 1886 | ||
1901 | create_xing_header(mpeg_file, 0, num_rec_bytes, | 1887 | framelen = create_xing_header(mpeg_file, 0, num_rec_bytes, |
1902 | mp3buf, num_recorded_frames, NULL, | 1888 | mp3buf, num_recorded_frames, |
1903 | false); | 1889 | rec_version_index, |
1890 | rec_frequency_index, | ||
1891 | NULL, false); | ||
1904 | 1892 | ||
1905 | lseek(mpeg_file, 4096, SEEK_SET); | 1893 | lseek(mpeg_file, 4096+1500-framelen, SEEK_SET); |
1906 | write(mpeg_file, mp3buf, 417); | 1894 | write(mpeg_file, mp3buf, framelen); |
1907 | close(mpeg_file); | 1895 | close(mpeg_file); |
1908 | 1896 | ||
1909 | mpeg_file = -1; | 1897 | mpeg_file = -1; |
@@ -2841,9 +2829,12 @@ void mpeg_set_recording_options(int frequency, int quality, | |||
2841 | unsigned long val; | 2829 | unsigned long val; |
2842 | 2830 | ||
2843 | is_mpeg1 = (frequency < 3)?true:false; | 2831 | is_mpeg1 = (frequency < 3)?true:false; |
2832 | |||
2833 | rec_version_index = is_mpeg1?3:2; | ||
2834 | rec_frequency_index = frequency % 3; | ||
2844 | 2835 | ||
2845 | val = (quality << 17) | | 2836 | val = (quality << 17) | |
2846 | ((frequency % 3) << 10) | | 2837 | (rec_frequency_index << 10) | |
2847 | ((is_mpeg1?1:0) << 9) | | 2838 | ((is_mpeg1?1:0) << 9) | |
2848 | (1 << 8) | /* CRC on */ | 2839 | (1 << 8) | /* CRC on */ |
2849 | (((channel_mode * 2 + 1) & 3) << 6) | | 2840 | (((channel_mode * 2 + 1) & 3) << 6) | |