From 83742c7e6edcf958e0820abc77c029f4ada4880f Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 8 May 2013 16:58:19 +0100 Subject: [PATCH] Better fix for still (no sound) DCP crash. --- src/lib/encoder.cc | 4 ++++ src/lib/sndfile_decoder.cc | 6 ------ src/lib/transcoder.cc | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index cff9899ac..8549962ff 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -296,6 +296,10 @@ Encoder::process_video (shared_ptr image, bool same, boost::shared_ void Encoder::process_audio (shared_ptr data) { + if (!data->frames ()) { + return; + } + #if HAVE_SWRESAMPLE /* Maybe sample-rate convert */ if (_swr_context) { diff --git a/src/lib/sndfile_decoder.cc b/src/lib/sndfile_decoder.cc index d70478a1b..fdaf2eeaa 100644 --- a/src/lib/sndfile_decoder.cc +++ b/src/lib/sndfile_decoder.cc @@ -102,20 +102,14 @@ SndfileDecoder::pass () sf_count_t const block = _audio_stream->sample_rate() / 2; shared_ptr audio (new AudioBuffers (_audio_stream->channels(), block)); sf_count_t const this_time = min (block, _frames - _done); - bool have_sound = false; for (size_t i = 0; i < _sndfiles.size(); ++i) { if (!_sndfiles[i]) { audio->make_silent (i); } else { sf_read_float (_sndfiles[i], audio->data(i), this_time); - have_sound = true; } } - if (!have_sound) { - return true; - } - audio->set_frames (this_time); Audio (audio, double(_done) / _audio_stream->sample_rate()); _done += this_time; diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index faafcaf8b..48cf402d7 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -56,7 +56,7 @@ Transcoder::Transcoder (shared_ptr f, DecodeOptions o, Job* j, shared_ptr< assert (_encoder); shared_ptr st = f->audio_stream(); - if (st) { + if (st && st->sample_rate ()) { _matcher.reset (new Matcher (f->log(), st->sample_rate(), f->source_frame_rate())); } _delay_line.reset (new DelayLine (f->log(), f->audio_delay() / 1000.0f)); -- 2.30.2