summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Hohensohn <hohensoh@rockbox.org>2004-03-11 19:27:26 +0000
committerJörg Hohensohn <hohensoh@rockbox.org>2004-03-11 19:27:26 +0000
commitfbea708b2e2e61af9238bc356b07a1e22ed44833 (patch)
tree59559bc3aa9de384d86a65e746c4c28c05726939
parent3b6cc1c3c28df3dc747a5d620ed3347db12c79e1 (diff)
downloadrockbox-fbea708b2e2e61af9238bc356b07a1e22ed44833.tar.gz
rockbox-fbea708b2e2e61af9238bc356b07a1e22ed44833.zip
Feature for recording: Delayed file open avoids disk spinup as long as the buffer lasts. So for short clips the internal mic can be used without disturbance.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4367 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/mpeg.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 645e60fdcd..ff545f03d0 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -288,7 +288,8 @@ static bool stop_pending;
288unsigned long record_start_time; /* Value of current_tick when recording 288unsigned long record_start_time; /* Value of current_tick when recording
289 was started */ 289 was started */
290static bool saving; /* We are saving the buffer to disk */ 290static bool saving; /* We are saving the buffer to disk */
291static char recording_filename[MAX_PATH]; 291static char recording_filename[MAX_PATH]; /* argument to thread */
292static char delayed_filename[MAX_PATH]; /* internal copy of above */
292static int rec_frequency_index; /* For create_xing_header() calls */ 293static int rec_frequency_index; /* For create_xing_header() calls */
293static int rec_version_index; /* For create_xing_header() calls */ 294static int rec_version_index; /* For create_xing_header() calls */
294static bool disable_xing_header; /* When splitting files */ 295static bool disable_xing_header; /* When splitting files */
@@ -1649,11 +1650,10 @@ static void mpeg_thread(void)
1649 } 1650 }
1650 1651
1651 start_recording(); 1652 start_recording();
1652
1653 mpeg_file = open(recording_filename, O_WRONLY|O_CREAT);
1654 1653
1655 if(mpeg_file < 0) 1654 /* delayed until buffer is saved, don't open yet */
1656 panicf("recfile: %d", mpeg_file); 1655 strcpy(delayed_filename, recording_filename);
1656 mpeg_file = -1;
1657 1657
1658 break; 1658 break;
1659 1659
@@ -1783,6 +1783,14 @@ static void mpeg_thread(void)
1783 writelen = MIN(amount_to_save, 1783 writelen = MIN(amount_to_save,
1784 mp3buflen - mp3buf_read); 1784 mp3buflen - mp3buf_read);
1785 1785
1786 if (mpeg_file < 0) /* delayed file opening */
1787 {
1788 mpeg_file = open(delayed_filename, O_WRONLY|O_CREAT);
1789
1790 if(mpeg_file < 0)
1791 panicf("recfile: %d", mpeg_file);
1792 }
1793
1786 if(writelen) 1794 if(writelen)
1787 { 1795 {
1788 rc = write(mpeg_file, mp3buf + mp3buf_read, writelen); 1796 rc = write(mpeg_file, mp3buf + mp3buf_read, writelen);
@@ -1867,6 +1875,15 @@ static void mpeg_thread(void)
1867 1875
1868 DEBUGF("wrl: %x\n", writelen); 1876 DEBUGF("wrl: %x\n", writelen);
1869 1877
1878 if (mpeg_file < 0) /* delayed file opening */
1879 {
1880 mpeg_file = open(delayed_filename,
1881 O_WRONLY|O_CREAT);
1882
1883 if(mpeg_file < 0)
1884 panicf("recfile: %d", mpeg_file);
1885 }
1886
1870 rc = write(mpeg_file, mp3buf + mp3buf_read, 1887 rc = write(mpeg_file, mp3buf + mp3buf_read,
1871 writelen); 1888 writelen);
1872 1889