summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-04-23 16:17:20 +0100
committerCarl Hetherington <cth@carlh.net>2013-04-23 16:17:20 +0100
commit425ef773dbf91d2fecd8e2fbdc20becbfbda46f8 (patch)
treef9047287c2e950f8cbfdcfbce9e60bdca87d1faf /src/lib
parent8805ae23ce2c3a19fc6a1fd341cff899bfb61128 (diff)
Connect Trimmer clsas.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ab_transcoder.cc37
-rw-r--r--src/lib/ab_transcoder.h2
-rw-r--r--src/lib/audio_source.cc6
-rw-r--r--src/lib/audio_source.h1
-rw-r--r--src/lib/transcoder.cc19
-rw-r--r--src/lib/transcoder.h2
-rw-r--r--src/lib/video_source.cc8
-rw-r--r--src/lib/video_source.h1
8 files changed, 65 insertions, 11 deletions
diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc
index 6eef397c2..26643b50e 100644
--- a/src/lib/ab_transcoder.cc
+++ b/src/lib/ab_transcoder.cc
@@ -32,6 +32,7 @@
#include "delay_line.h"
#include "gain.h"
#include "combiner.h"
+#include "trimmer.h"
/** @file src/ab_transcoder.cc
* @brief A transcoder which uses one Film for the left half of the screen, and a different one
@@ -61,26 +62,48 @@ ABTranscoder::ABTranscoder (
_db = decoder_factory (_film_b, o);
shared_ptr<AudioStream> st = _film_a->audio_stream();
- _matcher.reset (new Matcher (_film_a->log(), st->sample_rate(), _film_a->source_frame_rate()));
+ if (st) {
+ _matcher.reset (new Matcher (_film_a->log(), st->sample_rate(), _film_a->source_frame_rate()));
+ }
_delay_line.reset (new DelayLine (_film_a->log(), _film_a->audio_delay() / 1000.0f));
_gain.reset (new Gain (_film_a->log(), _film_a->audio_gain()));
+ int const sr = st ? st->sample_rate() : 0;
+ int const trim_start = _film_a->trim_type() == Film::ENCODE ? _film_a->trim_start() : 0;
+ int const trim_end = _film_a->trim_type() == Film::ENCODE ? _film_a->trim_end() : 0;
+ _trimmer.reset (new Trimmer (
+ _film_a->log(), trim_start, trim_end, _film_a->length().get(),
+ sr, _film_a->source_frame_rate(), _film_a->dcp_frame_rate()
+ ));
+
/* Set up the decoder to use the film's set streams */
_da.video->set_subtitle_stream (_film_a->subtitle_stream ());
_db.video->set_subtitle_stream (_film_a->subtitle_stream ());
- _da.audio->set_audio_stream (_film_a->audio_stream ());
+ if (_film_a->audio_stream ()) {
+ _da.audio->set_audio_stream (_film_a->audio_stream ());
+ }
_da.video->Video.connect (bind (&Combiner::process_video, _combiner, _1, _2, _3, _4));
_db.video->Video.connect (bind (&Combiner::process_video_b, _combiner, _1, _2, _3, _4));
_combiner->connect_video (_delay_line);
- _delay_line->connect_video (_matcher);
- _matcher->connect_video (_encoder);
+ if (_matcher) {
+ _delay_line->connect_video (_matcher);
+ _matcher->connect_video (_trimmer);
+ } else {
+ _delay_line->connect_video (_trimmer);
+ }
+ _trimmer->connect_video (_encoder);
_da.audio->connect_audio (_delay_line);
- _delay_line->connect_audio (_matcher);
- _matcher->connect_audio (_gain);
- _gain->connect_audio (_encoder);
+ if (_matcher) {
+ _delay_line->connect_audio (_matcher);
+ _matcher->connect_audio (_gain);
+ } else {
+ _delay_line->connect_audio (_gain);
+ }
+ _gain->connect_audio (_trimmer);
+ _trimmer->connect_audio (_encoder);
}
void
diff --git a/src/lib/ab_transcoder.h b/src/lib/ab_transcoder.h
index 58a08af04..4f1b14e48 100644
--- a/src/lib/ab_transcoder.h
+++ b/src/lib/ab_transcoder.h
@@ -39,6 +39,7 @@ class Matcher;
class DelayLine;
class Gain;
class Combiner;
+class Trimmer;
/** @class ABTranscoder
* @brief A transcoder which uses one Film for the left half of the screen, and a different one
@@ -68,5 +69,6 @@ private:
boost::shared_ptr<Matcher> _matcher;
boost::shared_ptr<DelayLine> _delay_line;
boost::shared_ptr<Gain> _gain;
+ boost::shared_ptr<Trimmer> _trimmer;
boost::shared_ptr<Image> _image;
};
diff --git a/src/lib/audio_source.cc b/src/lib/audio_source.cc
index bca3562cf..d77e89367 100644
--- a/src/lib/audio_source.cc
+++ b/src/lib/audio_source.cc
@@ -34,3 +34,9 @@ TimedAudioSource::connect_audio (shared_ptr<TimedAudioSink> s)
{
Audio.connect (bind (&TimedAudioSink::process_audio, s, _1, _2));
}
+
+void
+TimedAudioSource::connect_audio (shared_ptr<AudioSink> s)
+{
+ Audio.connect (bind (&AudioSink::process_audio, s, _1));
+}
diff --git a/src/lib/audio_source.h b/src/lib/audio_source.h
index 3dc998cca..e255d566d 100644
--- a/src/lib/audio_source.h
+++ b/src/lib/audio_source.h
@@ -48,6 +48,7 @@ public:
/** Emitted when some audio data is ready */
boost::signals2::signal<void (boost::shared_ptr<AudioBuffers>, double)> Audio;
+ void connect_audio (boost::shared_ptr<AudioSink>);
void connect_audio (boost::shared_ptr<TimedAudioSink>);
};
diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc
index e00b2f1e0..a10789e11 100644
--- a/src/lib/transcoder.cc
+++ b/src/lib/transcoder.cc
@@ -36,6 +36,7 @@
#include "gain.h"
#include "video_decoder.h"
#include "audio_decoder.h"
+#include "trimmer.h"
using std::string;
using boost::shared_ptr;
@@ -61,6 +62,14 @@ Transcoder::Transcoder (shared_ptr<Film> f, DecodeOptions o, Job* j, shared_ptr<
_delay_line.reset (new DelayLine (f->log(), f->audio_delay() / 1000.0f));
_gain.reset (new Gain (f->log(), f->audio_gain()));
+ int const sr = st ? st->sample_rate() : 0;
+ int const trim_start = f->trim_type() == Film::ENCODE ? f->trim_start() : 0;
+ int const trim_end = f->trim_type() == Film::ENCODE ? f->trim_end() : 0;
+ _trimmer.reset (new Trimmer (
+ f->log(), trim_start, trim_end, f->length().get(),
+ sr, f->source_frame_rate(), f->dcp_frame_rate()
+ ));
+
/* Set up the decoder to use the film's set streams */
_decoders.video->set_subtitle_stream (f->subtitle_stream ());
if (f->audio_stream ()) {
@@ -70,19 +79,21 @@ Transcoder::Transcoder (shared_ptr<Film> f, DecodeOptions o, Job* j, shared_ptr<
_decoders.video->connect_video (_delay_line);
if (_matcher) {
_delay_line->connect_video (_matcher);
- _matcher->connect_video (_encoder);
+ _matcher->connect_video (_trimmer);
} else {
- _delay_line->Video.connect (bind (&Encoder::process_video, _encoder, _1, _2, _3));
+ _delay_line->connect_video (_trimmer);
}
+ _trimmer->connect_video (_encoder);
_decoders.audio->connect_audio (_delay_line);
if (_matcher) {
_delay_line->connect_audio (_matcher);
_matcher->connect_audio (_gain);
} else {
- _delay_line->Audio.connect (bind (&Encoder::process_audio, _encoder, _1));
+ _delay_line->connect_audio (_gain);
}
- _gain->connect_audio (_encoder);
+ _gain->connect_audio (_trimmer);
+ _trimmer->connect_audio (_encoder);
}
/** Run the decoder, passing its output to the encoder, until the decoder
diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h
index b0c263d07..f5b8ae6e3 100644
--- a/src/lib/transcoder.h
+++ b/src/lib/transcoder.h
@@ -35,6 +35,7 @@ class Gain;
class VideoDecoder;
class AudioDecoder;
class DelayLine;
+class Trimmer;
/** @class Transcoder
* @brief A class which takes a Film and some Options, then uses those to transcode the film.
@@ -68,4 +69,5 @@ protected:
boost::shared_ptr<Matcher> _matcher;
boost::shared_ptr<DelayLine> _delay_line;
boost::shared_ptr<Gain> _gain;
+ boost::shared_ptr<Trimmer> _trimmer;
};
diff --git a/src/lib/video_source.cc b/src/lib/video_source.cc
index af6f941fd..539243402 100644
--- a/src/lib/video_source.cc
+++ b/src/lib/video_source.cc
@@ -34,3 +34,11 @@ TimedVideoSource::connect_video (shared_ptr<TimedVideoSink> s)
{
Video.connect (bind (&TimedVideoSink::process_video, s, _1, _2, _3, _4));
}
+
+void
+TimedVideoSource::connect_video (shared_ptr<VideoSink> s)
+{
+ Video.connect (bind (&VideoSink::process_video, s, _1, _2, _3));
+}
+
+
diff --git a/src/lib/video_source.h b/src/lib/video_source.h
index 705b0023a..e4a8ab058 100644
--- a/src/lib/video_source.h
+++ b/src/lib/video_source.h
@@ -65,6 +65,7 @@ public:
*/
boost::signals2::signal<void (boost::shared_ptr<Image>, bool, boost::shared_ptr<Subtitle>, double)> Video;
+ void connect_video (boost::shared_ptr<VideoSink>);
void connect_video (boost::shared_ptr<TimedVideoSink>);
};