diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2003-02-22 01:40:57 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2003-02-22 01:40:57 +0000 |
commit | 94dea1e020806011f7596dbee508fb117954bdcc (patch) | |
tree | 6f296aed6ef4ba03081edc1fb9c3ccf867cb8026 /firmware/mpeg.c | |
parent | 6e3eb8489bd79f9922195d4ab7c98f1e7b0ffe84 (diff) | |
download | rockbox-94dea1e020806011f7596dbee508fb117954bdcc.tar.gz rockbox-94dea1e020806011f7596dbee508fb117954bdcc.zip |
Safer recording, now closes the file after each successful buffer save
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3321 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 6fe60c99c9..e9d0943115 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -485,6 +485,7 @@ static bool stop_pending; | |||
485 | unsigned long record_start_time; /* Value of current_tick when recording | 485 | unsigned long record_start_time; /* Value of current_tick when recording |
486 | was started */ | 486 | was started */ |
487 | static bool saving; /* We are saving the buffer to disk */ | 487 | static bool saving; /* We are saving the buffer to disk */ |
488 | static char recording_filename[MAX_PATH]; | ||
488 | #endif | 489 | #endif |
489 | 490 | ||
490 | static int mpeg_file; | 491 | static int mpeg_file; |
@@ -1576,7 +1577,7 @@ static void mpeg_thread(void) | |||
1576 | { | 1577 | { |
1577 | /* We need to load more data before starting */ | 1578 | /* We need to load more data before starting */ |
1578 | filling = true; | 1579 | filling = true; |
1579 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); | 1580 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); |
1580 | play_pending = true; | 1581 | play_pending = true; |
1581 | } | 1582 | } |
1582 | else if (unswapped_space_left > unplayed_space_left) | 1583 | else if (unswapped_space_left > unplayed_space_left) |
@@ -1805,10 +1806,13 @@ static void mpeg_thread(void) | |||
1805 | reset_mp3_buffer(); | 1806 | reset_mp3_buffer(); |
1806 | start_recording(); | 1807 | start_recording(); |
1807 | demand_irq_enable(true); | 1808 | demand_irq_enable(true); |
1808 | mpeg_file = open((char *)ev.data, | 1809 | mpeg_file = creat(recording_filename, O_WRONLY); |
1809 | O_WRONLY | O_TRUNC | O_CREAT); | 1810 | |
1810 | if(mpeg_file < 0) | 1811 | if(mpeg_file < 0) |
1811 | panicf("recfile: %d", mpeg_file); | 1812 | panicf("recfile: %d", mpeg_file); |
1813 | |||
1814 | close(mpeg_file); | ||
1815 | mpeg_file = -1; | ||
1812 | break; | 1816 | break; |
1813 | 1817 | ||
1814 | case MPEG_STOP: | 1818 | case MPEG_STOP: |
@@ -1870,8 +1874,16 @@ static void mpeg_thread(void) | |||
1870 | mp3buflen - mp3buf_read); | 1874 | mp3buflen - mp3buf_read); |
1871 | 1875 | ||
1872 | DEBUGF("wrl: %x\n", writelen); | 1876 | DEBUGF("wrl: %x\n", writelen); |
1877 | mpeg_file = open(recording_filename, | ||
1878 | O_WRONLY| O_APPEND); | ||
1879 | if(mpeg_file < 0) | ||
1880 | panicf("recfile: %d", mpeg_file); | ||
1881 | |||
1873 | rc = write(mpeg_file, mp3buf + mp3buf_read, | 1882 | rc = write(mpeg_file, mp3buf + mp3buf_read, |
1874 | writelen); | 1883 | writelen); |
1884 | |||
1885 | close(mpeg_file); | ||
1886 | mpeg_file = -1; | ||
1875 | DEBUGF("rc: %x\n", rc); | 1887 | DEBUGF("rc: %x\n", rc); |
1876 | 1888 | ||
1877 | mp3buf_read += amount_to_save; | 1889 | mp3buf_read += amount_to_save; |
@@ -2137,8 +2149,11 @@ static void init_playback(void) | |||
2137 | 2149 | ||
2138 | void mpeg_record(char *filename) | 2150 | void mpeg_record(char *filename) |
2139 | { | 2151 | { |
2152 | strncpy(recording_filename, filename, MAX_PATH - 1); | ||
2153 | recording_filename[MAX_PATH - 1] = 0; | ||
2154 | |||
2140 | num_rec_bytes = 0; | 2155 | num_rec_bytes = 0; |
2141 | queue_post(&mpeg_queue, MPEG_RECORD, (void*)filename); | 2156 | queue_post(&mpeg_queue, MPEG_RECORD, NULL); |
2142 | } | 2157 | } |
2143 | 2158 | ||
2144 | static void start_recording(void) | 2159 | static void start_recording(void) |