summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c26
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
2825void mpeg_set_recording_options(int frequency, int quality, 2829void 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 */