decoder/mad: use integer seek times
Avoid roundtrips to floating point.
This commit is contained in:
parent
316c72a4ae
commit
69b5929c5a
@ -116,8 +116,8 @@ struct MadDecoder {
|
|||||||
unsigned char input_buffer[READ_BUFFER_SIZE];
|
unsigned char input_buffer[READ_BUFFER_SIZE];
|
||||||
int32_t output_buffer[MP3_DATA_OUTPUT_BUFFER_SIZE];
|
int32_t output_buffer[MP3_DATA_OUTPUT_BUFFER_SIZE];
|
||||||
float total_time;
|
float total_time;
|
||||||
float elapsed_time;
|
unsigned elapsed_time;
|
||||||
float seek_where;
|
unsigned seek_where;
|
||||||
enum muteframe mute_frame;
|
enum muteframe mute_frame;
|
||||||
long *frame_offsets;
|
long *frame_offsets;
|
||||||
mad_timer_t *times;
|
mad_timer_t *times;
|
||||||
@ -159,7 +159,7 @@ struct MadDecoder {
|
|||||||
bool DecodeFirstFrame(Tag **tag);
|
bool DecodeFirstFrame(Tag **tag);
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
long TimeToFrame(double t) const;
|
long TimeToFrame(unsigned t) const;
|
||||||
|
|
||||||
void UpdateTimerNextFrame();
|
void UpdateTimerNextFrame();
|
||||||
|
|
||||||
@ -847,14 +847,13 @@ mad_decoder_total_file_time(InputStream &is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
long
|
long
|
||||||
MadDecoder::TimeToFrame(double t) const
|
MadDecoder::TimeToFrame(unsigned t) const
|
||||||
{
|
{
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
for (i = 0; i < highest_frame; ++i) {
|
for (i = 0; i < highest_frame; ++i) {
|
||||||
double frame_time =
|
unsigned frame_time =
|
||||||
mad_timer_count(times[i],
|
mad_timer_count(times[i], MAD_UNITS_MILLISECONDS);
|
||||||
MAD_UNITS_MILLISECONDS) / 1000.;
|
|
||||||
if (frame_time >= t)
|
if (frame_time >= t)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -885,7 +884,7 @@ MadDecoder::UpdateTimerNextFrame()
|
|||||||
timer = times[current_frame];
|
timer = times[current_frame];
|
||||||
|
|
||||||
current_frame++;
|
current_frame++;
|
||||||
elapsed_time = mad_timer_count(timer, MAD_UNITS_MILLISECONDS) / 1000.0;
|
elapsed_time = mad_timer_count(timer, MAD_UNITS_MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
DecoderCommand
|
DecoderCommand
|
||||||
@ -990,7 +989,7 @@ MadDecoder::Read()
|
|||||||
assert(input_stream.IsSeekable());
|
assert(input_stream.IsSeekable());
|
||||||
|
|
||||||
unsigned long j =
|
unsigned long j =
|
||||||
TimeToFrame(decoder_seek_where(*decoder));
|
TimeToFrame(decoder_seek_where_ms(*decoder));
|
||||||
if (j < highest_frame) {
|
if (j < highest_frame) {
|
||||||
if (Seek(frame_offsets[j])) {
|
if (Seek(frame_offsets[j])) {
|
||||||
current_frame = j;
|
current_frame = j;
|
||||||
@ -998,7 +997,7 @@ MadDecoder::Read()
|
|||||||
} else
|
} else
|
||||||
decoder_seek_error(*decoder);
|
decoder_seek_error(*decoder);
|
||||||
} else {
|
} else {
|
||||||
seek_where = decoder_seek_where(*decoder);
|
seek_where = decoder_seek_where_ms(*decoder);
|
||||||
mute_frame = MUTEFRAME_SEEK;
|
mute_frame = MUTEFRAME_SEEK;
|
||||||
decoder_command_finished(*decoder);
|
decoder_command_finished(*decoder);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user