? build ? play_rec_file.patch Index: apps/settings.h =================================================================== RCS file: /cvsroot/rockbox/apps/settings.h,v retrieving revision 1.160 diff -u -b -r1.160 settings.h --- apps/settings.h 1 Sep 2005 08:14:09 -0000 1.160 +++ apps/settings.h 4 Sep 2005 18:17:30 -0000 @@ -101,6 +101,10 @@ #define FF_REWIND_45000 12 #define FF_REWIND_60000 13 +#define REC_SOURCE_MIC 0 +#define REC_SOURCE_LINE 1 +#define REC_SOURCE_SPDIF 2 + #define TRIG_MODE_OFF 0 #define TRIG_MODE_NOREARM 1 #define TRIG_MODE_REARM 2 Index: apps/sound_menu.c =================================================================== RCS file: /cvsroot/rockbox/apps/sound_menu.c,v retrieving revision 1.77 diff -u -b -r1.77 sound_menu.c --- apps/sound_menu.c 29 Aug 2005 21:15:20 -0000 1.77 +++ apps/sound_menu.c 4 Sep 2005 18:17:31 -0000 @@ -41,6 +41,8 @@ #if CONFIG_CODEC == MAS3587F #include "peakmeter.h" #include "mas.h" +#include "audio.h" +#include "recording.h" #endif static const char* const fmt[] = @@ -555,9 +557,19 @@ int option_lines; int w, h; + bool recording_toggled = 0; + bool was_pm_enabled = peak_meter_enabled; + + if ((audio_status() == 0) && (audio_mode() != MPEG_ENCODER)) + { + rec_init_recording(); + recording_toggled = 1; + } + /* restart trigger with new values */ settings_apply_trigger(); peak_meter_trigger (global_settings.rec_trigger_mode != TRIG_MODE_OFF); + peak_meter_enabled = true; lcd_clear_display(); @@ -570,7 +582,7 @@ lcd_getstringsize("M", &w, &h); - // two lines are reserved for peak meter and trigger status + /* two lines are reserved for peak meter and trigger status */ option_lines = (LCD_HEIGHT/h) - (global_settings.statusbar ? 1:0) - 2; while (!exit_request) { @@ -738,7 +750,7 @@ break; case TRIG_OPTION_COUNT: - // avoid compiler warnings + /* avoid compiler warnings */ break; } peak_meter_trigger(global_settings.rec_trigger_mode!=TRIG_OFF); @@ -785,7 +797,7 @@ break; case TRIG_OPTION_COUNT: - // avoid compiler warnings + /* avoid compiler warnings */ break; } @@ -813,6 +825,11 @@ } peak_meter_trigger(false); + peak_meter_enabled = was_pm_enabled; + if (recording_toggled) { + audio_init_playback(); + sound_settings_apply(); + } lcd_setfont(FONT_UI); lcd_setmargins(old_x_margin, old_y_margin); return retval; Index: apps/recorder/recording.c =================================================================== RCS file: /cvsroot/rockbox/apps/recorder/recording.c,v retrieving revision 1.87 diff -u -b -r1.87 recording.c --- apps/recorder/recording.c 2 Sep 2005 01:15:35 -0000 1.87 +++ apps/recorder/recording.c 4 Sep 2005 18:17:35 -0000 @@ -88,10 +88,6 @@ bool f2_rec_screen(void); bool f3_rec_screen(void); -#define SOURCE_MIC 0 -#define SOURCE_LINE 1 -#define SOURCE_SPDIF 2 - #define MAX_FILE_SIZE 0x7FF00000 /* 2 GB - 1 MB */ const char* const freq_str[6] = @@ -106,7 +102,7 @@ static void set_gain(void) { - if(global_settings.rec_source == SOURCE_MIC) + if(global_settings.rec_source == REC_SOURCE_MIC) { mpeg_set_recording_gain(global_settings.rec_mic_gain, 0, true); } @@ -117,6 +113,21 @@ } } +void rec_init_recording(void) +{ + mpeg_init_recording(); + sound_set(SOUND_VOLUME, global_settings.volume); + if (global_settings.rec_prerecord_time) + talk_buffer_steal(); /* will use the mp3 buffer */ + mpeg_set_recording_options(global_settings.rec_frequency, + global_settings.rec_quality, + global_settings.rec_source, + global_settings.rec_channels, + global_settings.rec_editable, + global_settings.rec_prerecord_time); + set_gain(); +} + static const char* const fmtstr[] = { "", /* no decimals */ @@ -144,7 +155,7 @@ void adjust_cursor(void) { - if(global_settings.rec_source == SOURCE_LINE) + if(global_settings.rec_source == REC_SOURCE_LINE) { if(cursor < 0) cursor = 0; @@ -203,7 +214,7 @@ return 0; } -static char path_buffer[MAX_PATH]; +static char rec_abs_filename[MAX_PATH]; /* used in trigger_listerner and recording_screen */ static unsigned int last_seconds = 0; @@ -221,7 +232,7 @@ if((audio_status() & AUDIO_STATUS_RECORD) != AUDIO_STATUS_RECORD) { talk_buffer_steal(); /* we use the mp3 buffer */ - mpeg_record(rec_create_filename(path_buffer)); + mpeg_record(rec_create_filename(rec_abs_filename)); /* give control to mpeg thread so that it can start recording */ yield(); yield(); yield(); @@ -230,7 +241,7 @@ /* if we're already recording this is a retrigger */ else { - mpeg_new_file(rec_create_filename(path_buffer)); + mpeg_new_file(rec_create_filename(rec_abs_filename)); /* tell recording_screen to reset the time */ last_seconds = 0; } @@ -263,7 +274,6 @@ bool have_recorded = false; unsigned int seconds; int hours, minutes; - char path_buffer[MAX_PATH]; bool been_in_usb_mode = false; int last_audio_stat = -1; #if CONFIG_LED == LED_REAL @@ -282,27 +292,12 @@ #if (CONFIG_LED == LED_REAL) && !defined(SIMULATOR) ata_set_led_enabled(false); #endif - mpeg_init_recording(); - - sound_set(SOUND_VOLUME, global_settings.volume); /* Yes, we use the D/A for monitoring */ peak_meter_playback(true); - + rec_init_recording(); peak_meter_enabled = true; - if (global_settings.rec_prerecord_time) - talk_buffer_steal(); /* will use the mp3 buffer */ - - mpeg_set_recording_options(global_settings.rec_frequency, - global_settings.rec_quality, - global_settings.rec_source, - global_settings.rec_channels, - global_settings.rec_editable, - global_settings.rec_prerecord_time); - - set_gain(); - settings_apply_trigger(); lcd_setfont(FONT_SYSFIXED); @@ -405,7 +400,7 @@ /* manual recording */ have_recorded = true; talk_buffer_steal(); /* we use the mp3 buffer */ - mpeg_record(rec_create_filename(path_buffer)); + mpeg_record(rec_create_filename(rec_abs_filename)); last_seconds = 0; if (global_settings.talk_menu) { /* no voice possible here, but a beep */ @@ -462,7 +457,7 @@ switch(cursor) { case 0: - if(global_settings.rec_source == SOURCE_MIC) + if(global_settings.rec_source == REC_SOURCE_MIC) { if(global_settings.rec_mic_gain < sound_max(SOUND_MIC_GAIN)) @@ -498,7 +493,7 @@ switch(cursor) { case 0: - if(global_settings.rec_source == SOURCE_MIC) + if(global_settings.rec_source == REC_SOURCE_MIC) { if(global_settings.rec_mic_gain > sound_min(SOUND_MIC_GAIN)) @@ -585,7 +580,7 @@ case REC_F3: if(audio_stat & AUDIO_STATUS_RECORD) { - mpeg_new_file(rec_create_filename(path_buffer)); + mpeg_new_file(rec_create_filename(rec_abs_filename)); last_seconds = 0; } else @@ -686,7 +681,7 @@ ((global_settings.rec_timesplit && (seconds >= dseconds)) || (num_recorded_bytes >= MAX_FILE_SIZE))) { - mpeg_new_file(rec_create_filename(path_buffer)); + mpeg_new_file(rec_create_filename(rec_abs_filename)); update_countdown = 1; last_seconds = 0; } @@ -705,7 +700,7 @@ } else { - if(global_settings.rec_source == SOURCE_LINE) + if(global_settings.rec_source == REC_SOURCE_LINE) { gain = MAX(global_settings.rec_left_gain, global_settings.rec_right_gain); @@ -738,10 +733,10 @@ } } - if(global_settings.rec_source != SOURCE_SPDIF) + if(global_settings.rec_source != REC_SOURCE_SPDIF) put_cursorxy(0, 4 + cursor, true); - if (global_settings.rec_source != SOURCE_LINE) { + if (global_settings.rec_source != REC_SOURCE_LINE) { snprintf(buf, 32, "%s %s [%d]", freq_str[global_settings.rec_frequency], global_settings.rec_channels? Index: apps/recorder/recording.h =================================================================== RCS file: /cvsroot/rockbox/apps/recorder/recording.h,v retrieving revision 1.4 diff -u -b -r1.4 recording.h --- apps/recorder/recording.h 4 Jun 2004 12:34:29 -0000 1.4 +++ apps/recorder/recording.h 4 Sep 2005 18:17:35 -0000 @@ -22,5 +22,6 @@ bool recording_screen(void); char *rec_create_filename(char *buf); int rec_create_directory(void); +void rec_init_recording(void); #endif Index: firmware/mp3_playback.c =================================================================== RCS file: /cvsroot/rockbox/firmware/mp3_playback.c,v retrieving revision 1.47 diff -u -b -r1.47 mp3_playback.c --- firmware/mp3_playback.c 29 Aug 2005 21:15:20 -0000 1.47 +++ firmware/mp3_playback.c 4 Sep 2005 18:17:36 -0000 @@ -37,11 +37,8 @@ /* hacking into mpeg.c, recording is still there */ #if CONFIG_CODEC == MAS3587F -enum -{ - MPEG_DECODER, - MPEG_ENCODER -} mpeg_mode; +#include "audio.h" +extern enum audio_coder mpeg_mode; #endif /* #ifdef MAS3587F */ #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) Index: firmware/mpeg.c =================================================================== RCS file: /cvsroot/rockbox/firmware/mpeg.c,v retrieving revision 1.340 diff -u -b -r1.340 mpeg.c --- firmware/mpeg.c 2 Sep 2005 07:01:08 -0000 1.340 +++ firmware/mpeg.c 4 Sep 2005 18:17:41 -0000 @@ -52,11 +52,7 @@ #endif #if CONFIG_CODEC == MAS3587F -extern enum /* from mp3_playback.c */ -{ - MPEG_DECODER, - MPEG_ENCODER -} mpeg_mode; +enum audio_coder mpeg_mode; #endif /* CONFIG_CODEC == MAS3587F */ extern char* playlist_peek(int steps); @@ -772,6 +768,12 @@ } } } + +enum audio_coder audio_mode(void) +{ + return mpeg_mode; +} + #endif /* CONFIG_CODEC == MAS3587F */ void playback_tick(void) Index: firmware/export/audio.h =================================================================== RCS file: /cvsroot/rockbox/firmware/export/audio.h,v retrieving revision 1.6 diff -u -b -r1.6 audio.h --- firmware/export/audio.h 21 Aug 2005 23:01:12 -0000 1.6 +++ firmware/export/audio.h 4 Sep 2005 18:17:42 -0000 @@ -79,6 +79,16 @@ void audio_beep(int duration); void audio_init_playback(void); +#if CONFIG_CODEC == MAS3587F +enum audio_coder +{ + MPEG_DECODER, + MPEG_ENCODER +}; + +enum audio_coder audio_mode(void); +#endif + /***********************************************************************/ /* audio event handling */