summaryrefslogtreecommitdiff
path: root/apps/recorder/recording.c
diff options
context:
space:
mode:
authorPeter D'Hoye <peter.dhoye@gmail.com>2007-08-25 15:53:54 +0000
committerPeter D'Hoye <peter.dhoye@gmail.com>2007-08-25 15:53:54 +0000
commit583f186ce488ed52eb0c663a8263f4052e19063d (patch)
treed5f11cf489202737c93dafd52f9f65fb09f6a2b8 /apps/recorder/recording.c
parentcdfb22f9dfdbae2fdc6902f895fd89060abaa38b (diff)
downloadrockbox-583f186ce488ed52eb0c663a8263f4052e19063d.tar.gz
rockbox-583f186ce488ed52eb0c663a8263f4052e19063d.zip
Implement FS #2976: Clip Counter for recording screen. If enabled in peak meter settings, it shows the number of times clipping occurred (clip indicator going on). Count is reset on recording start and only counts during actual recording. Stays on screen when stopping or pauzing. Also fix a drawing bug when peakmeters start at a non-zero x offset.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14455 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder/recording.c')
-rw-r--r--apps/recorder/recording.c95
1 files changed, 68 insertions, 27 deletions
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 68528c71c0..053eecd844 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -694,19 +694,38 @@ void rec_set_recording_options(struct audio_recording_options *options)
694 audio_set_recording_options(options); 694 audio_set_recording_options(options);
695} 695}
696 696
697/* steals mp3 buffer, creates unique filename and starts recording */ 697void rec_command(enum recording_command cmd)
698void rec_record(void)
699{ 698{
699 switch(cmd)
700 {
701 case RECORDING_CMD_STOP:
702 pm_activate_clipcount(false);
703 audio_stop_recording();
704 break;
705 case RECORDING_CMD_START:
706 /* steal mp3 buffer, create unique filename and start recording */
707 pm_reset_clipcount();
708 pm_activate_clipcount(true);
700#if CONFIG_CODEC != SWCODEC 709#if CONFIG_CODEC != SWCODEC
701 talk_buffer_steal(); /* we use the mp3 buffer */ 710 talk_buffer_steal(); /* we use the mp3 buffer */
702#endif 711#endif
703 audio_record(rec_create_filename(path_buffer)); 712 audio_record(rec_create_filename(path_buffer));
704} 713 break;
705 714 case RECORDING_CMD_START_NEWFILE:
706/* creates unique filename and starts recording */ 715 /* create unique filename and start recording*/
707void rec_new_file(void) 716 pm_reset_clipcount();
708{ 717 pm_activate_clipcount(true); /* just to be sure */
709 audio_new_file(rec_create_filename(path_buffer)); 718 audio_new_file(rec_create_filename(path_buffer));
719 break;
720 case RECORDING_CMD_PAUSE:
721 pm_activate_clipcount(false);
722 audio_pause_recording();
723 break;
724 case RECORDING_CMD_RESUME:
725 pm_activate_clipcount(true);
726 audio_resume_recording();
727 break;
728 }
710} 729}
711 730
712/* used in trigger_listerner and recording_screen */ 731/* used in trigger_listerner and recording_screen */
@@ -725,7 +744,7 @@ static void trigger_listener(int trigger_status)
725 if(!(audio_status() & AUDIO_STATUS_RECORD)) 744 if(!(audio_status() & AUDIO_STATUS_RECORD))
726 { 745 {
727 rec_status |= RCSTAT_HAVE_RECORDED; 746 rec_status |= RCSTAT_HAVE_RECORDED;
728 rec_record(); 747 rec_command(RECORDING_CMD_START);
729#if CONFIG_CODEC != SWCODEC 748#if CONFIG_CODEC != SWCODEC
730 /* give control to mpeg thread so that it can start 749 /* give control to mpeg thread so that it can start
731 recording */ 750 recording */
@@ -738,11 +757,13 @@ static void trigger_listener(int trigger_status)
738 { 757 {
739 if((audio_status() & AUDIO_STATUS_PAUSE) && 758 if((audio_status() & AUDIO_STATUS_PAUSE) &&
740 (global_settings.rec_trigger_type == 1)) 759 (global_settings.rec_trigger_type == 1))
741 audio_resume_recording(); 760 {
761 rec_command(RECORDING_CMD_RESUME);
762 }
742 /* New file on trig start*/ 763 /* New file on trig start*/
743 else if (global_settings.rec_trigger_type != 2) 764 else if (global_settings.rec_trigger_type != 2)
744 { 765 {
745 rec_new_file(); 766 rec_command(RECORDING_CMD_START_NEWFILE);
746 /* tell recording_screen to reset the time */ 767 /* tell recording_screen to reset the time */
747 last_seconds = 0; 768 last_seconds = 0;
748 } 769 }
@@ -756,15 +777,15 @@ static void trigger_listener(int trigger_status)
756 switch(global_settings.rec_trigger_type) 777 switch(global_settings.rec_trigger_type)
757 { 778 {
758 case 0: /* Stop */ 779 case 0: /* Stop */
759 audio_stop_recording(); 780 rec_command(RECORDING_CMD_STOP);
760 break; 781 break;
761 782
762 case 1: /* Pause */ 783 case 1: /* Pause */
763 audio_pause_recording(); 784 rec_command(RECORDING_CMD_PAUSE);
764 break; 785 break;
765 786
766 case 2: /* New file on trig stop*/ 787 case 2: /* New file on trig stop*/
767 rec_new_file(); 788 rec_command(RECORDING_CMD_START_NEWFILE);
768 /* tell recording_screen to reset the time */ 789 /* tell recording_screen to reset the time */
769 last_seconds = 0; 790 last_seconds = 0;
770 break; 791 break;
@@ -825,6 +846,9 @@ bool recording_screen(bool no_source)
825 int trig_xpos[NB_SCREENS]; 846 int trig_xpos[NB_SCREENS];
826 int trig_ypos[NB_SCREENS]; 847 int trig_ypos[NB_SCREENS];
827 int trig_width[NB_SCREENS]; 848 int trig_width[NB_SCREENS];
849 /* pm_x = offset pm to put clipcount in front.
850 Use lcd_getstringsize() when not using SYSFONT */
851 int pm_x = global_settings.peak_meter_clipcounter ? 30 : 0;
828 852
829 static const unsigned char *byte_units[] = { 853 static const unsigned char *byte_units[] = {
830 ID2P(LANG_BYTE), 854 ID2P(LANG_BYTE),
@@ -881,6 +905,8 @@ bool recording_screen(bool no_source)
881 rec_init_filename(); 905 rec_init_filename();
882#endif 906#endif
883 907
908 pm_reset_clipcount();
909 pm_activate_clipcount(false);
884 settings_apply_trigger(); 910 settings_apply_trigger();
885 911
886#ifdef HAVE_AGC 912#ifdef HAVE_AGC
@@ -973,7 +999,7 @@ bool recording_screen(bool no_source)
973#endif /* CONFIG_LED */ 999#endif /* CONFIG_LED */
974 1000
975 /* Wait for a button a while (HZ/10) drawing the peak meter */ 1001 /* Wait for a button a while (HZ/10) drawing the peak meter */
976 button = peak_meter_draw_get_btn(0, pm_y, h * PM_HEIGHT, screen_update); 1002 button = peak_meter_draw_get_btn(pm_x, pm_y, h * PM_HEIGHT, screen_update);
977 1003
978 if (last_audio_stat != audio_stat) 1004 if (last_audio_stat != audio_stat)
979 { 1005 {
@@ -1021,7 +1047,7 @@ bool recording_screen(bool no_source)
1021 1047
1022 if(audio_stat & AUDIO_STATUS_RECORD) 1048 if(audio_stat & AUDIO_STATUS_RECORD)
1023 { 1049 {
1024 audio_stop_recording(); 1050 rec_command(RECORDING_CMD_STOP);
1025 } 1051 }
1026 else 1052 else
1027 { 1053 {
@@ -1045,7 +1071,7 @@ bool recording_screen(bool no_source)
1045 { 1071 {
1046 /* manual recording */ 1072 /* manual recording */
1047 rec_status |= RCSTAT_HAVE_RECORDED; 1073 rec_status |= RCSTAT_HAVE_RECORDED;
1048 rec_record(); 1074 rec_command(RECORDING_CMD_START);
1049 last_seconds = 0; 1075 last_seconds = 0;
1050 if (global_settings.talk_menu) 1076 if (global_settings.talk_menu)
1051 { 1077 {
@@ -1068,7 +1094,7 @@ bool recording_screen(bool no_source)
1068 /*if new file button pressed, start new file */ 1094 /*if new file button pressed, start new file */
1069 if (button == ACTION_REC_NEWFILE) 1095 if (button == ACTION_REC_NEWFILE)
1070 { 1096 {
1071 rec_new_file(); 1097 rec_command(RECORDING_CMD_START_NEWFILE);
1072 last_seconds = 0; 1098 last_seconds = 0;
1073 } 1099 }
1074 else 1100 else
@@ -1076,7 +1102,7 @@ bool recording_screen(bool no_source)
1076 { 1102 {
1077 if(audio_stat & AUDIO_STATUS_PAUSE) 1103 if(audio_stat & AUDIO_STATUS_PAUSE)
1078 { 1104 {
1079 audio_resume_recording(); 1105 rec_command(RECORDING_CMD_RESUME);
1080 if (global_settings.talk_menu) 1106 if (global_settings.talk_menu)
1081 { 1107 {
1082 /* no voice possible here, but a beep */ 1108 /* no voice possible here, but a beep */
@@ -1085,7 +1111,7 @@ bool recording_screen(bool no_source)
1085 } 1111 }
1086 else 1112 else
1087 { 1113 {
1088 audio_pause_recording(); 1114 rec_command(RECORDING_CMD_PAUSE);
1089 } 1115 }
1090 } 1116 }
1091 } 1117 }
@@ -1332,7 +1358,7 @@ bool recording_screen(bool no_source)
1332 case ACTION_REC_F3: 1358 case ACTION_REC_F3:
1333 if(audio_stat & AUDIO_STATUS_RECORD) 1359 if(audio_stat & AUDIO_STATUS_RECORD)
1334 { 1360 {
1335 rec_new_file(); 1361 rec_command(RECORDING_CMD_START_NEWFILE);
1336 last_seconds = 0; 1362 last_seconds = 0;
1337 } 1363 }
1338 else 1364 else
@@ -1497,18 +1523,33 @@ bool recording_screen(bool no_source)
1497 if (!(global_settings.rec_split_type) 1523 if (!(global_settings.rec_split_type)
1498 || (num_recorded_bytes >= MAX_FILE_SIZE)) 1524 || (num_recorded_bytes >= MAX_FILE_SIZE))
1499 { 1525 {
1500 rec_new_file(); 1526 rec_command(RECORDING_CMD_START_NEWFILE);
1501 last_seconds = 0; 1527 last_seconds = 0;
1502 } 1528 }
1503 else 1529 else
1504 { 1530 {
1505 peak_meter_trigger(false); 1531 peak_meter_trigger(false);
1506 peak_meter_set_trigger_listener(NULL); 1532 peak_meter_set_trigger_listener(NULL);
1507 audio_stop_recording(); 1533 rec_command(RECORDING_CMD_STOP);
1508 } 1534 }
1509 update_countdown = 1; 1535 update_countdown = 1;
1510 } 1536 }
1511 1537
1538 /* draw the clipcounter just in front of the peakmeter */
1539 if(global_settings.peak_meter_clipcounter)
1540 {
1541 char clpstr[32];
1542 snprintf(clpstr, 32, "%4d", pm_get_clipcount());
1543 for(i = 0; i < screen_update; i++)
1544 {
1545 if(PM_HEIGHT > 1)
1546 screens[i].puts(0, 2 + filename_offset[i],
1547 str(LANG_PM_CLIPCOUNT));
1548 screens[i].puts(0, 1 + PM_HEIGHT + filename_offset[i],
1549 clpstr);
1550 }
1551 }
1552
1512 snprintf(buf, sizeof(buf), "%s: %s", str(LANG_SYSFONT_VOLUME), 1553 snprintf(buf, sizeof(buf), "%s: %s", str(LANG_SYSFONT_VOLUME),
1513 fmt_gain(SOUND_VOLUME, 1554 fmt_gain(SOUND_VOLUME,
1514 global_settings.volume, 1555 global_settings.volume,
@@ -1749,7 +1790,7 @@ bool recording_screen(bool no_source)
1749 for(i = 0; i < screen_update; i++) 1790 for(i = 0; i < screen_update; i++)
1750 { 1791 {
1751 gui_statusbar_draw(&(statusbars.statusbars[i]), true); 1792 gui_statusbar_draw(&(statusbars.statusbars[i]), true);
1752 peak_meter_screen(&screens[i], 0, pm_y[i], h*PM_HEIGHT); 1793 peak_meter_screen(&screens[i], pm_x, pm_y[i], h*PM_HEIGHT);
1753 screens[i].update(); 1794 screens[i].update();
1754 } 1795 }
1755 1796
@@ -1805,7 +1846,7 @@ bool recording_screen(bool no_source)
1805 } 1846 }
1806 1847
1807#if CONFIG_CODEC == SWCODEC 1848#if CONFIG_CODEC == SWCODEC
1808 audio_stop_recording(); 1849 rec_command(RECORDING_CMD_STOP);
1809 audio_close_recording(); 1850 audio_close_recording();
1810 1851
1811#ifdef HAVE_FMRADIO_REC 1852#ifdef HAVE_FMRADIO_REC