shared_ptr is a bit excessive for DecodeOptions.
authorCarl Hetherington <cth@carlh.net>
Thu, 17 Jan 2013 00:24:13 +0000 (00:24 +0000)
committerCarl Hetherington <cth@carlh.net>
Thu, 17 Jan 2013 00:24:13 +0000 (00:24 +0000)
28 files changed:
src/lib/ab_transcode_job.cc
src/lib/ab_transcode_job.h
src/lib/ab_transcoder.cc
src/lib/ab_transcoder.h
src/lib/audio_decoder.cc
src/lib/audio_decoder.h
src/lib/check_hashes_job.cc
src/lib/check_hashes_job.h
src/lib/decoder.cc
src/lib/decoder.h
src/lib/decoder_factory.cc
src/lib/decoder_factory.h
src/lib/examine_content_job.cc
src/lib/external_audio_decoder.cc
src/lib/external_audio_decoder.h
src/lib/ffmpeg_decoder.cc
src/lib/ffmpeg_decoder.h
src/lib/film.cc
src/lib/imagemagick_decoder.cc
src/lib/imagemagick_decoder.h
src/lib/options.h
src/lib/transcode_job.cc
src/lib/transcode_job.h
src/lib/transcoder.cc
src/lib/transcoder.h
src/lib/video_decoder.cc
src/lib/video_decoder.h
src/wx/film_viewer.cc

index 2dd8f95adfdc44fc5033dceec9ce9c7bc6fb7c31..0efd277bb73799a76fdbf0f68aec04e36f7ab2d0 100644 (file)
@@ -30,11 +30,11 @@ using std::string;
 using boost::shared_ptr;
 
 /** @param f Film to compare.
- *  @param o Options.
+ *  @param o Decode options.
  */
-ABTranscodeJob::ABTranscodeJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<Job> req)
+ABTranscodeJob::ABTranscodeJob (shared_ptr<Film> f, DecodeOptions o, shared_ptr<Job> req)
        : Job (f, req)
-       , _decode_opt (od)
+       , _decode_opt (o)
 {
        _film_b.reset (new Film (*_film));
        _film_b->set_scaler (Config::instance()->reference_scaler ());
index 69c157651468f7de7f86ef685abff698a7704196..983842038f936cb4ad0f0e63aeef8600e82712aa 100644 (file)
@@ -23,9 +23,9 @@
 
 #include <boost/shared_ptr.hpp>
 #include "job.h"
+#include "options.h"
 
 class Film;
-class DecodeOptions;
 
 /** @class ABTranscodeJob
  *  @brief Job to run a transcoder which produces output for A/B comparison of various settings.
@@ -39,7 +39,7 @@ class ABTranscodeJob : public Job
 public:
        ABTranscodeJob (
                boost::shared_ptr<Film> f,
-               boost::shared_ptr<const DecodeOptions> od,
+               DecodeOptions o,
                boost::shared_ptr<Job> req
                );
 
@@ -47,7 +47,7 @@ public:
        void run ();
 
 private:
-       boost::shared_ptr<const DecodeOptions> _decode_opt;
+       DecodeOptions _decode_opt;
        
        /** Copy of our Film using the reference filters and scaler */
        boost::shared_ptr<Film> _film_b;
index 53af43b5d91a2be5f259bad4d1d725fb3f18c067..fc4fb8daa44c96105f11ea14a5562bc847344ca9 100644 (file)
@@ -49,7 +49,7 @@ using boost::shared_ptr;
  */
 
 ABTranscoder::ABTranscoder (
-       shared_ptr<Film> a, shared_ptr<Film> b, shared_ptr<const DecodeOptions> o, Job* j, shared_ptr<Encoder> e)
+       shared_ptr<Film> a, shared_ptr<Film> b, DecodeOptions o, Job* j, shared_ptr<Encoder> e)
        : _film_a (a)
        , _film_b (b)
        , _job (j)
index 7bfcb393cb32182d833bde5cc52eeae0e47327a1..58a08af04ca7fbe67eddd78937af60c0fd53b51d 100644 (file)
@@ -31,7 +31,6 @@ class Job;
 class Encoder;
 class VideoDecoder;
 class AudioDecoder;
-class DecodeOptions;
 class Image;
 class Log;
 class Subtitle;
@@ -51,7 +50,7 @@ public:
        ABTranscoder (
                boost::shared_ptr<Film> a,
                boost::shared_ptr<Film> b,
-               boost::shared_ptr<const DecodeOptions> o,
+               DecodeOptions o,
                Job* j,
                boost::shared_ptr<Encoder> e
                );
index 9d8de971c654356a753f85fc48b8618d49568fc9..a038dd2bb22131b8ea4d2888216acd224a0fddc1 100644 (file)
@@ -23,7 +23,7 @@
 using boost::optional;
 using boost::shared_ptr;
 
-AudioDecoder::AudioDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
+AudioDecoder::AudioDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
        : Decoder (f, o, j)
 {
 
index 013a6327f1d8587b3e9d4991f3603f618e995da5..3bf585f4de1f77259de867f218d66fa6fe4fe141 100644 (file)
@@ -34,7 +34,7 @@
 class AudioDecoder : public AudioSource, public virtual Decoder
 {
 public:
-       AudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
+       AudioDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
 
        virtual void set_audio_stream (boost::shared_ptr<AudioStream>);
 
index 099845d8c7a94583b735354d416d3b94f6acef8c..2ad97c382d5eeb38987db5a635cd31393818e6ed 100644 (file)
@@ -34,9 +34,9 @@ using std::stringstream;
 using std::ifstream;
 using boost::shared_ptr;
 
-CheckHashesJob::CheckHashesJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<Job> req)
+CheckHashesJob::CheckHashesJob (shared_ptr<Film> f, DecodeOptions o, shared_ptr<Job> req)
        : Job (f, req)
-       , _decode_opt (od)
+       , _decode_opt (o)
        , _bad (0)
 {
 
index 7e62b0e7ac83424407deb7e4fe5633172fad623a..5fa17382db17cbb0935554c91e53805e1adcdf9a 100644 (file)
 */
 
 #include "job.h"
-
-class DecodeOptions;
+#include "options.h"
 
 class CheckHashesJob : public Job
 {
 public:
        CheckHashesJob (
                boost::shared_ptr<Film> f,
-               boost::shared_ptr<const DecodeOptions> od,
+               DecodeOptions od,
                boost::shared_ptr<Job> req
                );
 
@@ -35,6 +34,6 @@ public:
        std::string status () const;
 
 private:
-       boost::shared_ptr<const DecodeOptions> _decode_opt;
+       DecodeOptions _decode_opt;
        int _bad;
 };
index 7066b488e6507352320c06767caaa216218c0275..fd0abee4183e540b4a4db5c5a9cb3588e5d8a34c 100644 (file)
@@ -46,10 +46,10 @@ using boost::shared_ptr;
 using boost::optional;
 
 /** @param f Film.
- *  @param o Options.
+ *  @param o Decode options.
  *  @param j Job that we are running within, or 0
  */
-Decoder::Decoder (boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> o, Job* j)
+Decoder::Decoder (boost::shared_ptr<Film> f, DecodeOptions o, Job* j)
        : _film (f)
        , _opt (o)
        , _job (j)
index 3908afa2fbfed522b24266846925fad693ee374f..cc4c87373616e6f4f469e4f3ce9018b4ee5aa929 100644 (file)
@@ -34,9 +34,9 @@
 #include "video_source.h"
 #include "audio_source.h"
 #include "film.h"
+#include "options.h"
 
 class Job;
-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 DecodeOptions>, Job *);
+       Decoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
        virtual ~Decoder () {}
 
        virtual bool pass () = 0;
@@ -66,8 +66,8 @@ public:
 protected:
        /** our Film */
        boost::shared_ptr<Film> _film;
-       /** our options */
-       boost::shared_ptr<const DecodeOptions> _opt;
+       /** our decode options */
+       DecodeOptions _opt;
        /** associated Job, or 0 */
        Job* _job;
 
index 2a0d828e2153d4e418e8f254277f98f719a33754..c4d818f497f6d7eec7f173eea9fa445d9a666f21 100644 (file)
@@ -36,7 +36,7 @@ using boost::dynamic_pointer_cast;
 
 Decoders
 decoder_factory (
-       shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j
+       shared_ptr<Film> f, DecodeOptions o, Job* j
        )
 {
        if (boost::filesystem::is_directory (f->content_path()) || f->content_type() == STILL) {
index 47d977ce7581dd966d7db70980aca574882f0be5..445a1c8a2f7a27462f6532801f51ae4810a7a8a9 100644 (file)
@@ -24,8 +24,9 @@
  *  @brief A method to create appropriate decoders for some content.
  */
 
+#include "options.h"
+
 class Film;
-class DecodeOptions;
 class Job;
 class VideoDecoder;
 class AudioDecoder;
@@ -43,7 +44,7 @@ struct Decoders {
 };
 
 extern Decoders decoder_factory (
-       boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *
+       boost::shared_ptr<Film>, DecodeOptions, Job *
        );
 
 #endif
index a783cde339f646a009d7b4c3da9eea617ace0b16..69a757e2b94bb65ad5f37128fb2c896386011f51 100644 (file)
@@ -78,8 +78,8 @@ ExamineContentJob::run ()
                _film->unset_length ();
                _film->set_crop (Crop ());
                
-               shared_ptr<DecodeOptions> o (new DecodeOptions);
-               o->decode_audio = false;
+               DecodeOptions o;
+               o.decode_audio = false;
                
                Decoders decoders = decoder_factory (_film, o, this);
                
@@ -96,8 +96,7 @@ ExamineContentJob::run ()
 
                /* Get a quick decoder to get the content's length from its header */
                
-               shared_ptr<DecodeOptions> o (new DecodeOptions);
-               Decoders d = decoder_factory (_film, o, 0);
+               Decoders d = decoder_factory (_film, DecodeOptions(), 0);
                _film->set_length (d.video->length());
        
                _film->log()->log (String::compose ("Video length obtained from header as %1 frames", _film->length().get()));
index 25c8068b6fcdb02726a0b93f8163b7ef6b968e1b..36605141886aed7ec596bb024b0425bfedc23f94 100644 (file)
@@ -31,7 +31,7 @@ using std::cout;
 using boost::shared_ptr;
 using boost::optional;
 
-ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
+ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
        : Decoder (f, o, j)
        , AudioDecoder (f, o, j)
 {
index 2558955eb1985f45c396d5067a753f1109ec976d..37e53bca7f5ac1453adb54d635849a266bb384af 100644 (file)
@@ -44,7 +44,7 @@ private:
 class ExternalAudioDecoder : public AudioDecoder
 {
 public:
-       ExternalAudioDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
+       ExternalAudioDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
 
        bool pass ();
 
index a19f26ad79bdfde7dc66e3d795d87254e5796d43..9e5cda889ee82991929fa20f97c0d8b05f14715d 100644 (file)
@@ -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 DecodeOptions> o, Job* j)
+FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
        : Decoder (f, o, j)
        , VideoDecoder (f, o, j)
        , AudioDecoder (f, o, j)
@@ -78,7 +78,7 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions
        setup_audio ();
        setup_subtitle ();
 
-       if (!o->video_sync) {
+       if (!o.video_sync) {
                _first_video = 0;
        }
 }
@@ -239,7 +239,7 @@ FFmpegDecoder::pass ()
                        filter_and_emit_video (_frame);
                }
 
-               if (_audio_stream && _opt->decode_audio) {
+               if (_audio_stream && _opt.decode_audio) {
                        while (avcodec_decode_audio4 (_audio_codec_context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
                                int const data_size = av_samples_get_buffer_size (
                                        0, _audio_codec_context->channels, _frame->nb_samples, audio_sample_format (), 1
@@ -267,14 +267,14 @@ FFmpegDecoder::pass ()
                                _film->log()->log (String::compose ("Used only %1 bytes of %2 in packet", r, _packet.size));
                        }
 
-                       if (_opt->video_sync) {
+                       if (_opt.video_sync) {
                                out_with_sync ();
                        } else {
                                filter_and_emit_video (_frame);
                        }
                }
 
-       } else if (ffa && _packet.stream_index == ffa->id() && _opt->decode_audio) {
+       } else if (ffa && _packet.stream_index == ffa->id() && _opt.decode_audio) {
 
                int frame_finished;
                if (avcodec_decode_audio4 (_audio_codec_context, _frame, &frame_finished, &_packet) >= 0 && frame_finished) {
@@ -323,7 +323,7 @@ FFmpegDecoder::pass ()
                        }
                }
                        
-       } else if (_subtitle_stream && _packet.stream_index == _subtitle_stream->id() && _opt->decode_subtitles && _first_video) {
+       } else if (_subtitle_stream && _packet.stream_index == _subtitle_stream->id() && _opt.decode_subtitles && _first_video) {
 
                int got_subtitle;
                AVSubtitle sub;
index 2fb8675f996b243e13b097b5feba65ef8d1c9727..51b88a24a9b8c916eea670e97616a181c376292f 100644 (file)
@@ -86,7 +86,7 @@ private:
 class FFmpegDecoder : public VideoDecoder, public AudioDecoder
 {
 public:
-       FFmpegDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
+       FFmpegDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
        ~FFmpegDecoder ();
 
        float frames_per_second () const;
index 4bf6606a932ce4bd983fc37e25d65c527f14f39e..2934595ab4d7e81542309885f77d684d2806f5c9 100644 (file)
@@ -290,8 +290,8 @@ Film::make_dcp (bool transcode)
                throw MissingSettingError ("name");
        }
 
-       shared_ptr<DecodeOptions> od (new DecodeOptions);
-       od->decode_subtitles = with_subtitles ();
+       DecodeOptions od;
+       od.decode_subtitles = with_subtitles ();
 
        shared_ptr<Job> r;
 
@@ -878,8 +878,7 @@ Film::set_content (string c)
        */
 
        try {
-               shared_ptr<DecodeOptions> o (new DecodeOptions);
-               Decoders d = decoder_factory (shared_from_this(), o, 0);
+               Decoders d = decoder_factory (shared_from_this(), DecodeOptions(), 0);
                
                set_size (d.video->native_size ());
                set_frames_per_second (d.video->frames_per_second ());
@@ -1121,8 +1120,7 @@ Film::set_external_audio (vector<string> a)
                _external_audio = a;
        }
 
-       shared_ptr<DecodeOptions> o (new DecodeOptions);
-       shared_ptr<ExternalAudioDecoder> decoder (new ExternalAudioDecoder (shared_from_this(), o, 0));
+       shared_ptr<ExternalAudioDecoder> decoder (new ExternalAudioDecoder (shared_from_this(), DecodeOptions(), 0));
        if (decoder->audio_stream()) {
                _external_audio_stream = decoder->audio_stream ();
        }
index bad1fb81314e182ccbc831d19462e33e5cc3fb51..0637305402667cc07a9849e1a84057d0e26d9c95 100644 (file)
@@ -29,7 +29,7 @@ using std::cout;
 using boost::shared_ptr;
 
 ImageMagickDecoder::ImageMagickDecoder (
-       boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> o, Job* j)
+       boost::shared_ptr<Film> f, DecodeOptions o, Job* j)
        : Decoder (f, o, j)
        , VideoDecoder (f, o, j)
 {
index 6f426f308058a403330af912baa0acdc7d58b281..5dfcab6f0c92439d42b7a45c54003910da46f20d 100644 (file)
@@ -26,7 +26,7 @@ namespace Magick {
 class ImageMagickDecoder : public VideoDecoder
 {
 public:
-       ImageMagickDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
+       ImageMagickDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
 
        float frames_per_second () const {
                /* We don't know */
index 2f8733507c3d033081ec09a2d063cb9239decfdd..2cd7dffdedaff57a9ba8bc107045dc710d0bbb03 100644 (file)
 
 */
 
+#ifndef DVDOMATIC_OPTIONS_H
+#define DVDOMATIC_OPTIONS_H
+
 /** @file src/options.h
- *  @brief Options for a transcoding operation.
+ *  @brief Options for a decoding operation.
  */
 
-#include <string>
-#include <iomanip>
-#include <sstream>
-#include <boost/optional.hpp>
-#include "util.h"
-
 class DecodeOptions
 {
 public:
@@ -40,3 +37,5 @@ public:
        bool decode_subtitles;
        bool video_sync;
 };
+
+#endif
index db5c336418db5f55da763cdc1e697f4faacc07e9..23a3d9fe8cd8f9b85afaae488de68a86897831db 100644 (file)
@@ -37,12 +37,12 @@ using std::setprecision;
 using boost::shared_ptr;
 
 /** @param s Film to use.
- *  @param o Options.
+ *  @param o Decode options.
  *  @param req Job that must be completed before this job is run.
  */
-TranscodeJob::TranscodeJob (shared_ptr<Film> f, shared_ptr<const DecodeOptions> od, shared_ptr<Job> req)
+TranscodeJob::TranscodeJob (shared_ptr<Film> f, DecodeOptions o, shared_ptr<Job> req)
        : Job (f, req)
-       , _decode_opt (od)
+       , _decode_opt (o)
 {
        
 }
index aef190a64d56d8c59abcff918b9ffb0f63d4bb0a..8f78e7f6a899b8d3e5dda3f11da4adce2a1fdfcc 100644 (file)
@@ -23,9 +23,9 @@
 
 #include <boost/shared_ptr.hpp>
 #include "job.h"
+#include "options.h"
 
 class Encoder;
-class DecodeOptions;
 
 /** @class TranscodeJob
  *  @brief A job which transcodes from one format to another.
@@ -33,7 +33,7 @@ class DecodeOptions;
 class TranscodeJob : public Job
 {
 public:
-       TranscodeJob (boost::shared_ptr<Film> f, boost::shared_ptr<const DecodeOptions> od, boost::shared_ptr<Job> req);
+       TranscodeJob (boost::shared_ptr<Film> f, DecodeOptions od, boost::shared_ptr<Job> req);
        
        std::string name () const;
        void run ();
@@ -43,6 +43,6 @@ protected:
        int remaining_time () const;
 
 private:
-       boost::shared_ptr<const DecodeOptions> _decode_opt;
+       DecodeOptions _decode_opt;
        boost::shared_ptr<Encoder> _encoder;
 };
index 87a1fb3f28c8435587e7601b11de13cde3b08a30..93963761e2c3d8a7fdd74bfa4c83119b50102367 100644 (file)
@@ -48,7 +48,7 @@ using boost::dynamic_pointer_cast;
  *  @param j Job that we are running under, or 0.
  *  @param e Encoder to use.
  */
-Transcoder::Transcoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j, shared_ptr<Encoder> e)
+Transcoder::Transcoder (shared_ptr<Film> f, DecodeOptions o, Job* j, shared_ptr<Encoder> e)
        : _job (j)
        , _encoder (e)
        , _decoders (decoder_factory (f, o, j))
index ef6a438c8aa724791dc1bb1e475853cc3062aae6..786010869d35bb04f4528b3827601a62983a3a42 100644 (file)
@@ -36,7 +36,6 @@ class Gain;
 class VideoDecoder;
 class AudioDecoder;
 class DelayLine;
-class DecodeOptions;
 
 /** @class Transcoder
  *  @brief A class which takes a FilmState and some Options, then uses those to transcode a Film.
@@ -49,7 +48,7 @@ class Transcoder
 public:
        Transcoder (
                boost::shared_ptr<Film> f,
-               boost::shared_ptr<const DecodeOptions> o,
+               DecodeOptions o,
                Job* j,
                boost::shared_ptr<Encoder> e
                );
index e0a7576eeaf5c51670cf1702c6b7b4597467db15..3a803a86339a9fdf955bc59bdcb6c45cca8d05ca 100644 (file)
@@ -28,7 +28,7 @@
 using boost::shared_ptr;
 using boost::optional;
 
-VideoDecoder::VideoDecoder (shared_ptr<Film> f, shared_ptr<const DecodeOptions> o, Job* j)
+VideoDecoder::VideoDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
        : Decoder (f, o, j)
        , _video_frame (0)
        , _last_source_time (0)
index 7726d2057fe9b3eec7c5a20914d4b159ef4ce071..c0eab214016ebfb57938de0ecb39071d6239cc6a 100644 (file)
@@ -27,7 +27,7 @@
 class VideoDecoder : public VideoSource, public virtual Decoder
 {
 public:
-       VideoDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const DecodeOptions>, Job *);
+       VideoDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
 
        /** @return video frames per second, or 0 if unknown */
        virtual float frames_per_second () const = 0;
index 3d8198457db1a3c342290087fe938408d63a11c1..347531cc2c7b0fa783b19b83e1e77c30df00ea56 100644 (file)
@@ -98,10 +98,10 @@ FilmViewer::film_changed (Film::Property p)
                break;
        case Film::CONTENT:
        {
-               shared_ptr<DecodeOptions> o (new DecodeOptions);
-               o->decode_audio = false;
-               o->decode_subtitles = true;
-               o->video_sync = false;
+               DecodeOptions o;
+               o.decode_audio = false;
+               o.decode_subtitles = true;
+               o.video_sync = false;
                _decoders = decoder_factory (_film, o, 0);
                _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2, _3));
                _decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this));