summaryrefslogtreecommitdiff
path: root/apps/recorder
diff options
context:
space:
mode:
authorMartin Scarratt <mmmm@rockbox.org>2006-07-20 22:44:10 +0000
committerMartin Scarratt <mmmm@rockbox.org>2006-07-20 22:44:10 +0000
commit76b729c47b8edca000ed93f81e6d6bf62dab1701 (patch)
tree7ee938d914fb4fe3bd8e73b91f0a4ddff7c8f36d /apps/recorder
parentf28c35effc9ddb624839596180130f151cb97d41 (diff)
downloadrockbox-76b729c47b8edca000ed93f81e6d6bf62dab1701.tar.gz
rockbox-76b729c47b8edca000ed93f81e6d6bf62dab1701.zip
On-the-fly filesplitting when recording for I-Rivers. Record button starts new file, Play/Pause button pauses/resumes recording. Also, Filename information for all screens > 80 pixels high.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10270 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder')
-rw-r--r--apps/recorder/peakmeter.c6
-rw-r--r--apps/recorder/peakmeter.h2
-rw-r--r--apps/recorder/recording.c114
3 files changed, 89 insertions, 33 deletions
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c
index cb5464f9af..4b8843cff3 100644
--- a/apps/recorder/peakmeter.c
+++ b/apps/recorder/peakmeter.c
@@ -1169,7 +1169,7 @@ void peak_meter_draw_trig(int xpos, int ypos)
1169} 1169}
1170#endif 1170#endif
1171 1171
1172int peak_meter_draw_get_btn(int x, int y, int height) 1172int peak_meter_draw_get_btn(int x, int y[], int height)
1173{ 1173{
1174 int button = BUTTON_NONE; 1174 int button = BUTTON_NONE;
1175 long next_refresh = current_tick; 1175 long next_refresh = current_tick;
@@ -1197,8 +1197,8 @@ int peak_meter_draw_get_btn(int x, int y, int height)
1197 if (TIME_AFTER(current_tick, next_refresh)) { 1197 if (TIME_AFTER(current_tick, next_refresh)) {
1198 FOR_NB_SCREENS(i) 1198 FOR_NB_SCREENS(i)
1199 { 1199 {
1200 peak_meter_screen(&screens[i], x, y, height); 1200 peak_meter_screen(&screens[i], x, y[i], height);
1201 screens[i].update_rect(x, y, screens[i].width, height); 1201 screens[i].update_rect(x, y[i], screens[i].width, height);
1202 } 1202 }
1203 next_refresh += HZ / PEAK_METER_FPS; 1203 next_refresh += HZ / PEAK_METER_FPS;
1204 dopeek = true; 1204 dopeek = true;
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h
index 759b4547ca..4f92b14907 100644
--- a/apps/recorder/peakmeter.h
+++ b/apps/recorder/peakmeter.h
@@ -29,7 +29,7 @@ extern bool peak_meter_histogram(void);
29extern bool peak_meter_enabled; 29extern bool peak_meter_enabled;
30 30
31extern void peak_meter_playback(bool playback); 31extern void peak_meter_playback(bool playback);
32extern int peak_meter_draw_get_btn(int x, int y, int height); 32extern int peak_meter_draw_get_btn(int x, int y[], int height);
33extern void peak_meter_set_clip_hold(int time); 33extern void peak_meter_set_clip_hold(int time);
34extern void peak_meter_peek(void); 34extern void peak_meter_peek(void);
35extern void peak_meter_init_range( bool dbfs, int range_min, int range_max); 35extern void peak_meter_init_range( bool dbfs, int range_min, int range_max);
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 458861c591..09ec0f43f5 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -91,7 +91,8 @@
91#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) 91#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
92#define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT) 92#define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT)
93#define REC_STOPEXIT BUTTON_OFF 93#define REC_STOPEXIT BUTTON_OFF
94#define REC_RECPAUSE BUTTON_REC 94#define REC_RECPAUSE BUTTON_ON
95#define REC_NEWFILE BUTTON_REC
95#define REC_INC BUTTON_RIGHT 96#define REC_INC BUTTON_RIGHT
96#define REC_DEC BUTTON_LEFT 97#define REC_DEC BUTTON_LEFT
97#define REC_NEXT BUTTON_DOWN 98#define REC_NEXT BUTTON_DOWN
@@ -101,6 +102,7 @@
101#define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT) 102#define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT)
102#define REC_RC_STOPEXIT BUTTON_RC_STOP 103#define REC_RC_STOPEXIT BUTTON_RC_STOP
103#define REC_RC_RECPAUSE BUTTON_RC_ON 104#define REC_RC_RECPAUSE BUTTON_RC_ON
105#define REC_RC_NEWFILE BUTTON_RC_REC
104#define REC_RC_INC BUTTON_RC_BITRATE 106#define REC_RC_INC BUTTON_RC_BITRATE
105#define REC_RC_DEC BUTTON_RC_SOURCE 107#define REC_RC_DEC BUTTON_RC_SOURCE
106#define REC_RC_NEXT BUTTON_RC_FF 108#define REC_RC_NEXT BUTTON_RC_FF
@@ -324,6 +326,7 @@ bool recording_screen(void)
324 unsigned int seconds; 326 unsigned int seconds;
325 int hours, minutes; 327 int hours, minutes;
326 char path_buffer[MAX_PATH]; 328 char path_buffer[MAX_PATH];
329 char filename[13];
327 bool been_in_usb_mode = false; 330 bool been_in_usb_mode = false;
328 int last_audio_stat = -1; 331 int last_audio_stat = -1;
329 int audio_stat; 332 int audio_stat;
@@ -332,6 +335,8 @@ bool recording_screen(void)
332 int led_countdown = 2; 335 int led_countdown = 2;
333#endif 336#endif
334 int i; 337 int i;
338 int filename_offset[NB_SCREENS];
339 int pm_y[NB_SCREENS];
335 340
336 const unsigned char *byte_units[] = { 341 const unsigned char *byte_units[] = {
337 ID2P(LANG_BYTE), 342 ID2P(LANG_BYTE),
@@ -395,6 +400,8 @@ bool recording_screen(void)
395 screens[i].setfont(FONT_SYSFIXED); 400 screens[i].setfont(FONT_SYSFIXED);
396 screens[i].getstringsize("M", &w, &h); 401 screens[i].getstringsize("M", &w, &h);
397 screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8); 402 screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8);
403 filename_offset[i] = ((screens[i].height >= 80) ? 1 : 0);
404 pm_y[i] = 8 + h * (2 + filename_offset[i]);
398 } 405 }
399 406
400 if(rec_create_directory() > 0) 407 if(rec_create_directory() > 0)
@@ -456,7 +463,7 @@ bool recording_screen(void)
456#endif /* CONFIG_LED */ 463#endif /* CONFIG_LED */
457 464
458 /* Wait for a button a while (HZ/10) drawing the peak meter */ 465 /* Wait for a button a while (HZ/10) drawing the peak meter */
459 button = peak_meter_draw_get_btn(0, 8 + h*2, h * PM_HEIGHT); 466 button = peak_meter_draw_get_btn(0, pm_y, h * PM_HEIGHT);
460 467
461 if (last_audio_stat != audio_stat) 468 if (last_audio_stat != audio_stat)
462 { 469 {
@@ -500,6 +507,12 @@ bool recording_screen(void)
500#ifdef REC_RC_RECPAUSE 507#ifdef REC_RC_RECPAUSE
501 case REC_RC_RECPAUSE: 508 case REC_RC_RECPAUSE:
502#endif 509#endif
510#ifdef REC_NEWFILE
511 case REC_NEWFILE:
512#endif
513#ifdef REC_RC_NEWFILE
514 case REC_RC_NEWFILE:
515#endif
503#ifdef REC_RECPAUSE_PRE 516#ifdef REC_RECPAUSE_PRE
504 if (lastbutton != REC_RECPAUSE_PRE) 517 if (lastbutton != REC_RECPAUSE_PRE)
505 break; 518 break;
@@ -534,17 +547,33 @@ bool recording_screen(void)
534 } 547 }
535 else 548 else
536 { 549 {
537 if(audio_stat & AUDIO_STATUS_PAUSE) 550#ifdef REC_NEWFILE
551 /*if new file button pressed, start new file */
552 if ((button == REC_NEWFILE)
553#ifdef REC_RC_NEWFILE
554 || (button == REC_RC_NEWFILE)
555#endif
556 )
538 { 557 {
539 audio_resume_recording(); 558 audio_new_file(rec_create_filename(path_buffer));
540 if (global_settings.talk_menu) 559 last_seconds = 0;
541 { /* no voice possible here, but a beep */
542 audio_beep(HZ/4); /* short beep on resume */
543 }
544 } 560 }
545 else 561 else
562#endif
563 /* if pause button pressed, pause or resume */
546 { 564 {
547 audio_pause_recording(); 565 if(audio_stat & AUDIO_STATUS_PAUSE)
566 {
567 audio_resume_recording();
568 if (global_settings.talk_menu)
569 { /* no voice possible here, but a beep */
570 audio_beep(HZ/4); /* short beep on resume */
571 }
572 }
573 else
574 {
575 audio_pause_recording();
576 }
548 } 577 }
549 } 578 }
550 update_countdown = 1; /* Update immediately */ 579 update_countdown = 1; /* Update immediately */
@@ -830,6 +859,24 @@ bool recording_screen(void)
830 FOR_NB_SCREENS(i) 859 FOR_NB_SCREENS(i)
831 screens[i].puts(0, 1, buf); 860 screens[i].puts(0, 1, buf);
832 861
862 FOR_NB_SCREENS(i)
863 {
864 if (filename_offset[i] > 0)
865 {
866 if (audio_stat & AUDIO_STATUS_RECORD)
867 {
868 strncpy(filename, path_buffer +
869 strlen(path_buffer) - 12, 13);
870 filename[12]='\0';
871 }
872 else
873 strcpy(filename, "");
874
875 snprintf(buf, 32, "Filename: %s", filename);
876 screens[i].puts(0, 2, buf);
877 }
878 }
879
833 /* We will do file splitting regardless, either at the end of 880 /* We will do file splitting regardless, either at the end of
834 a split interval, or when the filesize approaches the 2GB 881 a split interval, or when the filesize approaches the 2GB
835 FAT file size (compatibility) limit. */ 882 FAT file size (compatibility) limit. */
@@ -850,13 +897,13 @@ bool recording_screen(void)
850 if (global_settings.invert_cursor && (pos++ == cursor)) 897 if (global_settings.invert_cursor && (pos++ == cursor))
851 { 898 {
852 FOR_NB_SCREENS(i) 899 FOR_NB_SCREENS(i)
853 screens[i].puts_style_offset(0, 2+PM_HEIGHT, buf, 900 screens[i].puts_style_offset(0, filename_offset[i] +
854 STYLE_INVERT,0); 901 PM_HEIGHT + 2, buf, STYLE_INVERT,0);
855 } 902 }
856 else 903 else
857 { 904 {
858 FOR_NB_SCREENS(i) 905 FOR_NB_SCREENS(i)
859 screens[i].puts(0, 2+PM_HEIGHT, buf); 906 screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 2, buf);
860 } 907 }
861 908
862 if(global_settings.rec_source == SOURCE_MIC) 909 if(global_settings.rec_source == SOURCE_MIC)
@@ -868,13 +915,14 @@ bool recording_screen(void)
868 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) 915 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
869 { 916 {
870 FOR_NB_SCREENS(i) 917 FOR_NB_SCREENS(i)
871 screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, 918 screens[i].puts_style_offset(0, filename_offset[i] +
872 STYLE_INVERT,0); 919 PM_HEIGHT + 3, buf, STYLE_INVERT,0);
873 } 920 }
874 else 921 else
875 { 922 {
876 FOR_NB_SCREENS(i) 923 FOR_NB_SCREENS(i)
877 screens[i].puts(0, 3+PM_HEIGHT, buf); 924 screens[i].puts(0, filename_offset[i] +
925 PM_HEIGHT + 3, buf);
878 } 926 }
879 } 927 }
880 else if(global_settings.rec_source == SOURCE_LINE) 928 else if(global_settings.rec_source == SOURCE_LINE)
@@ -887,13 +935,14 @@ bool recording_screen(void)
887 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) 935 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
888 { 936 {
889 FOR_NB_SCREENS(i) 937 FOR_NB_SCREENS(i)
890 screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, 938 screens[i].puts_style_offset(0, filename_offset[i] +
891 STYLE_INVERT,0); 939 PM_HEIGHT + 3, buf, STYLE_INVERT,0);
892 } 940 }
893 else 941 else
894 { 942 {
895 FOR_NB_SCREENS(i) 943 FOR_NB_SCREENS(i)
896 screens[i].puts(0, 3+PM_HEIGHT, buf); 944 screens[i].puts(0, filename_offset[i] +
945 PM_HEIGHT + 3, buf);
897 } 946 }
898 947
899 snprintf(buf, 32, "%s:%s", 948 snprintf(buf, 32, "%s:%s",
@@ -904,14 +953,16 @@ bool recording_screen(void)
904 if(global_settings.invert_cursor && ((1==cursor)||(3==cursor))) 953 if(global_settings.invert_cursor && ((1==cursor)||(3==cursor)))
905 { 954 {
906 FOR_NB_SCREENS(i) 955 FOR_NB_SCREENS(i)
907 screens[i].puts_style_offset(0, 4+PM_HEIGHT, buf, 956 screens[i].puts_style_offset(0, filename_offset[i] +
908 STYLE_INVERT,0); 957 PM_HEIGHT + 4, buf, STYLE_INVERT,0);
909 } 958 }
910 else 959 else
911 { 960 {
912 FOR_NB_SCREENS(i) 961 FOR_NB_SCREENS(i)
913 screens[i].puts(0, 4+PM_HEIGHT, buf); 962 screens[i].puts(0, filename_offset[i] +
963 PM_HEIGHT + 4, buf);
914 } 964 }
965
915 } 966 }
916 967
917 if(!global_settings.invert_cursor){ 968 if(!global_settings.invert_cursor){
@@ -919,30 +970,35 @@ bool recording_screen(void)
919 { 970 {
920 case 1: 971 case 1:
921 FOR_NB_SCREENS(i) 972 FOR_NB_SCREENS(i)
922 screen_put_cursorxy(&screens[i], 0, 973 screen_put_cursorxy(&screens[i], 0,
923 3+PM_HEIGHT, true); 974 filename_offset[i] +
975 PM_HEIGHT + 3, true);
924 976
925 if(global_settings.rec_source != SOURCE_MIC) 977 if(global_settings.rec_source != SOURCE_MIC)
926 { 978 {
927 FOR_NB_SCREENS(i) 979 FOR_NB_SCREENS(i)
928 screen_put_cursorxy(&screens[i], 0, 980 screen_put_cursorxy(&screens[i], 0,
929 4+PM_HEIGHT, true); 981 filename_offset[i] +
982 PM_HEIGHT + 4, true);
930 } 983 }
931 break; 984 break;
932 case 2: 985 case 2:
933 FOR_NB_SCREENS(i) 986 FOR_NB_SCREENS(i)
934 screen_put_cursorxy(&screens[i], 0, 987 screen_put_cursorxy(&screens[i], 0,
935 3+PM_HEIGHT, true); 988 filename_offset[i] +
989 PM_HEIGHT + 3, true);
936 break; 990 break;
937 case 3: 991 case 3:
938 FOR_NB_SCREENS(i) 992 FOR_NB_SCREENS(i)
939 screen_put_cursorxy(&screens[i], 0, 993 screen_put_cursorxy(&screens[i], 0,
940 4+PM_HEIGHT, true); 994 filename_offset[i] +
995 PM_HEIGHT + 4, true);
941 break; 996 break;
942 default: 997 default:
943 FOR_NB_SCREENS(i) 998 FOR_NB_SCREENS(i)
944 screen_put_cursorxy(&screens[i], 0, 999 screen_put_cursorxy(&screens[i], 0,
945 2+PM_HEIGHT, true); 1000 filename_offset[i] +
1001 PM_HEIGHT + 2, true);
946 } 1002 }
947 } 1003 }
948/* Can't measure S/PDIF sample rate on Archos yet */ 1004/* Can't measure S/PDIF sample rate on Archos yet */
@@ -961,13 +1017,13 @@ bool recording_screen(void)
961 global_settings.rec_channels ? 1017 global_settings.rec_channels ?
962 str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO)); 1018 str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO));
963 FOR_NB_SCREENS(i) 1019 FOR_NB_SCREENS(i)
964 screens[i].puts(0, 5+PM_HEIGHT, buf); 1020 screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 5, buf);
965 1021
966 gui_syncstatusbar_draw(&statusbars, true); 1022 gui_syncstatusbar_draw(&statusbars, true);
967 1023
968 FOR_NB_SCREENS(i) 1024 FOR_NB_SCREENS(i)
969 { 1025 {
970 peak_meter_screen(&screens[i], 0, 8 + h*2, h*PM_HEIGHT); 1026 peak_meter_screen(&screens[i], 0, pm_y[i], h*PM_HEIGHT);
971 screens[i].update(); 1027 screens[i].update();
972 } 1028 }
973 1029