From 40532d61ea4909b3f8b12dd7024de217dbdfec6d Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 16 Nov 2012 21:42:31 +0000 Subject: [PATCH] Various external audio fixes. --- src/lib/ab_transcoder.cc | 2 ++ src/lib/decoder.h | 2 -- src/lib/external_audio_decoder.cc | 5 +++++ src/lib/transcoder.cc | 17 ++++++++++++----- src/lib/video_decoder.h | 3 ++- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc index 00fc025a2..e9277a96f 100644 --- a/src/lib/ab_transcoder.cc +++ b/src/lib/ab_transcoder.cc @@ -99,6 +99,8 @@ ABTranscoder::go () bool const vb = _db.first->pass (); bool const a = _da.first->pass (); + _da.first->set_progress (); + if (va && vb && a) { break; } diff --git a/src/lib/decoder.h b/src/lib/decoder.h index cd033b5f9..e757e5401 100644 --- a/src/lib/decoder.h +++ b/src/lib/decoder.h @@ -60,8 +60,6 @@ public: virtual bool pass () = 0; protected: - virtual void set_progress () const {} - /** our Film */ boost::shared_ptr _film; /** our options */ diff --git a/src/lib/external_audio_decoder.cc b/src/lib/external_audio_decoder.cc index 89e10bfc0..2297ac4da 100644 --- a/src/lib/external_audio_decoder.cc +++ b/src/lib/external_audio_decoder.cc @@ -25,6 +25,7 @@ using std::vector; using std::string; using std::min; +using std::cout; using boost::shared_ptr; ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr f, shared_ptr o, Job* j) @@ -101,6 +102,10 @@ ExternalAudioDecoder::pass () Audio (audio); frames -= this_time; } + + for (size_t i = 0; i < sndfiles.size(); ++i) { + sf_close (sndfiles[i]); + } return true; } diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index d54022bbc..2ee96790a 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -38,6 +38,7 @@ #include "audio_decoder.h" using std::string; +using std::cout; using boost::shared_ptr; using boost::dynamic_pointer_cast; @@ -88,15 +89,21 @@ Transcoder::go () { _encoder->process_begin (); try { + bool done[2] = { false, false }; + while (1) { - bool const v = _decoders.first->pass (); + if (!done[0]) { + done[0] = _decoders.first->pass (); + _decoders.first->set_progress (); + } - bool a = true; - if (dynamic_pointer_cast (_decoders.second) != dynamic_pointer_cast (_decoders.first)) { - a = _decoders.second->pass (); + if (!done[1] && dynamic_pointer_cast (_decoders.second) != dynamic_pointer_cast (_decoders.first)) { + done[1] = _decoders.second->pass (); + } else { + done[1] = true; } - if (v && a) { + if (done[0] && done[1]) { break; } } diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h index b2b399432..fb782cd7e 100644 --- a/src/lib/video_decoder.h +++ b/src/lib/video_decoder.h @@ -41,6 +41,8 @@ public: virtual void set_subtitle_stream (boost::optional); + void set_progress () const; + SourceFrame video_frame () const { return _video_frame; } @@ -56,7 +58,6 @@ public: protected: virtual PixelFormat pixel_format () const = 0; - void set_progress () const; void emit_video (boost::shared_ptr); void emit_subtitle (boost::shared_ptr); -- 2.30.2