diff options
| author | Martin Scarratt <mmmm@rockbox.org> | 2006-09-02 17:30:30 +0000 |
|---|---|---|
| committer | Martin Scarratt <mmmm@rockbox.org> | 2006-09-02 17:30:30 +0000 |
| commit | 617b67e769661d4841b4fd1ace358b932f9c0378 (patch) | |
| tree | 22a1b0dddc51ac890b2804ce100df30d10f271ea | |
| parent | ee88a3bb2c137078c4e1d3285e1d7c5b5ff61572 (diff) | |
| download | rockbox-617b67e769661d4841b4fd1ace358b932f9c0378.zip rockbox-617b67e769661d4841b4fd1ace358b932f9c0378.tar.gz rockbox-617b67e769661d4841b4fd1ace358b932f9c0378.tar.bz2 rockbox-617b67e769661d4841b4fd1ace358b932f9c0378.tar.xz | |
Display bitrate (Q value for Archos), samplerate, channels and recording format (M = MP3) in the statusbar in the recording screen. This is all new info for archos targets and I-river targets now have this info on the remote as well as the main screen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10856 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/gui/statusbar.c | 189 | ||||
| -rw-r--r-- | apps/gui/statusbar.h | 4 | ||||
| -rw-r--r-- | apps/recorder/icons.c | 27 | ||||
| -rw-r--r-- | apps/recorder/icons.h | 15 | ||||
| -rw-r--r-- | apps/recorder/recording.c | 46 | ||||
| -rw-r--r-- | apps/settings.c | 6 | ||||
| -rw-r--r-- | apps/settings.h | 1 | ||||
| -rw-r--r-- | firmware/pcm_record.c | 2 |
8 files changed, 225 insertions, 65 deletions
diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c index cbd1709..72e681f 100644 --- a/apps/gui/statusbar.c +++ b/apps/gui/statusbar.c @@ -36,7 +36,9 @@ #include "status.h" /* needed for battery_state global var */ #include "action.h" /* for keys_locked */ #include "statusbar.h" - +#ifdef HAVE_RECORDING +#include "audio.h" +#endif /* FIXME: should be removed from icon.h to avoid redefinition, but still needed for compatibility with old system */ @@ -52,6 +54,11 @@ STATUSBAR_PLUG_WIDTH + \ 2*ICONS_SPACING #define STATUSBAR_VOLUME_WIDTH 16 +#define STATUSBAR_ENCODER_X_POS STATUSBAR_X_POS + \ + STATUSBAR_BATTERY_WIDTH + \ + STATUSBAR_PLUG_WIDTH + \ + 2*ICONS_SPACING - 1 +#define STATUSBAR_ENCODER_WIDTH 18 #define STATUSBAR_PLAY_STATE_X_POS STATUSBAR_X_POS + \ STATUSBAR_BATTERY_WIDTH + \ STATUSBAR_PLUG_WIDTH + \ @@ -65,6 +72,21 @@ STATUSBAR_PLAY_STATE_WIDTH + \ 4*ICONS_SPACING #define STATUSBAR_PLAY_MODE_WIDTH 7 +#define STATUSBAR_RECFREQ_X_POS STATUSBAR_X_POS + \ + STATUSBAR_BATTERY_WIDTH + \ + STATUSBAR_PLUG_WIDTH + \ + STATUSBAR_VOLUME_WIDTH + \ + STATUSBAR_PLAY_STATE_WIDTH + \ + 3*ICONS_SPACING +#define STATUSBAR_RECFREQ_WIDTH 12 +#define STATUSBAR_RECCHANNELS_X_POS STATUSBAR_X_POS + \ + STATUSBAR_BATTERY_WIDTH + \ + STATUSBAR_PLUG_WIDTH + \ + STATUSBAR_VOLUME_WIDTH + \ + STATUSBAR_PLAY_STATE_WIDTH + \ + STATUSBAR_RECFREQ_WIDTH + \ + 4*ICONS_SPACING +#define STATUSBAR_RECCHANNELS_WIDTH 5 #define STATUSBAR_SHUFFLE_X_POS STATUSBAR_X_POS + \ STATUSBAR_BATTERY_WIDTH + \ STATUSBAR_PLUG_WIDTH + \ @@ -102,6 +124,18 @@ #endif #define STATUSBAR_TIME_X_END(statusbar_width) statusbar_width - 1 - \ STATUSBAR_DISK_WIDTH +#if defined(HAVE_RECORDING) +/* analogue frequency numbers taken from the order of frequencies in sample_rate */ +#define FREQ_44 7 +#define FREQ_48 8 +#define FREQ_32 6 +#define FREQ_22 4 +#define FREQ_24 5 +#define FREQ_16 3 +#ifdef HAVE_SPDIF_IN +#define SOURCE_SPDIF 2 +#endif +#endif struct gui_syncstatusbar statusbars; @@ -234,28 +268,40 @@ void gui_statusbar_draw(struct gui_statusbar * bar, bool force_redraw) STATUSBAR_Y_POS, STATUSBAR_PLUG_WIDTH, STATUSBAR_HEIGHT); #endif - - bar->redraw_volume = gui_statusbar_icon_volume(bar, bar->info.volume); +#ifdef HAVE_RECORDING + /* turn off volume display in recording screen */ + if (!global_settings.recscreen_on) +#endif + bar->redraw_volume = gui_statusbar_icon_volume(bar, bar->info.volume); gui_statusbar_icon_play_state(display, current_playmode() + Icon_Play); - - switch (bar->info.repeat) { + +#ifdef HAVE_RECORDING + /* If in recording screen, replace repeat mode, volume + and shuffle icons with recording info */ + if (global_settings.recscreen_on) + gui_statusbar_icon_recording_info(display); + else +#endif + { + switch (bar->info.repeat) { #if (AB_REPEAT_ENABLE == 1) - case REPEAT_AB: - gui_statusbar_icon_play_mode(display, Icon_RepeatAB); - break; + case REPEAT_AB: + gui_statusbar_icon_play_mode(display, Icon_RepeatAB); + break; #endif /* AB_REPEAT_ENABLE == 1 */ - case REPEAT_ONE: - gui_statusbar_icon_play_mode(display, Icon_RepeatOne); - break; + case REPEAT_ONE: + gui_statusbar_icon_play_mode(display, Icon_RepeatOne); + break; - case REPEAT_ALL: - case REPEAT_SHUFFLE: - gui_statusbar_icon_play_mode(display, Icon_Repeat); - break; + case REPEAT_ALL: + case REPEAT_SHUFFLE: + gui_statusbar_icon_play_mode(display, Icon_Repeat); + break; + } + if (bar->info.shuffle) + gui_statusbar_icon_shuffle(display); } - if (bar->info.shuffle) - gui_statusbar_icon_shuffle(display); if (bar->info.keylock) gui_statusbar_icon_lock(display); #ifdef HAS_REMOTE_BUTTON_HOLD @@ -553,6 +599,115 @@ void gui_statusbar_time(struct screen * display, int hour, int minute) } #endif +#ifdef HAVE_RECORDING +void gui_statusbar_icon_recording_info(struct screen * display) +{ + int width, height; + char buffer[4]; + char* const sample_rate[12] = + { + "8", + "11", + "12", + "16", + "22", + "24", + "32", + "44", + "48", + "64", + "88", + "96" + }; +#if CONFIG_CODEC != SWCODEC + char* const bit_rate[9] = + { + "MQ0", + "MQ1", + "MQ2", + "MQ3", + "MQ4", + "MQ5", + "MQ6", + "MQ7", + "WAV" + }; +#endif + + display->setfont(FONT_SYSFIXED); + + /* Display Codec info in statusbar */ +#if CONFIG_CODEC == SWCODEC + /* Can't fit info for sw codec targets in statusbar using FONT_SYSFIXED + so must use icons */ + display->mono_bitmap(bitmap_icons_18x8[global_settings.rec_quality], + STATUSBAR_ENCODER_X_POS, STATUSBAR_Y_POS, + STATUSBAR_ENCODER_WIDTH, STATUSBAR_HEIGHT); +#else + snprintf(buffer, sizeof(buffer), "%s", bit_rate[global_settings.rec_quality]); + display->getstringsize(buffer, &width, &height); + if (height <= STATUSBAR_HEIGHT) + { + display->putsxy(STATUSBAR_ENCODER_X_POS, STATUSBAR_Y_POS, buffer); + } +#endif + + /* Display Samplerate info in statusbar */ +#if defined(HAVE_SPDIF_IN) + if (global_settings.rec_source == SOURCE_SPDIF) + { +#if (CONFIG_CODEC != MAS3587F) && !defined(SIMULATOR) + snprintf(buffer, sizeof(buffer), "%s", sample_rate[audio_get_spdif_sample_rate()]); +#else + /* Can't measure S/PDIF sample rate on Archos/Sim yet so just display input type */ + snprintf(buffer, sizeof(buffer), "Dg"); +#endif + } + else +#endif /* HAVE_SPDIF_IN */ + { + /* Analogue frequency in wrong order so remap settings numbers */ + int freq = global_settings.rec_frequency; + if (freq == 0) + freq = FREQ_44; + else if (freq == 1) + freq = FREQ_48; + else if (freq == 2) + freq = FREQ_32; + else if (freq == 3) + freq = FREQ_22; + else if (freq == 4) + freq = FREQ_24; + else if (freq == 5) + freq = FREQ_16; + + snprintf(buffer, sizeof(buffer), "%s", sample_rate[freq]); + } + + display->getstringsize(buffer, &width, &height); + if (height <= STATUSBAR_HEIGHT) + { + display->putsxy(STATUSBAR_RECFREQ_X_POS, STATUSBAR_Y_POS, buffer); + } + + display->setfont(FONT_UI); + + /* Display Channel status in status bar */ + if(global_settings.rec_channels) + { + display->mono_bitmap(bitmap_icons_5x8[Icon_Mono], + STATUSBAR_RECCHANNELS_X_POS , STATUSBAR_Y_POS, + STATUSBAR_RECCHANNELS_WIDTH, STATUSBAR_HEIGHT); + } + else + { + display->mono_bitmap(bitmap_icons_5x8[Icon_Stereo], + STATUSBAR_RECCHANNELS_X_POS, STATUSBAR_Y_POS, + STATUSBAR_RECCHANNELS_WIDTH, STATUSBAR_HEIGHT); + } +} +#endif /* HAVE_RECORDING */ + #endif /* HAVE_LCD_BITMAP */ void gui_syncstatusbar_init(struct gui_syncstatusbar * bars) diff --git a/apps/gui/statusbar.h b/apps/gui/statusbar.h index a03c294..5ab97d0 100644 --- a/apps/gui/statusbar.h +++ b/apps/gui/statusbar.h @@ -105,7 +105,9 @@ void gui_statusbar_icon_shuffle(struct screen * display); void gui_statusbar_icon_lock(struct screen * display); void gui_statusbar_icon_lock_remote(struct screen * display); void gui_statusbar_led(struct screen * display); - +#ifdef HAVE_RECORDING +void gui_statusbar_icon_recording_info(struct screen * display); +#endif #ifdef CONFIG_RTC void gui_statusbar_time(struct screen * display, int hour, int minute); diff --git a/apps/recorder/icons.c b/apps/recorder/icons.c index 9fab6cf..fc271e8 100644 --- a/apps/recorder/icons.c +++ b/apps/recorder/icons.c @@ -31,7 +31,9 @@ const unsigned char bitmap_icons_5x8[][5] = { [Icon_Lock_Main] ={0x78,0x7f,0x49,0x7f,0x78}, /* Lock Main */ - [Icon_Lock_Remote]={0x78,0x7f,0x49,0x7f,0x78} /* Lock Remote */ + [Icon_Lock_Remote]={0x78,0x7f,0x49,0x7f,0x78}, /* Lock Remote */ + [Icon_Stereo]={0x1c, 0x22, 0x1c, 0x22, 0x1c}, /* Stereo recording */ + [Icon_Mono]={0x00, 0x1c, 0x22, 0x1c, 0x00} /* Mono recording */ }; const unsigned char bitmap_icons_6x8[][6] = @@ -75,6 +77,29 @@ const unsigned char bitmap_icons_7x8[][7] = {0x7f,0x04,0x4e,0x5f,0x44,0x38,0x7f} /* Repeat-AB playmode */ }; +const unsigned char bitmap_icons_18x8[][18] = +{ + {0x00, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x1c, 0x2a, + 0x12, 0x00, 0x1e, 0x30, 0x10}, /* mp3 64kbps */ + {0x00, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x04, 0x0a, + 0x3e, 0x00, 0x1c, 0x2a, 0x12}, /* mp3 96kbps */ + {0x00, 0x00, 0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x32, 0x2a, + 0x24, 0x00, 0x14, 0x2a, 0x14}, /* mp3 128kbps */ + {0x00, 0x00, 0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x1c, 0x2a, + 0x12, 0x00, 0x1c, 0x22, 0x1c}, /* mp3 160kbps */ + {0x00, 0x00, 0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x04, 0x0a, + 0x3e, 0x00, 0x32, 0x2a, 0x24}, /* mp3 192kbps */ + {0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x32, 0x2a, 0x24, 0x00, 0x32, 0x2a, + 0x24, 0x00, 0x1e, 0x30, 0x10}, /* mp3 224kbps */ + {0x3e, 0x04, 0x08, 0x04, 0x3e, 0x00, 0x00, 0x22, 0x2a, 0x14, 0x00, 0x32, 0x2a, + 0x24, 0x00, 0x1c, 0x22, 0x1c}, /* mp3 320kbps */ + {0x00, 0x00, 0x00, 0x00, 0x1e, 0x20, 0x18, 0x20, 0x1e, 0x00, 0x1e, 0x20, 0x18, + 0x06, 0x00, 0x00, 0x00, 0x00}, /* wv */ + {0x00, 0x1e, 0x20, 0x18, 0x20, 0x1e, 0x00, 0x3c, 0x12, 0x12, 0x3c, 0x00, 0x1e, + 0x20, 0x18, 0x06, 0x00, 0x00} /* wav */ +}; + + /* Disk/MMC activity */ const unsigned char bitmap_icon_disk[12] = #ifdef HAVE_MMC diff --git a/apps/recorder/icons.h b/apps/recorder/icons.h index d29b549..5e7f157 100644 --- a/apps/recorder/icons.h +++ b/apps/recorder/icons.h @@ -39,6 +39,8 @@ enum icons_5x8 { Icon_Lock_Main, Icon_Lock_Remote, + Icon_Stereo, + Icon_Mono, Icon5x8Last }; @@ -83,9 +85,22 @@ enum icons_7x8 { Icon7x8Last }; +enum icons_18x8 { + Icon_mp364, + Icon_mp396, + Icon_mp3128, + Icon_mp3160, + Icon_mp3192, + Icon_mp3224, + Icon_mp3320, + Icon_wv, + Icon_wav, + Icon18x8Last +}; extern const unsigned char bitmap_icons_5x8[Icon5x8Last][5]; extern const unsigned char bitmap_icons_6x8[Icon6x8Last][6]; extern const unsigned char bitmap_icons_7x8[Icon7x8Last][7]; +extern const unsigned char bitmap_icons_18x8[Icon18x8Last][18]; extern const unsigned char bitmap_icon_disk[]; #define STATUSBAR_X_POS 0 diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index b39a96e..e964db1 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -810,6 +810,7 @@ bool recording_screen(bool no_source) ID2P(LANG_GIGABYTE) }; + global_settings.recscreen_on = true; cursor = 0; #if (CONFIG_LED == LED_REAL) && !defined(SIMULATOR) ata_set_led_enabled(false); @@ -1353,7 +1354,6 @@ bool recording_screen(bool no_source) unsigned int dseconds, dhours, dminutes; unsigned long num_recorded_bytes, dsize, dmb; int pos = 0; - char spdif_sfreq[8]; update_countdown = 5; last_seconds = seconds; @@ -1687,53 +1687,11 @@ bool recording_screen(bool no_source) PM_HEIGHT + 2, true); } } -/* Can't measure S/PDIF sample rate on Archos yet */ -#if (CONFIG_CODEC != MAS3587F) && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR) - if (global_settings.rec_source == AUDIO_SRC_SPDIF) - snprintf(spdif_sfreq, 8, "%dHz", audio_get_spdif_sample_rate()); -#else - (void)spdif_sfreq; -#endif - snprintf(buf, 32, "%s %s", -#if (CONFIG_CODEC != MAS3587F) && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR) - global_settings.rec_source == AUDIO_SRC_SPDIF ? - spdif_sfreq : -#endif - freq_str[global_settings.rec_frequency], - global_settings.rec_channels ? - str(LANG_SYSFONT_CHANNEL_MONO) : - str(LANG_SYSFONT_CHANNEL_STEREO)); - - for(i = 0; i < screen_update; i++) { -#ifdef HAVE_AGC - if ((global_settings.rec_source == AUDIO_SRC_MIC) - || (global_settings.rec_source == AUDIO_SRC_LINEIN) - || (global_settings.rec_source == AUDIO_SRC_FMRADIO)) - screens[i].puts(0, filename_offset[i] + PM_HEIGHT + line[i] + 1, buf); - else -#endif - screens[i].puts(0, filename_offset[i] + PM_HEIGHT + line[i], buf); - } #ifdef HAVE_AGC hist_time++; #endif -#if CONFIG_CODEC == SWCODEC - snprintf(buf, 32, "%s", - REC_QUALITY_LABEL(global_settings.rec_quality)); - for(i = 0; i < screen_update; i++){ -#ifdef HAVE_AGC - if ((global_settings.rec_source == AUDIO_SRC_MIC) - || (global_settings.rec_source == AUDIO_SRC_LINEIN) - || (global_settings.rec_source == AUDIO_SRC_FMRADIO)) - screens[i].puts(0, filename_offset[i] + PM_HEIGHT + line[i] + 2, buf); - else -#endif - screens[i].puts(0, filename_offset[i] + PM_HEIGHT + line[i] + 1, buf); - } -#endif - for(i = 0; i < screen_update; i++) { gui_statusbar_draw(&(statusbars.statusbars[i]), true); @@ -1758,7 +1716,6 @@ bool recording_screen(bool no_source) } } /* end while(!done) */ - #if CONFIG_CODEC == SWCODEC audio_stat = pcm_rec_status(); #else @@ -1806,6 +1763,7 @@ bool recording_screen(bool no_source) peak_meter_trigger(false); peak_meter_set_trigger_listener(NULL); + global_settings.recscreen_on = false; sound_settings_apply(); FOR_NB_SCREENS(i) diff --git a/apps/settings.c b/apps/settings.c index aa79946..d298ec8 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -92,7 +92,7 @@ const char rec_base_directory[] = REC_BASE_DIR; #include "dsp.h" #endif -#define CONFIG_BLOCK_VERSION 51 +#define CONFIG_BLOCK_VERSION 52 #define CONFIG_BLOCK_SIZE 512 #define RTC_BLOCK_SIZE 44 @@ -464,6 +464,7 @@ static const struct bit_entry hd_bits[] = #ifdef HAVE_RECORDING /* recording */ + {1, S_O(recscreen_on), false, "recscreen on", off_on }, {1, S_O(rec_startup), false, "rec screen on startup", off_on }, {4, S_O(rec_timesplit), 0, "rec timesplit", /* 0...15 */ "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00,04:00,06:00,08:00,10:00,12:00,18:00,24:00" }, @@ -1336,6 +1337,9 @@ void settings_load(int which) RTC_BLOCK_SIZE*8); } +#ifdef HAVE_RECORDING + global_settings.recscreen_on = false; +#endif #ifdef HAVE_LCD_CONTRAST if ( global_settings.contrast < MIN_CONTRAST_SETTING ) global_settings.contrast = lcd_default_contrast(); diff --git a/apps/settings.h b/apps/settings.h index af0eef5..e4787f5 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -151,6 +151,7 @@ struct user_settings int rec_left_gain; /* 0-15 */ int rec_right_gain; /* 0-15 */ bool rec_editable; /* true means that the bit reservoir is off */ + bool recscreen_on; /* true if using the recording screen */ /* note: timesplit setting is not saved */ int rec_timesplit; /* 0 = off, diff --git a/firmware/pcm_record.c b/firmware/pcm_record.c index 4e4d5f2..68fc22b 100644 --- a/firmware/pcm_record.c +++ b/firmware/pcm_record.c @@ -289,7 +289,7 @@ unsigned long audio_get_spdif_sample_rate(void) if (diff2 > diff1) --i; } - return spdif_sample_rates[i]; + return i; } #endif |