decoder/mad: reduce memory usage while scanning tags
Allocate the frame pointers only when actually decoding the file.
This commit is contained in:
parent
38e86af75c
commit
62bfb1a273
1
NEWS
1
NEWS
|
@ -14,6 +14,7 @@ ver 0.20 (not yet released)
|
|||
* decoder
|
||||
- ffmpeg: support ReplayGain and MixRamp
|
||||
- ffmpeg: support stream tags
|
||||
- mad: reduce memory usage while scanning tags
|
||||
- mpcdec: read the bit rate
|
||||
* playlist
|
||||
- cue: don't skip pregap
|
||||
|
|
|
@ -167,6 +167,15 @@ struct MadDecoder {
|
|||
|
||||
bool DecodeFirstFrame(Tag **tag);
|
||||
|
||||
void AllocateBuffers() {
|
||||
assert(max_frames > 0);
|
||||
assert(frame_offsets == nullptr);
|
||||
assert(times == nullptr);
|
||||
|
||||
frame_offsets = new long[max_frames];
|
||||
times = new mad_timer_t[max_frames];
|
||||
}
|
||||
|
||||
gcc_pure
|
||||
long TimeToFrame(SongTime t) const;
|
||||
|
||||
|
@ -819,9 +828,6 @@ MadDecoder::DecodeFirstFrame(Tag **tag)
|
|||
return false;
|
||||
}
|
||||
|
||||
frame_offsets = new long[max_frames];
|
||||
times = new mad_timer_t[max_frames];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1049,6 +1055,8 @@ mp3_decode(Decoder &decoder, InputStream &input_stream)
|
|||
return;
|
||||
}
|
||||
|
||||
data.AllocateBuffers();
|
||||
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format,
|
||||
|
|
Loading…
Reference in New Issue