summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-12-16 13:26:45 +0000
committerCarl Hetherington <cth@carlh.net>2012-12-16 13:26:45 +0000
commit1f2bc4d8f3601ad1e12b94f37b3889fcd003509b (patch)
treef192579eda6eaaea73a3b17acd2bb19965ae331f /src/lib
parent0813034d7193dc8869126d13a9d12d2c4d1e6c14 (diff)
Split Options into encode / decode.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ab_transcode_job.cc7
-rw-r--r--src/lib/ab_transcode_job.h12
-rw-r--r--src/lib/ab_transcoder.cc5
-rw-r--r--src/lib/ab_transcoder.h5
-rw-r--r--src/lib/audio_decoder.cc2
-rw-r--r--src/lib/audio_decoder.h2
-rw-r--r--src/lib/check_hashes_job.cc13
-rw-r--r--src/lib/check_hashes_job.h13
-rw-r--r--src/lib/dcp_video_frame.cc2
-rw-r--r--src/lib/dcp_video_frame.h5
-rw-r--r--src/lib/decoder.cc2
-rw-r--r--src/lib/decoder.h6
-rw-r--r--src/lib/decoder_factory.cc2
-rw-r--r--src/lib/decoder_factory.h4
-rw-r--r--src/lib/encoder.cc12
-rw-r--r--src/lib/encoder.h6
-rw-r--r--src/lib/encoder_factory.cc2
-rw-r--r--src/lib/encoder_factory.h4
-rw-r--r--src/lib/examine_content_job.cc3
-rw-r--r--src/lib/external_audio_decoder.cc2
-rw-r--r--src/lib/external_audio_decoder.h2
-rw-r--r--src/lib/ffmpeg_decoder.cc4
-rw-r--r--src/lib/ffmpeg_decoder.h2
-rw-r--r--src/lib/film.cc37
-rw-r--r--src/lib/imagemagick_decoder.cc2
-rw-r--r--src/lib/imagemagick_decoder.h2
-rw-r--r--src/lib/j2k_still_encoder.cc2
-rw-r--r--src/lib/j2k_still_encoder.h3
-rw-r--r--src/lib/j2k_wav_encoder.cc2
-rw-r--r--src/lib/j2k_wav_encoder.h2
-rw-r--r--src/lib/job.h1
-rw-r--r--src/lib/make_dcp_job.cc2
-rw-r--r--src/lib/make_dcp_job.h6
-rw-r--r--src/lib/options.h41
-rw-r--r--src/lib/transcode_job.cc9
-rw-r--r--src/lib/transcode_job.h7
-rw-r--r--src/lib/transcoder.cc4
-rw-r--r--src/lib/transcoder.h10
-rw-r--r--src/lib/video_decoder.cc2
-rw-r--r--src/lib/video_decoder.h2
40 files changed, 142 insertions, 109 deletions
diff --git a/src/lib/ab_transcode_job.cc b/src/lib/ab_transcode_job.cc
index c9fd5bc97..b9538ce2e 100644
--- a/src/lib/ab_transcode_job.cc
+++ b/src/lib/ab_transcode_job.cc
@@ -33,9 +33,10 @@ using boost::shared_ptr;
/** @param f Film to compare.
* @param o Options.
*/
-ABTranscodeJob::ABTranscodeJob (shared_ptr<Film> f, shared_ptr<const Options> o, shared_ptr<Job> req)
+ABTranscodeJob::ABTranscodeJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<const EncodeOptions> oe, shared_ptr<Job> req)
: Job (f, req)
- , _opt (o)
+ , _decode_opt (od)
+ , _encode_opt (oe)
{
_film_b.reset (new Film (*_film));
_film_b->set_scaler (Config::instance()->reference_scaler ());
@@ -53,7 +54,7 @@ ABTranscodeJob::run ()
{
try {
/* _film_b is the one with reference filters */
- ABTranscoder w (_film_b, _film, _opt, this, encoder_factory (_film, _opt));
+ ABTranscoder w (_film_b, _film, _decode_opt, this, encoder_factory (_film, _encode_opt));
w.go ();
set_progress (1);
set_state (FINISHED_OK);
diff --git a/src/lib/ab_transcode_job.h b/src/lib/ab_transcode_job.h
index 8331edf76..86a2a81b8 100644
--- a/src/lib/ab_transcode_job.h
+++ b/src/lib/ab_transcode_job.h
@@ -25,6 +25,8 @@
#include "job.h"
class Film;
+class DecodeOptions;
+class EncodeOptions;
/** @class ABTranscodeJob
* @brief Job to run a transcoder which produces output for A/B comparison of various settings.
@@ -36,13 +38,19 @@ class Film;
class ABTranscodeJob : public Job
{
public:
- ABTranscodeJob (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, boost::shared_ptr<Job> req);
+ ABTranscodeJob (
+ boost::shared_ptr<Film> f,
+ boost::shared_ptr<const DecodeOptions> od,
+ boost::shared_ptr<const EncodeOptions> oe,
+ boost::shared_ptr<Job> req
+ );
std::string name () const;
void run ();
private:
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const DecodeOptions> _decode_opt;
+ boost::shared_ptr<const EncodeOptions> _encode_opt;
/** Copy of our Film using the reference filters and scaler */
boost::shared_ptr<Film> _film_b;
diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc
index d65fcbd4e..d85f078a5 100644
--- a/src/lib/ab_transcoder.cc
+++ b/src/lib/ab_transcoder.cc
@@ -43,16 +43,15 @@ using boost::shared_ptr;
/** @param a Film to use for the left half of the screen.
* @param b Film to use for the right half of the screen.
- * @param o Options.
+ * @param o Decoder options.
* @param j Job that we are associated with.
* @param e Encoder to use.
*/
ABTranscoder::ABTranscoder (
- shared_ptr<Film> a, shared_ptr<Film> b, shared_ptr<const Options> o, Job* j, shared_ptr<Encoder> e)
+ shared_ptr<Film> a, shared_ptr<Film> b, shared_ptr<const DecodeOptions> o, Job* j, shared_ptr<Encoder> e)
: _film_a (a)
, _film_b (b)
- , _opt (o)
, _job (j)
, _encoder (e)
{
diff --git a/src/lib/ab_transcoder.h b/src/lib/ab_transcoder.h
index 86094301b..7bfcb393c 100644
--- a/src/lib/ab_transcoder.h
+++ b/src/lib/ab_transcoder.h
@@ -31,7 +31,7 @@ class Job;
class Encoder;
class VideoDecoder;
class AudioDecoder;
-class Options;
+class DecodeOptions;
class Image;
class Log;
class Subtitle;
@@ -51,7 +51,7 @@ public:
ABTranscoder (
boost::shared_ptr<Film> a,
boost::shared_ptr<Film> b,
- boost::shared_ptr<const Options> o,
+ boost::shared_ptr<const DecodeOptions> o,
Job* j,
boost::shared_ptr<Encoder> e
);
@@ -61,7 +61,6 @@ public:
private:
boost::shared_ptr<Film> _film_a;
boost::shared_ptr<Film> _film_b;
- boost::shared_ptr<const Options> _opt;
Job* _job;
boost::shared_ptr<Encoder> _encoder;
Decoders _da;
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc
index 70f0effd9..9d8de971c 100644
--- a/src/lib/audio_decoder.cc
+++ b/src/lib/audio_decoder.cc
@@ -23,7 +23,7 @@
using boost::optional;
using boost::shared_ptr;
-AudioDecoder::AudioDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
+AudioDecoder::AudioDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
{
diff --git a/src/lib/audio_decoder.h b/src/lib/audio_decoder.h
index 1570fe3b0..013a6327f 100644
--- a/src/lib/audio_decoder.h
+++ b/src/lib/audio_decoder.h
@@ -34,7 +34,7 @@
class AudioDecoder : public AudioSource, public virtual Decoder
{
public:
- AudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ AudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
virtual void set_audio_stream (boost::shared_ptr<AudioStream>);
diff --git a/src/lib/check_hashes_job.cc b/src/lib/check_hashes_job.cc
index 3967d0d70..50d86c523 100644
--- a/src/lib/check_hashes_job.cc
+++ b/src/lib/check_hashes_job.cc
@@ -34,9 +34,10 @@ using std::stringstream;
using std::ifstream;
using boost::shared_ptr;
-CheckHashesJob::CheckHashesJob (shared_ptr<Film> f, shared_ptr<const Options> o, shared_ptr<Job> req)
+CheckHashesJob::CheckHashesJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<const EncodeOptions> oe, shared_ptr<Job> req)
: Job (f, req)
- , _opt (o)
+ , _decode_opt (od)
+ , _encode_opt (oe)
, _bad (0)
{
@@ -61,7 +62,7 @@ CheckHashesJob::run ()
DCPFrameRate const dfr = dcp_frame_rate (_film->frames_per_second ());
for (SourceFrame i = _film->dcp_trim_start(); i < N; i += dfr.skip) {
- string const j2k_file = _opt->frame_out_path (i, false);
+ string const j2k_file = _encode_opt->frame_out_path (i, false);
string const hash_file = j2k_file + ".md5";
if (!boost::filesystem::exists (j2k_file)) {
@@ -91,13 +92,13 @@ CheckHashesJob::run ()
shared_ptr<Job> tc;
if (_film->dcp_ab()) {
- tc.reset (new ABTranscodeJob (_film, _opt, shared_from_this()));
+ tc.reset (new ABTranscodeJob (_film, _decode_opt, _encode_opt, shared_from_this()));
} else {
- tc.reset (new TranscodeJob (_film, _opt, shared_from_this()));
+ tc.reset (new TranscodeJob (_film, _decode_opt, _encode_opt, shared_from_this()));
}
JobManager::instance()->add_after (shared_from_this(), tc);
- JobManager::instance()->add_after (tc, shared_ptr<Job> (new CheckHashesJob (_film, _opt, tc)));
+ JobManager::instance()->add_after (tc, shared_ptr<Job> (new CheckHashesJob (_film, _decode_opt, _encode_opt, tc)));
}
set_progress (1);
diff --git a/src/lib/check_hashes_job.h b/src/lib/check_hashes_job.h
index e0ed6a64a..c41af9d3f 100644
--- a/src/lib/check_hashes_job.h
+++ b/src/lib/check_hashes_job.h
@@ -19,16 +19,25 @@
#include "job.h"
+class DecodeOptions;
+class EncodeOptions;
+
class CheckHashesJob : public Job
{
public:
- CheckHashesJob (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, boost::shared_ptr<Job> req);
+ CheckHashesJob (
+ boost::shared_ptr<Film> f,
+ boost::shared_ptr<const DecodeOptions> od,
+ boost::shared_ptr<const EncodeOptions> oe,
+ boost::shared_ptr<Job> req
+ );
std::string name () const;
void run ();
std::string status () const;
private:
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const DecodeOptions> _decode_opt;
+ boost::shared_ptr<const EncodeOptions> _encode_opt;
int _bad;
};
diff --git a/src/lib/dcp_video_frame.cc b/src/lib/dcp_video_frame.cc
index c185de0f4..996aff33f 100644
--- a/src/lib/dcp_video_frame.cc
+++ b/src/lib/dcp_video_frame.cc
@@ -376,7 +376,7 @@ DCPVideoFrame::encode_remotely (ServerDescription const * serv)
* @param frame Frame index.
*/
void
-EncodedData::write (shared_ptr<const Options> opt, SourceFrame frame)
+EncodedData::write (shared_ptr<const EncodeOptions> opt, SourceFrame frame)
{
string const tmp_j2k = opt->frame_out_path (frame, true);
diff --git a/src/lib/dcp_video_frame.h b/src/lib/dcp_video_frame.h
index 5ae53f1e8..57e7e6203 100644
--- a/src/lib/dcp_video_frame.h
+++ b/src/lib/dcp_video_frame.h
@@ -26,7 +26,7 @@
*/
class FilmState;
-class Options;
+class EncodeOptions;
class ServerDescription;
class Scaler;
class Image;
@@ -50,7 +50,7 @@ public:
virtual ~EncodedData () {}
void send (boost::shared_ptr<Socket> socket);
- void write (boost::shared_ptr<const Options>, SourceFrame);
+ void write (boost::shared_ptr<const EncodeOptions>, SourceFrame);
/** @return data */
uint8_t* data () const {
@@ -122,7 +122,6 @@ public:
private:
void create_openjpeg_container ();
- void write_encoded (boost::shared_ptr<const Options>, uint8_t *, int);
boost::shared_ptr<const Image> _input; ///< the input image
boost::shared_ptr<Subtitle> _subtitle; ///< any subtitle that should be on the image
diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc
index 93ce2cdbb..507708345 100644
--- a/src/lib/decoder.cc
+++ b/src/lib/decoder.cc
@@ -49,7 +49,7 @@ using boost::optional;
* @param o Options.
* @param j Job that we are running within, or 0
*/
-Decoder::Decoder (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j)
+Decoder::Decoder (boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> o, Job* j)
: _film (f)
, _opt (o)
, _job (j)
diff --git a/src/lib/decoder.h b/src/lib/decoder.h
index e4693fb6d..be1fe38b6 100644
--- a/src/lib/decoder.h
+++ b/src/lib/decoder.h
@@ -35,7 +35,7 @@
#include "audio_source.h"
class Job;
-class Options;
+class DecodeOptions;
class Image;
class Log;
class DelayLine;
@@ -54,7 +54,7 @@ class FilterGraph;
class Decoder
{
public:
- Decoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ Decoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
virtual ~Decoder () {}
virtual bool pass () = 0;
@@ -67,7 +67,7 @@ protected:
/** our Film */
boost::shared_ptr<Film> _film;
/** our options */
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const DecodeOptions> _opt;
/** associated Job, or 0 */
Job* _job;
};
diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc
index 8674c6262..1d8d12cd5 100644
--- a/src/lib/decoder_factory.cc
+++ b/src/lib/decoder_factory.cc
@@ -36,7 +36,7 @@ using boost::dynamic_pointer_cast;
Decoders
decoder_factory (
- shared_ptr<Film> f, shared_ptr<const Options> o, Job* j
+ shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j
)
{
if (boost::filesystem::is_directory (f->content_path()) || f->content_type() == STILL) {
diff --git a/src/lib/decoder_factory.h b/src/lib/decoder_factory.h
index 88f719ba2..47d977ce7 100644
--- a/src/lib/decoder_factory.h
+++ b/src/lib/decoder_factory.h
@@ -25,7 +25,7 @@
*/
class Film;
-class Options;
+class DecodeOptions;
class Job;
class VideoDecoder;
class AudioDecoder;
@@ -43,7 +43,7 @@ struct Decoders {
};
extern Decoders decoder_factory (
- boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *
+ boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *
);
#endif
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index 17a6726a6..1fc7d5997 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -33,7 +33,7 @@ int const Encoder::_history_size = 25;
/** @param f Film that we are encoding.
* @param o Options.
*/
-Encoder::Encoder (shared_ptr<const Film> f, shared_ptr<const Options> o)
+Encoder::Encoder (shared_ptr<const Film> f, shared_ptr<const EncodeOptions> o)
: _film (f)
, _opt (o)
, _just_skipped (false)
@@ -107,13 +107,13 @@ Encoder::frame_skipped ()
void
Encoder::process_video (shared_ptr<Image> i, boost::shared_ptr<Subtitle> s)
{
- if (_opt->decode_video_skip != 0 && (_video_frame % _opt->decode_video_skip) != 0) {
+ if (_opt->video_skip != 0 && (_video_frame % _opt->video_skip) != 0) {
++_video_frame;
return;
}
- if (_opt->video_decode_range) {
- pair<SourceFrame, SourceFrame> const r = _opt->video_decode_range.get();
+ if (_opt->video_range) {
+ pair<SourceFrame, SourceFrame> const r = _opt->video_range.get();
if (_video_frame < r.first || _video_frame >= r.second) {
++_video_frame;
return;
@@ -127,12 +127,12 @@ Encoder::process_video (shared_ptr<Image> i, boost::shared_ptr<Subtitle> s)
void
Encoder::process_audio (shared_ptr<AudioBuffers> data)
{
- if (_opt->audio_decode_range) {
+ if (_opt->audio_range) {
shared_ptr<AudioBuffers> trimmed (new AudioBuffers (*data.get ()));
/* Range that we are encoding */
- pair<int64_t, int64_t> required_range = _opt->audio_decode_range.get();
+ pair<int64_t, int64_t> required_range = _opt->audio_range.get();
/* Range of this block of data */
pair<int64_t, int64_t> this_range (_audio_frame, _audio_frame + trimmed->frames());
diff --git a/src/lib/encoder.h b/src/lib/encoder.h
index b12bd0d48..64f113d74 100644
--- a/src/lib/encoder.h
+++ b/src/lib/encoder.h
@@ -35,7 +35,7 @@ extern "C" {
#include "video_sink.h"
#include "audio_sink.h"
-class Options;
+class EncodeOptions;
class Image;
class Subtitle;
class AudioBuffers;
@@ -54,7 +54,7 @@ class Film;
class Encoder : public VideoSink, public AudioSink
{
public:
- Encoder (boost::shared_ptr<const Film> f, boost::shared_ptr<const Options> o);
+ Encoder (boost::shared_ptr<const Film> f, boost::shared_ptr<const EncodeOptions> o);
virtual ~Encoder () {}
/** Called to indicate that a processing run is about to begin */
@@ -93,7 +93,7 @@ protected:
/** Film that we are encoding */
boost::shared_ptr<const Film> _film;
/** Options */
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const EncodeOptions> _opt;
/** Mutex for _time_history, _just_skipped and _last_frame */
mutable boost::mutex _history_mutex;
diff --git a/src/lib/encoder_factory.cc b/src/lib/encoder_factory.cc
index 2da021ad8..fe4d50ef3 100644
--- a/src/lib/encoder_factory.cc
+++ b/src/lib/encoder_factory.cc
@@ -29,7 +29,7 @@
using boost::shared_ptr;
shared_ptr<Encoder>
-encoder_factory (shared_ptr<const Film> f, shared_ptr<const Options> o)
+encoder_factory (shared_ptr<const Film> f, shared_ptr<const EncodeOptions> o)
{
if (!boost::filesystem::is_directory (f->content_path()) && f->content_type() == STILL) {
return shared_ptr<Encoder> (new J2KStillEncoder (f, o));
diff --git a/src/lib/encoder_factory.h b/src/lib/encoder_factory.h
index 1bc4e18df..5ac5c9559 100644
--- a/src/lib/encoder_factory.h
+++ b/src/lib/encoder_factory.h
@@ -22,9 +22,9 @@
*/
class Encoder;
-class Options;
+class EncodeOptions;
class Job;
class Log;
class Film;
-extern boost::shared_ptr<Encoder> encoder_factory (boost::shared_ptr<const Film>, boost::shared_ptr<const Options>);
+extern boost::shared_ptr<Encoder> encoder_factory (boost::shared_ptr<const Film>, boost::shared_ptr<const EncodeOptions>);
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc
index eaf1033d9..dc2fc305c 100644
--- a/src/lib/examine_content_job.cc
+++ b/src/lib/examine_content_job.cc
@@ -67,8 +67,7 @@ ExamineContentJob::run ()
_film->unset_length ();
_film->set_crop (Crop ());
- shared_ptr<Options> o (new Options ("", "", ""));
- o->out_size = Size (512, 512);
+ shared_ptr<DecodeOptions> o (new DecodeOptions);
o->decode_audio = false;
descend (1);
diff --git a/src/lib/external_audio_decoder.cc b/src/lib/external_audio_decoder.cc
index 9b121235a..25c8068b6 100644
--- a/src/lib/external_audio_decoder.cc
+++ b/src/lib/external_audio_decoder.cc
@@ -31,7 +31,7 @@ using std::cout;
using boost::shared_ptr;
using boost::optional;
-ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
+ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
, AudioDecoder (f, o, j)
{
diff --git a/src/lib/external_audio_decoder.h b/src/lib/external_audio_decoder.h
index 45a2a809c..2558955eb 100644
--- a/src/lib/external_audio_decoder.h
+++ b/src/lib/external_audio_decoder.h
@@ -44,7 +44,7 @@ private:
class ExternalAudioDecoder : public AudioDecoder
{
public:
- ExternalAudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ ExternalAudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
bool pass ();
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 7b97a422e..b3b1acbbb 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -59,7 +59,7 @@ using boost::shared_ptr;
using boost::optional;
using boost::dynamic_pointer_cast;
-FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
+FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
, VideoDecoder (f, o, j)
, AudioDecoder (f, o, j)
@@ -270,7 +270,7 @@ FFmpegDecoder::pass ()
_film->log()->log (String::compose ("Used only %1 bytes of %2 in packet", r, _packet.size));
}
- if (_opt->decoder_alignment) {
+ if (_opt->video_sync) {
out_careful ();
} else {
filter_and_emit_video (_frame);
diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h
index 89e42f978..d483db1d9 100644
--- a/src/lib/ffmpeg_decoder.h
+++ b/src/lib/ffmpeg_decoder.h
@@ -84,7 +84,7 @@ private:
class FFmpegDecoder : public VideoDecoder, public AudioDecoder
{
public:
- FFmpegDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ FFmpegDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
~FFmpegDecoder ();
float frames_per_second () const;
diff --git a/src/lib/film.cc b/src/lib/film.cc
index ddc7e371c..e7f47c462 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -258,35 +258,37 @@ Film::make_dcp (bool transcode)
throw MissingSettingError ("name");
}
- shared_ptr<Options> o (new Options (j2k_dir(), ".j2c", dir ("wavs")));
- o->out_size = format()->dcp_size ();
- o->padding = format()->dcp_padding (shared_from_this ());
- o->ratio = format()->ratio_as_float (shared_from_this ());
+ shared_ptr<EncodeOptions> oe (new EncodeOptions (j2k_dir(), ".j2c", dir ("wavs")));
+ oe->out_size = format()->dcp_size ();
+ oe->padding = format()->dcp_padding (shared_from_this ());
if (dcp_length ()) {
- o->video_decode_range = make_pair (dcp_trim_start(), dcp_trim_start() + dcp_length().get());
+ oe->video_range = make_pair (dcp_trim_start(), dcp_trim_start() + dcp_length().get());
if (audio_stream()) {
- o->audio_decode_range = make_pair (
- video_frames_to_audio_frames (o->video_decode_range.get().first, audio_stream()->sample_rate(), frames_per_second()),
- video_frames_to_audio_frames (o->video_decode_range.get().second, audio_stream()->sample_rate(), frames_per_second())
+ oe->audio_range = make_pair (
+ video_frames_to_audio_frames (oe->video_range.get().first, audio_stream()->sample_rate(), frames_per_second()),
+ video_frames_to_audio_frames (oe->video_range.get().second, audio_stream()->sample_rate(), frames_per_second())
);
}
}
- o->decode_subtitles = with_subtitles ();
- o->decode_video_skip = dcp_frame_rate (frames_per_second()).skip;
+
+ oe->video_skip = dcp_frame_rate (frames_per_second()).skip;
+
+ shared_ptr<DecodeOptions> od (new DecodeOptions);
+ od->decode_subtitles = with_subtitles ();
shared_ptr<Job> r;
if (transcode) {
if (dcp_ab()) {
- r = JobManager::instance()->add (shared_ptr<Job> (new ABTranscodeJob (shared_from_this(), o, shared_ptr<Job> ())));
+ r = JobManager::instance()->add (shared_ptr<Job> (new ABTranscodeJob (shared_from_this(), od, oe, shared_ptr<Job> ())));
} else {
- r = JobManager::instance()->add (shared_ptr<Job> (new TranscodeJob (shared_from_this(), o, shared_ptr<Job> ())));
+ r = JobManager::instance()->add (shared_ptr<Job> (new TranscodeJob (shared_from_this(), od, oe, shared_ptr<Job> ())));
}
}
- r = JobManager::instance()->add (shared_ptr<Job> (new CheckHashesJob (shared_from_this(), o, r)));
- JobManager::instance()->add (shared_ptr<Job> (new MakeDCPJob (shared_from_this(), o, r)));
+ r = JobManager::instance()->add (shared_ptr<Job> (new CheckHashesJob (shared_from_this(), od, oe, r)));
+ JobManager::instance()->add (shared_ptr<Job> (new MakeDCPJob (shared_from_this(), oe, r)));
}
/** Start a job to examine our content file */
@@ -844,9 +846,7 @@ Film::set_content (string c)
*/
try {
- shared_ptr<Options> o (new Options ("", "", ""));
- o->out_size = Size (1024, 1024);
-
+ shared_ptr<DecodeOptions> o (new DecodeOptions);
Decoders d = decoder_factory (shared_from_this(), o, 0);
set_size (d.video->native_size ());
@@ -1038,8 +1038,7 @@ Film::set_external_audio (vector<string> a)
_external_audio = a;
}
- shared_ptr<Options> o (new Options ("", "", ""));
- o->decode_audio = true;
+ shared_ptr<DecodeOptions> o (new DecodeOptions);
shared_ptr<ExternalAudioDecoder> decoder (new ExternalAudioDecoder (shared_from_this(), o, 0));
if (decoder->audio_stream()) {
_external_audio_stream = decoder->audio_stream ();
diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc
index d68c1648f..3957da5dd 100644
--- a/src/lib/imagemagick_decoder.cc
+++ b/src/lib/imagemagick_decoder.cc
@@ -29,7 +29,7 @@ using std::cout;
using boost::shared_ptr;
ImageMagickDecoder::ImageMagickDecoder (
- boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j)
+ boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
, VideoDecoder (f, o, j)
{
diff --git a/src/lib/imagemagick_decoder.h b/src/lib/imagemagick_decoder.h
index f636191f2..75107ef4f 100644
--- a/src/lib/imagemagick_decoder.h
+++ b/src/lib/imagemagick_decoder.h
@@ -26,7 +26,7 @@ namespace Magick {
class ImageMagickDecoder : public VideoDecoder
{
public:
- ImageMagickDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ ImageMagickDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
float frames_per_second () const {
/* We don't know */
diff --git a/src/lib/j2k_still_encoder.cc b/src/lib/j2k_still_encoder.cc
index dd6ef49b2..68088377b 100644
--- a/src/lib/j2k_still_encoder.cc
+++ b/src/lib/j2k_still_encoder.cc
@@ -42,7 +42,7 @@ using std::string;
using std::pair;
using boost::shared_ptr;
-J2KStillEncoder::J2KStillEncoder (shared_ptr<const Film> f, shared_ptr<const Options> o)
+J2KStillEncoder::J2KStillEncoder (shared_ptr<const Film> f, shared_ptr<const EncodeOptions> o)
: Encoder (f, o)
{
diff --git a/src/lib/j2k_still_encoder.h b/src/lib/j2k_still_encoder.h
index 4ffe876af..6069637d0 100644
--- a/src/lib/j2k_still_encoder.h
+++ b/src/lib/j2k_still_encoder.h
@@ -27,6 +27,7 @@
class Image;
class Log;
+class EncodeOptions;
/** @class J2KStillEncoder
* @brief An encoder which writes repeated JPEG2000 files from a single decoded input.
@@ -34,7 +35,7 @@ class Log;
class J2KStillEncoder : public Encoder
{
public:
- J2KStillEncoder (boost::shared_ptr<const Film>, boost::shared_ptr<const Options>);
+ J2KStillEncoder (boost::shared_ptr<const Film>, boost::shared_ptr<const EncodeOptions>);
private:
void do_process_video (boost::shared_ptr<Image>, boost::shared_ptr<Subtitle>);
diff --git a/src/lib/j2k_wav_encoder.cc b/src/lib/j2k_wav_encoder.cc
index 134d74623..e76591552 100644
--- a/src/lib/j2k_wav_encoder.cc
+++ b/src/lib/j2k_wav_encoder.cc
@@ -51,7 +51,7 @@ using boost::shared_ptr;
using boost::thread;
using boost::lexical_cast;
-J2KWAVEncoder::J2KWAVEncoder (shared_ptr<const Film> f, shared_ptr<const Options> o)
+J2KWAVEncoder::J2KWAVEncoder (shared_ptr<const Film> f, shared_ptr<const EncodeOptions> o)
: Encoder (f, o)
#ifdef HAVE_SWRESAMPLE
, _swr_context (0)
diff --git a/src/lib/j2k_wav_encoder.h b/src/lib/j2k_wav_encoder.h
index f3340ba72..064f4221e 100644
--- a/src/lib/j2k_wav_encoder.h
+++ b/src/lib/j2k_wav_encoder.h
@@ -47,7 +47,7 @@ class AudioBuffers;
class J2KWAVEncoder : public Encoder
{
public:
- J2KWAVEncoder (boost::shared_ptr<const Film>, boost::shared_ptr<const Options>);
+ J2KWAVEncoder (boost::shared_ptr<const Film>, boost::shared_ptr<const EncodeOptions>);
~J2KWAVEncoder ();
void process_begin ();
diff --git a/src/lib/job.h b/src/lib/job.h
index 41cefb9be..f32cfa811 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -30,7 +30,6 @@
#include <boost/signals2.hpp>
class Film;
-class Options;
/** @class Job
* @brief A parent class to represent long-running tasks which are run in their own thread.
diff --git a/src/lib/make_dcp_job.cc b/src/lib/make_dcp_job.cc
index 65cd272e7..4605d1724 100644
--- a/src/lib/make_dcp_job.cc
+++ b/src/lib/make_dcp_job.cc
@@ -42,7 +42,7 @@ using boost::shared_ptr;
/** @param f Film we are making the DCP for.
* @param o Options.
*/
-MakeDCPJob::MakeDCPJob (shared_ptr<Film> f, shared_ptr<const Options> o, shared_ptr<Job> req)
+MakeDCPJob::MakeDCPJob (shared_ptr<Film> f, shared_ptr<const EncodeOptions> o, shared_ptr<Job> req)
: Job (f, req)
, _opt (o)
{
diff --git a/src/lib/make_dcp_job.h b/src/lib/make_dcp_job.h
index 442bb55f5..1aa906b0a 100644
--- a/src/lib/make_dcp_job.h
+++ b/src/lib/make_dcp_job.h
@@ -23,13 +23,15 @@
#include "job.h"
+class EncodeOptions;
+
/** @class MakeDCPJob
* @brief A job to create DCPs
*/
class MakeDCPJob : public Job
{
public:
- MakeDCPJob (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, boost::shared_ptr<Job> req);
+ MakeDCPJob (boost::shared_ptr<Film>, boost::shared_ptr<const EncodeOptions>, boost::shared_ptr<Job> req);
std::string name () const;
void run ();
@@ -39,6 +41,6 @@ private:
std::string j2c_path (int) const;
std::string wav_path (libdcp::Channel) const;
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const EncodeOptions> _opt;
};
diff --git a/src/lib/options.h b/src/lib/options.h
index 9b3866dcb..4457969f3 100644
--- a/src/lib/options.h
+++ b/src/lib/options.h
@@ -27,22 +27,19 @@
#include <boost/optional.hpp>
#include "util.h"
-/** @class Options
- * @brief Options for a transcoding operation.
+/** @class EncodeOptions
+ * @brief EncodeOptions for an encoding operation.
*
* These are settings which may be different, in different circumstances, for
- * the same film; ie they are options for a particular transcode operation.
+ * the same film; ie they are options for a particular operation.
*/
-class Options
+class EncodeOptions
{
public:
- Options (std::string f, std::string e, std::string m)
+ EncodeOptions (std::string f, std::string e, std::string m)
: padding (0)
- , decode_video_skip (0)
- , decode_audio (true)
- , decode_subtitles (false)
- , decoder_alignment (true)
+ , video_skip (0)
, _frame_out_path (f)
, _frame_out_extension (e)
, _multichannel_audio_out_path (m)
@@ -94,22 +91,17 @@ public:
}
Size out_size; ///< size of output images
- float ratio; ///< ratio of the wanted output image (not considering padding)
int padding; ///< number of pixels of padding (in terms of the output size) each side of the image
/** Range of video frames to decode */
- boost::optional<std::pair<SourceFrame, SourceFrame> > video_decode_range;
+ boost::optional<std::pair<SourceFrame, SourceFrame> > video_range;
/** Range of audio frames to decode */
- boost::optional<std::pair<int64_t, int64_t> > audio_decode_range;
+ boost::optional<std::pair<int64_t, int64_t> > audio_range;
/** Skip frames such that we don't decode any frame where (index % decode_video_skip) != 0; e.g.
* 1 for every frame, 2 for every other frame, etc.
*/
- SourceFrame decode_video_skip;
- bool decode_audio; ///< true to decode audio, otherwise false
- bool decode_subtitles;
-
- bool decoder_alignment;
+ SourceFrame video_skip;
private:
/** Path of the directory to write video frames to */
@@ -119,3 +111,18 @@ private:
/** Path of the directory to write audio files to */
std::string _multichannel_audio_out_path;
};
+
+
+class DecodeOptions
+{
+public:
+ DecodeOptions ()
+ : decode_audio (true)
+ , decode_subtitles (false)
+ , video_sync (true)
+ {}
+
+ bool decode_audio;
+ bool decode_subtitles;
+ bool video_sync;
+};
diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc
index 081e04252..54619c39f 100644
--- a/src/lib/transcode_job.cc
+++ b/src/lib/transcode_job.cc
@@ -41,9 +41,10 @@ using boost::shared_ptr;
* @param o Options.
* @param req Job that must be completed before this job is run.
*/
-TranscodeJob::TranscodeJob (shared_ptr<Film> f, shared_ptr<const Options> o, shared_ptr<Job> req)
+TranscodeJob::TranscodeJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<const EncodeOptions> oe, shared_ptr<Job> req)
: Job (f, req)
- , _opt (o)
+ , _decode_opt (od)
+ , _encode_opt (oe)
{
}
@@ -62,8 +63,8 @@ TranscodeJob::run ()
_film->log()->log ("Transcode job starting");
_film->log()->log (String::compose ("Audio delay is %1ms", _film->audio_delay()));
- _encoder = encoder_factory (_film, _opt);
- Transcoder w (_film, _opt, this, _encoder);
+ _encoder = encoder_factory (_film, _encode_opt);
+ Transcoder w (_film, _decode_opt, this, _encoder);
w.go ();
set_progress (1);
set_state (FINISHED_OK);
diff --git a/src/lib/transcode_job.h b/src/lib/transcode_job.h
index 1decea070..97f655e15 100644
--- a/src/lib/transcode_job.h
+++ b/src/lib/transcode_job.h
@@ -25,6 +25,8 @@
#include "job.h"
class Encoder;
+class DecodeOptions;
+class EncodeOptions;
/** @class TranscodeJob
* @brief A job which transcodes from one format to another.
@@ -32,7 +34,7 @@ class Encoder;
class TranscodeJob : public Job
{
public:
- TranscodeJob (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, boost::shared_ptr<Job> req);
+ TranscodeJob (boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> od, boost::shared_ptr<const EncodeOptions> oe, boost::shared_ptr<Job> req);
std::string name () const;
void run ();
@@ -42,6 +44,7 @@ protected:
int remaining_time () const;
private:
- boost::shared_ptr<const Options> _opt;
+ boost::shared_ptr<const DecodeOptions> _decode_opt;
+ boost::shared_ptr<const EncodeOptions> _encode_opt;
boost::shared_ptr<Encoder> _encoder;
};
diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc
index 114803fb5..f44a3ed7b 100644
--- a/src/lib/transcoder.cc
+++ b/src/lib/transcoder.cc
@@ -44,11 +44,11 @@ using boost::dynamic_pointer_cast;
/** Construct a transcoder using a Decoder that we create and a supplied Encoder.
* @param f Film that we are transcoding.
- * @param o Options.
+ * @param o Decode options.
* @param j Job that we are running under, or 0.
* @param e Encoder to use.
*/
-Transcoder::Transcoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j, shared_ptr<Encoder> e)
+Transcoder::Transcoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j, shared_ptr<Encoder> e)
: _job (j)
, _encoder (e)
, _decoders (decoder_factory (f, o, j))
diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h
index 35aac0b50..f27984aaa 100644
--- a/src/lib/transcoder.h
+++ b/src/lib/transcoder.h
@@ -36,7 +36,8 @@ class Gain;
class VideoDecoder;
class AudioDecoder;
class DelayLine;
-class Options;
+class EncodeOptions;
+class DecodeOptions;
/** @class Transcoder
* @brief A class which takes a FilmState and some Options, then uses those to transcode a Film.
@@ -47,7 +48,12 @@ class Options;
class Transcoder
{
public:
- Transcoder (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j, boost::shared_ptr<Encoder> e);
+ Transcoder (
+ boost::shared_ptr<Film> f,
+ boost::shared_ptr<const DecodeOptions> o,
+ Job* j,
+ boost::shared_ptr<Encoder> e
+ );
void go ();
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc
index 03a697865..a8da40b7c 100644
--- a/src/lib/video_decoder.cc
+++ b/src/lib/video_decoder.cc
@@ -28,7 +28,7 @@
using boost::shared_ptr;
using boost::optional;
-VideoDecoder::VideoDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
+VideoDecoder::VideoDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
: Decoder (f, o, j)
, _video_frame (0)
{
diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h
index ea1899840..a8296d918 100644
--- a/src/lib/video_decoder.h
+++ b/src/lib/video_decoder.h
@@ -27,7 +27,7 @@
class VideoDecoder : public VideoSource, public virtual Decoder
{
public:
- VideoDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ VideoDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
/** @return video frames per second, or 0 if unknown */
virtual float frames_per_second () const = 0;