summaryrefslogtreecommitdiff
path: root/apps/recorder/recording.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/recorder/recording.c')
-rw-r--r--apps/recorder/recording.c60
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
46bool f2_rec_screen(void); 50bool f2_rec_screen(void);
47bool f3_rec_screen(void); 51bool f3_rec_screen(void);
@@ -114,20 +118,22 @@ void adjust_cursor(void)
114 } 118 }
115} 119}
116 120
117char *rec_create_filename(void) 121char *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
133bool recording_screen(void) 139bool 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
535bool f2_rec_screen(void) 567bool f2_rec_screen(void)