diff options
Diffstat (limited to 'apps/recorder/recording.c')
-rw-r--r-- | apps/recorder/recording.c | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index b98a4579f7..c7d4b803d2 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c | |||
@@ -42,6 +42,10 @@ | |||
42 | #include "timefuncs.h" | 42 | #include "timefuncs.h" |
43 | #include "debug.h" | 43 | #include "debug.h" |
44 | #include "misc.h" | 44 | #include "misc.h" |
45 | #include "tree.h" | ||
46 | #include "string.h" | ||
47 | #include "dir.h" | ||
48 | #include "errno.h" | ||
45 | 49 | ||
46 | bool f2_rec_screen(void); | 50 | bool f2_rec_screen(void); |
47 | bool f3_rec_screen(void); | 51 | bool f3_rec_screen(void); |
@@ -114,20 +118,22 @@ void adjust_cursor(void) | |||
114 | } | 118 | } |
115 | } | 119 | } |
116 | 120 | ||
117 | char *rec_create_filename(void) | 121 | char *rec_create_filename(char *buffer) |
118 | { | 122 | { |
119 | static char fname[32]; | 123 | int fpos; |
120 | struct tm * tm; | 124 | struct tm *tm = get_time(); |
121 | 125 | ||
122 | tm = get_time(); | 126 | if(global_settings.rec_directory) |
127 | getcwd(buffer, MAX_PATH); | ||
128 | else | ||
129 | strncpy(buffer, rec_base_directory, MAX_PATH); | ||
123 | 130 | ||
124 | /* Create a filename: RYYMMDD-HHMMSS.mp3 */ | 131 | /* Append filename to path: RYYMMDD-HH.MM.SS.mp3 */ |
125 | snprintf(fname, 32, "/R%02d%02d%02d-%02d%02d%02d.mp3", | 132 | fpos = strlen(buffer); |
133 | snprintf(&buffer[fpos], MAX_PATH-fpos, "/R%02d%02d%02d-%02d%02d%02d.mp3", | ||
126 | tm->tm_year%100, tm->tm_mon+1, tm->tm_mday, | 134 | tm->tm_year%100, tm->tm_mon+1, tm->tm_mday, |
127 | tm->tm_hour, tm->tm_min, tm->tm_sec); | 135 | tm->tm_hour, tm->tm_min, tm->tm_sec); |
128 | 136 | return buffer; | |
129 | DEBUGF("Filename: %s\n", fname); | ||
130 | return fname; | ||
131 | } | 137 | } |
132 | 138 | ||
133 | bool recording_screen(void) | 139 | bool recording_screen(void) |
@@ -144,6 +150,9 @@ bool recording_screen(void) | |||
144 | unsigned int seconds; | 150 | unsigned int seconds; |
145 | unsigned int last_seconds = 0; | 151 | unsigned int last_seconds = 0; |
146 | int hours, minutes; | 152 | int hours, minutes; |
153 | char path_buffer[MAX_PATH]; | ||
154 | int rc; | ||
155 | bool been_in_usb_mode = false; | ||
147 | 156 | ||
148 | cursor = 0; | 157 | cursor = 0; |
149 | mpeg_init_recording(); | 158 | mpeg_init_recording(); |
@@ -170,6 +179,25 @@ bool recording_screen(void) | |||
170 | lcd_getstringsize("M", &w, &h); | 179 | lcd_getstringsize("M", &w, &h); |
171 | lcd_setmargins(global_settings.invert_cursor ? 0 : w, 8); | 180 | lcd_setmargins(global_settings.invert_cursor ? 0 : w, 8); |
172 | 181 | ||
182 | /* Try to create the base directory if needed */ | ||
183 | if(global_settings.rec_directory == 0) | ||
184 | { | ||
185 | rc = mkdir(rec_base_directory, 0); | ||
186 | if(rc < 0 && errno != EEXIST) | ||
187 | { | ||
188 | splash(HZ * 2, true, | ||
189 | "Can't create the %s directory. Error code %d.", | ||
190 | rec_base_directory, rc); | ||
191 | } | ||
192 | else | ||
193 | { | ||
194 | /* If we have created the directory, we want the dir browser to | ||
195 | be refreshed even if we haven't recorded anything */ | ||
196 | if(errno != EEXIST) | ||
197 | have_recorded = true; | ||
198 | } | ||
199 | } | ||
200 | |||
173 | while(!done) | 201 | while(!done) |
174 | { | 202 | { |
175 | button = button_get_w_tmo(HZ / peak_meter_fps); | 203 | button = button_get_w_tmo(HZ / peak_meter_fps); |
@@ -195,13 +223,13 @@ bool recording_screen(void) | |||
195 | if(!(mpeg_status() & MPEG_STATUS_RECORD)) | 223 | if(!(mpeg_status() & MPEG_STATUS_RECORD)) |
196 | { | 224 | { |
197 | have_recorded = true; | 225 | have_recorded = true; |
198 | mpeg_record(rec_create_filename()); | 226 | mpeg_record(rec_create_filename(path_buffer)); |
199 | status_set_playmode(STATUS_RECORD); | 227 | status_set_playmode(STATUS_RECORD); |
200 | update_countdown = 1; /* Update immediately */ | 228 | update_countdown = 1; /* Update immediately */ |
201 | } | 229 | } |
202 | else | 230 | else |
203 | { | 231 | { |
204 | mpeg_new_file(rec_create_filename()); | 232 | mpeg_new_file(rec_create_filename(path_buffer)); |
205 | update_countdown = 1; /* Update immediately */ | 233 | update_countdown = 1; /* Update immediately */ |
206 | } | 234 | } |
207 | last_seconds = 0; | 235 | last_seconds = 0; |
@@ -354,8 +382,8 @@ bool recording_screen(void) | |||
354 | if(mpeg_status() != MPEG_STATUS_RECORD) | 382 | if(mpeg_status() != MPEG_STATUS_RECORD) |
355 | { | 383 | { |
356 | usb_screen(); | 384 | usb_screen(); |
357 | have_recorded = true; /* Refreshes the browser later on */ | ||
358 | done = true; | 385 | done = true; |
386 | been_in_usb_mode = true; | ||
359 | } | 387 | } |
360 | break; | 388 | break; |
361 | } | 389 | } |
@@ -419,7 +447,7 @@ bool recording_screen(void) | |||
419 | that the recorded files don't get too big. */ | 447 | that the recorded files don't get too big. */ |
420 | if (mpeg_status() && (seconds >= dseconds)) | 448 | if (mpeg_status() && (seconds >= dseconds)) |
421 | { | 449 | { |
422 | mpeg_new_file(rec_create_filename()); | 450 | mpeg_new_file(rec_create_filename(path_buffer)); |
423 | update_countdown = 1; | 451 | update_countdown = 1; |
424 | last_seconds = 0; | 452 | last_seconds = 0; |
425 | } | 453 | } |
@@ -529,7 +557,11 @@ bool recording_screen(void) | |||
529 | mpeg_sound_set(SOUND_AVC, global_settings.avc); | 557 | mpeg_sound_set(SOUND_AVC, global_settings.avc); |
530 | 558 | ||
531 | lcd_setfont(FONT_UI); | 559 | lcd_setfont(FONT_UI); |
532 | return have_recorded; | 560 | |
561 | if (have_recorded) | ||
562 | reload_directory(); | ||
563 | |||
564 | return been_in_usb_mode; | ||
533 | } | 565 | } |
534 | 566 | ||
535 | bool f2_rec_screen(void) | 567 | bool f2_rec_screen(void) |