1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Martin Scarratt 2006-09-02 17:30:30 +00:00
parent ee88a3bb2c
commit 617b67e769
8 changed files with 225 additions and 65 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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();

View file

@ -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,

View file

@ -289,7 +289,7 @@ unsigned long audio_get_spdif_sample_rate(void)
if (diff2 > diff1) --i;
}
return spdif_sample_rates[i];
return i;
}
#endif