diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-06-09 23:13:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-06-09 23:13:27 +0100 |
| commit | 7e690d21278df14b113f3602cbbd43f6214fd614 (patch) | |
| tree | 4f4b42784d64370bc7d0c6a147489ba2cc8b0f27 /src/lib/ffmpeg_decoder.cc | |
| parent | c8dbb6564e9526a0aafd4a0cb7f3fd6aa9f2f376 (diff) | |
Emit the large bits of pointless silence which are the cause of #252 in half-second chunks, which at least fixes the out-of-memory condition.
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 04dd7fd2d..a51b521d0 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -422,15 +422,18 @@ FFmpegDecoder::decode_audio_packet () if (pts > 0) { /* Emit some silence */ - shared_ptr<AudioBuffers> silence ( - new AudioBuffers ( - _ffmpeg_content->audio_channels(), - pts * _ffmpeg_content->content_audio_frame_rate() - ) - ); + int64_t frames = pts * _ffmpeg_content->content_audio_frame_rate (); + while (frames > 0) { + int64_t const this_time = min (frames, (int64_t) _ffmpeg_content->content_audio_frame_rate() / 2); + + shared_ptr<AudioBuffers> silence ( + new AudioBuffers (_ffmpeg_content->audio_channels(), this_time) + ); - silence->make_silent (); - audio (silence, _audio_position); + silence->make_silent (); + audio (silence, _audio_position); + frames -= this_time; + } } } |
