diff options
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 7e48040da2..11837d608e 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -1266,6 +1266,7 @@ static void mpeg_thread(void) | |||
1266 | int amount_to_save; | 1266 | int amount_to_save; |
1267 | int writelen; | 1267 | int writelen; |
1268 | int framelen; | 1268 | int framelen; |
1269 | unsigned long saved_header; | ||
1269 | #endif | 1270 | #endif |
1270 | 1271 | ||
1271 | is_playing = false; | 1272 | is_playing = false; |
@@ -1840,10 +1841,10 @@ static void mpeg_thread(void) | |||
1840 | DEBUGF("Recording...\n"); | 1841 | DEBUGF("Recording...\n"); |
1841 | reset_mp3_buffer(); | 1842 | reset_mp3_buffer(); |
1842 | 1843 | ||
1843 | /* Advance the write pointer 4096+1500 bytes to make | 1844 | /* Advance the write pointer to make |
1844 | room for an ID3 tag plus a VBR header */ | 1845 | room for an ID3 tag plus a VBR header */ |
1845 | mp3buf_write = 4096+1500; | 1846 | mp3buf_write = MPEG_RESERVED_HEADER_SPACE; |
1846 | memset(mp3buf, 0, 4096+1500); | 1847 | memset(mp3buf, 0, MPEG_RESERVED_HEADER_SPACE); |
1847 | 1848 | ||
1848 | /* Insert the ID3 header */ | 1849 | /* Insert the ID3 header */ |
1849 | memcpy(mp3buf, empty_id3_header, sizeof(empty_id3_header)); | 1850 | memcpy(mp3buf, empty_id3_header, sizeof(empty_id3_header)); |
@@ -1883,14 +1884,17 @@ static void mpeg_thread(void) | |||
1883 | we can no longer trust it */ | 1884 | we can no longer trust it */ |
1884 | if(num_recorded_frames == 0x7ffff) | 1885 | if(num_recorded_frames == 0x7ffff) |
1885 | num_recorded_frames = 0; | 1886 | num_recorded_frames = 0; |
1887 | |||
1888 | /* Read the first MP3 frame from the recorded stream */ | ||
1889 | lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET); | ||
1890 | read(mpeg_file, &saved_header, 4); | ||
1886 | 1891 | ||
1887 | framelen = create_xing_header(mpeg_file, 0, num_rec_bytes, | 1892 | framelen = create_xing_header(mpeg_file, 0, num_rec_bytes, |
1888 | mp3buf, num_recorded_frames, | 1893 | mp3buf, num_recorded_frames, |
1889 | rec_version_index, | 1894 | saved_header, NULL, false); |
1890 | rec_frequency_index, | ||
1891 | NULL, false); | ||
1892 | 1895 | ||
1893 | lseek(mpeg_file, 4096+1500-framelen, SEEK_SET); | 1896 | lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE-framelen, |
1897 | SEEK_SET); | ||
1894 | write(mpeg_file, mp3buf, framelen); | 1898 | write(mpeg_file, mp3buf, framelen); |
1895 | close(mpeg_file); | 1899 | close(mpeg_file); |
1896 | 1900 | ||
@@ -2823,7 +2827,8 @@ void mpeg_set_pitch(int pitch) | |||
2823 | 2827 | ||
2824 | #ifdef HAVE_MAS3587F | 2828 | #ifdef HAVE_MAS3587F |
2825 | void mpeg_set_recording_options(int frequency, int quality, | 2829 | void mpeg_set_recording_options(int frequency, int quality, |
2826 | int source, int channel_mode) | 2830 | int source, int channel_mode, |
2831 | bool editable) | ||
2827 | { | 2832 | { |
2828 | bool is_mpeg1; | 2833 | bool is_mpeg1; |
2829 | unsigned long val; | 2834 | unsigned long val; |
@@ -2844,6 +2849,11 @@ void mpeg_set_recording_options(int frequency, int quality, | |||
2844 | 2849 | ||
2845 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f0, %x)\n", val); | 2850 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f0, %x)\n", val); |
2846 | 2851 | ||
2852 | val = editable?4:0; | ||
2853 | mas_writemem(MAS_BANK_D0, 0x7f9, &val,1); | ||
2854 | |||
2855 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f9, %x)\n", val); | ||
2856 | |||
2847 | val = ((!is_recording << 10) | /* Monitoring */ | 2857 | val = ((!is_recording << 10) | /* Monitoring */ |
2848 | ((source < 2)?1:2) << 8) | /* Input select */ | 2858 | ((source < 2)?1:2) << 8) | /* Input select */ |
2849 | (1 << 5) | /* SDO strobe invert */ | 2859 | (1 << 5) | /* SDO strobe invert */ |