summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-09 23:13:27 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-09 23:13:27 +0100
commit7e690d21278df14b113f3602cbbd43f6214fd614 (patch)
tree4f4b42784d64370bc7d0c6a147489ba2cc8b0f27 /src/lib/ffmpeg_decoder.cc
parentc8dbb6564e9526a0aafd4a0cb7f3fd6aa9f2f376 (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.cc19
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;
+ }
}
}