summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-01-17 00:24:13 +0000
committerCarl Hetherington <cth@carlh.net>2013-01-17 00:24:13 +0000
commit9db7ed5f6499de903313a85d59bb70302e97e7ff (patch)
treeb2eb84e0e910af55b76c9985ba2c35309a51d8d0 /src/lib
parentf35b2a637ba82e39eb81e030c2e112185349cac5 (diff)
shared_ptr is a bit excessive for DecodeOptions.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ab_transcode_job.cc6
-rw-r--r--src/lib/ab_transcode_job.h6
-rw-r--r--src/lib/ab_transcoder.cc2
-rw-r--r--src/lib/ab_transcoder.h3
-rw-r--r--src/lib/audio_decoder.cc2
-rw-r--r--src/lib/audio_decoder.h2
-rw-r--r--src/lib/check_hashes_job.cc4
-rw-r--r--src/lib/check_hashes_job.h7
-rw-r--r--src/lib/decoder.cc4
-rw-r--r--src/lib/decoder.h8
-rw-r--r--src/lib/decoder_factory.cc2
-rw-r--r--src/lib/decoder_factory.h5
-rw-r--r--src/lib/examine_content_job.cc7
-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.cc12
-rw-r--r--src/lib/ffmpeg_decoder.h2
-rw-r--r--src/lib/film.cc10
-rw-r--r--src/lib/imagemagick_decoder.cc2
-rw-r--r--src/lib/imagemagick_decoder.h2
-rw-r--r--src/lib/options.h13
-rw-r--r--src/lib/transcode_job.cc6
-rw-r--r--src/lib/transcode_job.h6
-rw-r--r--src/lib/transcoder.cc2
-rw-r--r--src/lib/transcoder.h3
-rw-r--r--src/lib/video_decoder.cc2
-rw-r--r--src/lib/video_decoder.h2
27 files changed, 59 insertions, 65 deletions
diff --git a/src/lib/ab_transcode_job.cc b/src/lib/ab_transcode_job.cc
index 2dd8f95ad..0efd277bb 100644
--- a/src/lib/ab_transcode_job.cc
+++ b/src/lib/ab_transcode_job.cc
@@ -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 ());
diff --git a/src/lib/ab_transcode_job.h b/src/lib/ab_transcode_job.h
index 69c157651..983842038 100644
--- a/src/lib/ab_transcode_job.h
+++ b/src/lib/ab_transcode_job.h
@@ -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;
diff --git a/src/lib/ab_transcoder.cc b/src/lib/ab_transcoder.cc
index 53af43b5d..fc4fb8daa 100644
--- a/src/lib/ab_transcoder.cc
+++ b/src/lib/ab_transcoder.cc
@@ -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)
diff --git a/src/lib/ab_transcoder.h b/src/lib/ab_transcoder.h
index 7bfcb393c..58a08af04 100644
--- a/src/lib/ab_transcoder.h
+++ b/src/lib/ab_transcoder.h
@@ -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
);
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc
index 9d8de971c..a038dd2bb 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 DecodeOptions> o, Job* j)
+AudioDecoder::AudioDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
: Decoder (f, o, j)
{
diff --git a/src/lib/audio_decoder.h b/src/lib/audio_decoder.h
index 013a6327f..3bf585f4d 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 DecodeOptions>, Job *);
+ AudioDecoder (boost::shared_ptr<Film>, 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 099845d8c..2ad97c382 100644
--- a/src/lib/check_hashes_job.cc
+++ b/src/lib/check_hashes_job.cc
@@ -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)
{
diff --git a/src/lib/check_hashes_job.h b/src/lib/check_hashes_job.h
index 7e62b0e7a..5fa17382d 100644
--- a/src/lib/check_hashes_job.h
+++ b/src/lib/check_hashes_job.h
@@ -18,15 +18,14 @@
*/
#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;
};
diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc
index 7066b488e..fd0abee41 100644
--- a/src/lib/decoder.cc
+++ b/src/lib/decoder.cc
@@ -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)
diff --git a/src/lib/decoder.h b/src/lib/decoder.h
index 3908afa2f..cc4c87373 100644
--- a/src/lib/decoder.h
+++ b/src/lib/decoder.h
@@ -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;
diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc
index 2a0d828e2..c4d818f49 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 DecodeOptions> o, Job* j
+ shared_ptr<Film> f, 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 47d977ce7..445a1c8a2 100644
--- a/src/lib/decoder_factory.h
+++ b/src/lib/decoder_factory.h
@@ -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
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc
index a783cde33..69a757e2b 100644
--- a/src/lib/examine_content_job.cc
+++ b/src/lib/examine_content_job.cc
@@ -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()));
diff --git a/src/lib/external_audio_decoder.cc b/src/lib/external_audio_decoder.cc
index 25c8068b6..366051418 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 DecodeOptions> o, Job* j)
+ExternalAudioDecoder::ExternalAudioDecoder (shared_ptr<Film> f, 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 2558955eb..37e53bca7 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 DecodeOptions>, Job *);
+ ExternalAudioDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
bool pass ();
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index a19f26ad7..9e5cda889 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 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;
diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h
index 2fb8675f9..51b88a24a 100644
--- a/src/lib/ffmpeg_decoder.h
+++ b/src/lib/ffmpeg_decoder.h
@@ -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;
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 4bf6606a9..2934595ab 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -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 ();
}
diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc
index bad1fb813..063730540 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 DecodeOptions> o, Job* j)
+ boost::shared_ptr<Film> f, 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 6f426f308..5dfcab6f0 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 DecodeOptions>, Job *);
+ ImageMagickDecoder (boost::shared_ptr<Film>, DecodeOptions, Job *);
float frames_per_second () const {
/* We don't know */
diff --git a/src/lib/options.h b/src/lib/options.h
index 2f8733507..2cd7dffde 100644
--- a/src/lib/options.h
+++ b/src/lib/options.h
@@ -17,16 +17,13 @@
*/
+#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
diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc
index db5c33641..23a3d9fe8 100644
--- a/src/lib/transcode_job.cc
+++ b/src/lib/transcode_job.cc
@@ -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)
{
}
diff --git a/src/lib/transcode_job.h b/src/lib/transcode_job.h
index aef190a64..8f78e7f6a 100644
--- a/src/lib/transcode_job.h
+++ b/src/lib/transcode_job.h
@@ -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;
};
diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc
index 87a1fb3f2..93963761e 100644
--- a/src/lib/transcoder.cc
+++ b/src/lib/transcoder.cc
@@ -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))
diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h
index ef6a438c8..786010869 100644
--- a/src/lib/transcoder.h
+++ b/src/lib/transcoder.h
@@ -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
);
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc
index e0a7576ee..3a803a863 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 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)
diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h
index 7726d2057..c0eab2140 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 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;