forked from len0rd/rockbox
More accurate playback position calculation.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7218 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d3cbf87305
commit
eab434c416
5 changed files with 15 additions and 7 deletions
|
|
@ -202,8 +202,8 @@ unsigned int pcmbuf_get_latency(void)
|
||||||
{
|
{
|
||||||
int latency;
|
int latency;
|
||||||
|
|
||||||
/* This has to be done better. */
|
latency = (pcmbuf_unplayed_bytes + pcm_get_bytes_waiting())
|
||||||
latency = (pcmbuf_size - audiobuffer_free - CHUNK_SIZE)/4 / (44100/1000);
|
/ 4 / (44100/1000);
|
||||||
if (latency < 0)
|
if (latency < 0)
|
||||||
latency = 0;
|
latency = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -265,10 +265,7 @@ void codec_set_offset_callback(unsigned int value)
|
||||||
if (ci.stop_codec)
|
if (ci.stop_codec)
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
/* The 1000 here is a hack. pcmbuf_get_latency() should
|
latency = pcmbuf_get_latency() * cur_ti->id3.bitrate / 8;
|
||||||
* be more accurate
|
|
||||||
*/
|
|
||||||
latency = (pcmbuf_get_latency() + 1000) * cur_ti->id3.bitrate / 8;
|
|
||||||
|
|
||||||
if (value < latency) {
|
if (value < latency) {
|
||||||
cur_ti->id3.offset = 0;
|
cur_ti->id3.offset = 0;
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ void pcm_set_frequency(unsigned int frequency);
|
||||||
void pcm_play_data(void (*get_more)(unsigned char** start, long* size));
|
void pcm_play_data(void (*get_more)(unsigned char** start, long* size));
|
||||||
|
|
||||||
void pcm_calculate_peaks(int *left, int *right);
|
void pcm_calculate_peaks(int *left, int *right);
|
||||||
|
long pcm_get_bytes_waiting(void);
|
||||||
|
|
||||||
void pcm_play_stop(void);
|
void pcm_play_stop(void);
|
||||||
void pcm_play_pause(bool play);
|
void pcm_play_pause(bool play);
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ static long calculate_channel_peak_average(int channel, unsigned short *addr,
|
||||||
void pcm_calculate_peaks(int *left, int *right)
|
void pcm_calculate_peaks(int *left, int *right)
|
||||||
{
|
{
|
||||||
unsigned short *addr = (unsigned short *)SAR0;
|
unsigned short *addr = (unsigned short *)SAR0;
|
||||||
long size = MIN(512, BCR0 / 2);
|
long size = MIN(512, (BCR0 & 0xffffff) / 2);
|
||||||
|
|
||||||
if (left != NULL)
|
if (left != NULL)
|
||||||
*left = calculate_channel_peak_average(0, addr, size);
|
*left = calculate_channel_peak_average(0, addr, size);
|
||||||
|
|
@ -222,6 +222,11 @@ void pcm_play_data(void (*get_more)(unsigned char** start, long* size))
|
||||||
uda1380_mute(false);
|
uda1380_mute(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long pcm_get_bytes_waiting(void)
|
||||||
|
{
|
||||||
|
return next_size + (BCR0 & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
void pcm_play_stop(void)
|
void pcm_play_stop(void)
|
||||||
{
|
{
|
||||||
if (pcm_playing) {
|
if (pcm_playing) {
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,11 @@ void pcm_play_data(void (*get_more)(unsigned char** start, long* size))
|
||||||
playing = true;
|
playing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long pcm_get_bytes_waiting(long)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if CONFIG_HWCODEC != MASNONE
|
#if CONFIG_HWCODEC != MASNONE
|
||||||
void audio_set_buffer_margin(int seconds)
|
void audio_set_buffer_margin(int seconds)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue