forked from len0rd/rockbox
Added MP3 buffer margin setting
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2939 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
f4233e482d
commit
b8ff5f8971
7 changed files with 34 additions and 5 deletions
|
|
@ -174,10 +174,11 @@ bool dbg_mpeg_thread(void)
|
||||||
percent = d.unplayed_space * 100 / d.mp3buflen;
|
percent = d.unplayed_space * 100 / d.mp3buflen;
|
||||||
progressbar(0, 6*8, 112, 4, percent, Grow_Right);
|
progressbar(0, 6*8, 112, 4, percent, Grow_Right);
|
||||||
|
|
||||||
percent = MPEG_LOW_WATER * 100 / d.mp3buflen;
|
percent = d.low_watermark_level * 100 / d.mp3buflen;
|
||||||
progressbar(0, 6*8+4, 112, 4, percent, Grow_Right);
|
progressbar(0, 6*8+4, 112, 4, percent, Grow_Right);
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "lowest: %x", d.lowest_watermark_level);
|
snprintf(buf, sizeof(buf), "wm: %x - %x",
|
||||||
|
d.low_watermark_level, d.lowest_watermark_level);
|
||||||
lcd_puts(0, 7, buf);
|
lcd_puts(0, 7, buf);
|
||||||
|
|
||||||
lcd_update();
|
lcd_update();
|
||||||
|
|
|
||||||
|
|
@ -1171,3 +1171,8 @@ id: LANG_SLEEP_TIMER
|
||||||
desc: sleep timer setting
|
desc: sleep timer setting
|
||||||
eng: "Sleep timer"
|
eng: "Sleep timer"
|
||||||
new:
|
new:
|
||||||
|
|
||||||
|
id: LANG_MP3BUFFER_MARGIN
|
||||||
|
desc: MP3 buffer margin time
|
||||||
|
eng: "MP3 buffer margin"
|
||||||
|
new:
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ offset abs
|
||||||
0x22 0x36 <rec. quality (bit 0-2), source (bit 3-4), frequency (bit 5-7)>
|
0x22 0x36 <rec. quality (bit 0-2), source (bit 3-4), frequency (bit 5-7)>
|
||||||
0x23 0x37 <rec. left gain (bit 0-3)>
|
0x23 0x37 <rec. left gain (bit 0-3)>
|
||||||
0x24 0x38 <rec. right gain (bit 0-3)>
|
0x24 0x38 <rec. right gain (bit 0-3)>
|
||||||
0x25 0x39 <disk_spindown flag>
|
0x25 0x39 <disk poweroff flag (bit 0), MP3 buffer margin (bit 1-3)>
|
||||||
0x26 0x40 <runtime low byte>
|
0x26 0x40 <runtime low byte>
|
||||||
0x27 0x41 <runtime high byte>
|
0x27 0x41 <runtime high byte>
|
||||||
0x28 0x42 <topruntime low byte>
|
0x28 0x42 <topruntime low byte>
|
||||||
|
|
@ -344,7 +344,9 @@ int settings_save( void )
|
||||||
((global_settings.rec_frequency & 7) << 5));
|
((global_settings.rec_frequency & 7) << 5));
|
||||||
config_block[0x23] = (unsigned char)global_settings.rec_left_gain;
|
config_block[0x23] = (unsigned char)global_settings.rec_left_gain;
|
||||||
config_block[0x24] = (unsigned char)global_settings.rec_right_gain;
|
config_block[0x24] = (unsigned char)global_settings.rec_right_gain;
|
||||||
config_block[0x25] = (unsigned char)global_settings.disk_poweroff & 1;
|
config_block[0x25] = (unsigned char)
|
||||||
|
((global_settings.disk_poweroff & 1) |
|
||||||
|
((global_settings.buffer_margin & 7) << 1));
|
||||||
|
|
||||||
{
|
{
|
||||||
static long lasttime = 0;
|
static long lasttime = 0;
|
||||||
|
|
@ -618,7 +620,10 @@ void settings_load(void)
|
||||||
global_settings.rec_right_gain = config_block[0x24] & 0x0f;
|
global_settings.rec_right_gain = config_block[0x24] & 0x0f;
|
||||||
|
|
||||||
if (config_block[0x25] != 0xFF)
|
if (config_block[0x25] != 0xFF)
|
||||||
|
{
|
||||||
global_settings.disk_poweroff = config_block[0x25] & 1;
|
global_settings.disk_poweroff = config_block[0x25] & 1;
|
||||||
|
global_settings.buffer_margin = (config_block[0x25] >> 1) & 7;
|
||||||
|
}
|
||||||
|
|
||||||
if (config_block[0x27] != 0xff)
|
if (config_block[0x27] != 0xff)
|
||||||
global_settings.runtime =
|
global_settings.runtime =
|
||||||
|
|
@ -819,6 +824,7 @@ void settings_reset(void) {
|
||||||
global_settings.resume_offset = -1;
|
global_settings.resume_offset = -1;
|
||||||
global_settings.disk_spindown = 5;
|
global_settings.disk_spindown = 5;
|
||||||
global_settings.disk_poweroff = false;
|
global_settings.disk_poweroff = false;
|
||||||
|
global_settings.buffer_margin = 0;
|
||||||
global_settings.browse_current = false;
|
global_settings.browse_current = false;
|
||||||
global_settings.play_selected = true;
|
global_settings.play_selected = true;
|
||||||
global_settings.peak_meter_release = 8;
|
global_settings.peak_meter_release = 8;
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,7 @@ struct user_settings
|
||||||
int ff_rewind_accel; /* FF/Rewind acceleration (in seconds per doubling) */
|
int ff_rewind_accel; /* FF/Rewind acceleration (in seconds per doubling) */
|
||||||
int disk_spindown; /* time until disk spindown, in seconds (0=off) */
|
int disk_spindown; /* time until disk spindown, in seconds (0=off) */
|
||||||
bool disk_poweroff; /* whether to cut disk power after spindown or not */
|
bool disk_poweroff; /* whether to cut disk power after spindown or not */
|
||||||
|
int buffer_margin; /* MP3 buffer watermark margin, in seconds */
|
||||||
|
|
||||||
int peak_meter_release; /* units per read out */
|
int peak_meter_release; /* units per read out */
|
||||||
int peak_meter_hold; /* hold time for peak meter in 1/100 s */
|
int peak_meter_hold; /* hold time for peak meter in 1/100 s */
|
||||||
|
|
|
||||||
|
|
@ -496,6 +496,13 @@ static bool poweroff(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool buffer_margin(void)
|
||||||
|
{
|
||||||
|
return set_int(str(LANG_MP3BUFFER_MARGIN), "s",
|
||||||
|
&global_settings.buffer_margin,
|
||||||
|
mpeg_set_buffer_margin, 1, 0, 7 );
|
||||||
|
}
|
||||||
|
|
||||||
static bool ff_rewind_min_step(void)
|
static bool ff_rewind_min_step(void)
|
||||||
{
|
{
|
||||||
char* names[] = { "1s", "2s", "3s", "4s",
|
char* names[] = { "1s", "2s", "3s", "4s",
|
||||||
|
|
@ -535,6 +542,7 @@ static bool playback_settings_menu(void)
|
||||||
{ str(LANG_RESUME), resume },
|
{ str(LANG_RESUME), resume },
|
||||||
{ str(LANG_FFRW_STEP), ff_rewind_min_step },
|
{ str(LANG_FFRW_STEP), ff_rewind_min_step },
|
||||||
{ str(LANG_FFRW_ACCEL), ff_rewind_accel },
|
{ str(LANG_FFRW_ACCEL), ff_rewind_accel },
|
||||||
|
{ str(LANG_MP3BUFFER_MARGIN), buffer_margin },
|
||||||
};
|
};
|
||||||
|
|
||||||
bool old_shuffle = global_settings.playlist_shuffle;
|
bool old_shuffle = global_settings.playlist_shuffle;
|
||||||
|
|
|
||||||
|
|
@ -470,6 +470,7 @@ static bool filling; /* We are filling the buffer with data from disk */
|
||||||
static bool dma_underrun; /* True when the DMA has stopped because of
|
static bool dma_underrun; /* True when the DMA has stopped because of
|
||||||
slow disk reading (read error, shaking) */
|
slow disk reading (read error, shaking) */
|
||||||
static int low_watermark; /* Dynamic low watermark level */
|
static int low_watermark; /* Dynamic low watermark level */
|
||||||
|
static int low_watermark_margin; /* Extra time in seconds for watermark */
|
||||||
static int lowest_watermark_level; /* Debug value to observe the buffer
|
static int lowest_watermark_level; /* Debug value to observe the buffer
|
||||||
usage */
|
usage */
|
||||||
#ifdef HAVE_MAS3587F
|
#ifdef HAVE_MAS3587F
|
||||||
|
|
@ -492,7 +493,8 @@ static void recalculate_watermark(int bitrate)
|
||||||
{
|
{
|
||||||
if(ata_spinup_time)
|
if(ata_spinup_time)
|
||||||
{
|
{
|
||||||
low_watermark = ata_spinup_time * 3 / HZ * bitrate*1000 / 8;
|
low_watermark = (low_watermark_margin + ata_spinup_time * 3 / HZ) *
|
||||||
|
bitrate*1000 / 8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -500,6 +502,11 @@ static void recalculate_watermark(int bitrate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mpeg_set_buffer_margin(int seconds)
|
||||||
|
{
|
||||||
|
low_watermark_margin = seconds;
|
||||||
|
}
|
||||||
|
|
||||||
void mpeg_get_debugdata(struct mpeg_debug *dbgdata)
|
void mpeg_get_debugdata(struct mpeg_debug *dbgdata)
|
||||||
{
|
{
|
||||||
dbgdata->mp3buflen = mp3buflen;
|
dbgdata->mp3buflen = mp3buflen;
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ unsigned long mpeg_num_recorded_frames(void);
|
||||||
unsigned long mpeg_num_recorded_bytes(void);
|
unsigned long mpeg_num_recorded_bytes(void);
|
||||||
#endif
|
#endif
|
||||||
void mpeg_get_debugdata(struct mpeg_debug *dbgdata);
|
void mpeg_get_debugdata(struct mpeg_debug *dbgdata);
|
||||||
|
void mpeg_set_buffer_margin(int seconds);
|
||||||
|
|
||||||
#define SOUND_VOLUME 0
|
#define SOUND_VOLUME 0
|
||||||
#define SOUND_BASS 1
|
#define SOUND_BASS 1
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue