summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-11-04 17:09:43 +0000
committerCarl Hetherington <cth@carlh.net>2012-11-04 17:09:43 +0000
commit752bba7eb39d6f775a3ecb3ca3e19d7884626a4e (patch)
tree235b558aec10da89dca7484686ff035cbef4811c /src
parentac712b45bad948fc8f38cf4fa48a529f2024c7f5 (diff)
Revert "Remove minimal flag."
This reverts commit ac712b45bad948fc8f38cf4fa48a529f2024c7f5.
Diffstat (limited to 'src')
-rw-r--r--src/lib/decoder.cc10
-rw-r--r--src/lib/decoder.h7
-rw-r--r--src/lib/decoder_factory.cc10
-rw-r--r--src/lib/decoder_factory.h5
-rw-r--r--src/lib/examine_content_job.cc2
-rw-r--r--src/lib/ffmpeg_decoder.cc4
-rw-r--r--src/lib/ffmpeg_decoder.h2
-rw-r--r--src/lib/film.cc2
-rw-r--r--src/lib/imagemagick_decoder.cc4
-rw-r--r--src/lib/imagemagick_decoder.h2
-rw-r--r--src/lib/tiff_decoder.cc6
-rw-r--r--src/lib/tiff_decoder.h2
12 files changed, 38 insertions, 18 deletions
diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc
index 34c04b260..ee2beb3f3 100644
--- a/src/lib/decoder.cc
+++ b/src/lib/decoder.cc
@@ -46,11 +46,14 @@ using boost::shared_ptr;
/** @param f Film.
* @param o Options.
* @param j Job that we are running within, or 0
+ * @param minimal true to do the bare minimum of work; just run through the content. Useful for acquiring
+ * accurate frame counts as quickly as possible. This generates no video or audio output.
*/
-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 Options> o, Job* j, bool minimal)
: _film (f)
, _opt (o)
, _job (j)
+ , _minimal (minimal)
, _video_frame_index (0)
, _delay_line (0)
, _delay_in_bytes (0)
@@ -247,6 +250,11 @@ Decoder::process_video (AVFrame* frame)
{
assert (_film->length());
+ if (_minimal) {
+ ++_video_frame_index;
+ return;
+ }
+
/* Use Film::length here as our one may be wrong */
if (_opt->decode_video_skip != 0 && (_video_frame_index % _opt->decode_video_skip) != 0) {
diff --git a/src/lib/decoder.h b/src/lib/decoder.h
index fe8149af9..5750858df 100644
--- a/src/lib/decoder.h
+++ b/src/lib/decoder.h
@@ -52,7 +52,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 Options>, Job *, bool);
virtual ~Decoder ();
/* Methods to query our input video */
@@ -121,6 +121,11 @@ protected:
/** associated Job, or 0 */
Job* _job;
+ /** true to do the bare minimum of work; just run through the content. Useful for acquiring
+ * accurate frame counts as quickly as possible. This generates no video or audio output.
+ */
+ bool _minimal;
+
private:
void emit_audio (uint8_t* data, int size);
diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc
index c3a6965e6..287bba0da 100644
--- a/src/lib/decoder_factory.cc
+++ b/src/lib/decoder_factory.cc
@@ -31,16 +31,18 @@ using std::string;
using boost::shared_ptr;
shared_ptr<Decoder>
-decoder_factory (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
+decoder_factory (
+ shared_ptr<Film> f, shared_ptr<const Options> o, Job* j, bool minimal = false
+ )
{
if (boost::filesystem::is_directory (f->content_path ())) {
/* Assume a directory contains TIFFs */
- return shared_ptr<Decoder> (new TIFFDecoder (f, o, j));
+ return shared_ptr<Decoder> (new TIFFDecoder (f, o, j, minimal));
}
if (f->content_type() == STILL) {
- return shared_ptr<Decoder> (new ImageMagickDecoder (f, o, j));
+ return shared_ptr<Decoder> (new ImageMagickDecoder (f, o, j, minimal));
}
- return shared_ptr<Decoder> (new FFmpegDecoder (f, o, j));
+ return shared_ptr<Decoder> (new FFmpegDecoder (f, o, j, minimal));
}
diff --git a/src/lib/decoder_factory.h b/src/lib/decoder_factory.h
index 3c16d0ec0..b86c60c70 100644
--- a/src/lib/decoder_factory.h
+++ b/src/lib/decoder_factory.h
@@ -25,5 +25,8 @@ class Decoder;
class Film;
class Options;
class Job;
+class Log;
-extern boost::shared_ptr<Decoder> decoder_factory (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+extern boost::shared_ptr<Decoder> decoder_factory (
+ boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *, bool minimal = false
+ );
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc
index e71ab361a..ec0d2409b 100644
--- a/src/lib/examine_content_job.cc
+++ b/src/lib/examine_content_job.cc
@@ -66,7 +66,7 @@ ExamineContentJob::run ()
descend (0.5);
- _decoder = decoder_factory (_film, o, this);
+ _decoder = decoder_factory (_film, o, this, true);
_decoder->go ();
_film->set_length (_decoder->video_frame_index());
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 77e8f365f..f0e652cbe 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -55,8 +55,8 @@ using std::vector;
using std::stringstream;
using boost::shared_ptr;
-FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j)
- : Decoder (f, o, j)
+FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, shared_ptr<const Options> o, Job* j, bool minimal)
+ : Decoder (f, o, j, minimal)
, _format_context (0)
, _video_stream (-1)
, _audio_stream (-1)
diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h
index 0265f7478..fbd9e5255 100644
--- a/src/lib/ffmpeg_decoder.h
+++ b/src/lib/ffmpeg_decoder.h
@@ -52,7 +52,7 @@ class Log;
class FFmpegDecoder : public Decoder
{
public:
- FFmpegDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ FFmpegDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *, bool);
~FFmpegDecoder ();
/* Methods to query our input video */
diff --git a/src/lib/film.cc b/src/lib/film.cc
index cd5fc6535..cacd30764 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -877,7 +877,7 @@ Film::set_content (string c)
shared_ptr<Options> o (new Options ("", "", ""));
o->out_size = Size (1024, 1024);
- shared_ptr<Decoder> d = decoder_factory (shared_from_this(), o, 0);
+ shared_ptr<Decoder> d = decoder_factory (shared_from_this(), o, 0, 0);
set_size (d->native_size ());
set_frames_per_second (d->frames_per_second ());
diff --git a/src/lib/imagemagick_decoder.cc b/src/lib/imagemagick_decoder.cc
index cc2fd9d23..81349beca 100644
--- a/src/lib/imagemagick_decoder.cc
+++ b/src/lib/imagemagick_decoder.cc
@@ -27,8 +27,8 @@ using namespace std;
using namespace boost;
ImageMagickDecoder::ImageMagickDecoder (
- boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j)
- : Decoder (f, o, j)
+ boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j, bool minimal)
+ : Decoder (f, o, j, minimal)
, _done (false)
{
_magick_image = new Magick::Image (_film->content_path ());
diff --git a/src/lib/imagemagick_decoder.h b/src/lib/imagemagick_decoder.h
index b7ab9af18..85bcf4c5b 100644
--- a/src/lib/imagemagick_decoder.h
+++ b/src/lib/imagemagick_decoder.h
@@ -26,7 +26,7 @@ namespace Magick {
class ImageMagickDecoder : public Decoder
{
public:
- ImageMagickDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ ImageMagickDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *, bool);
float frames_per_second () const {
return static_frames_per_second ();
diff --git a/src/lib/tiff_decoder.cc b/src/lib/tiff_decoder.cc
index 7cca511dd..2c050def6 100644
--- a/src/lib/tiff_decoder.cc
+++ b/src/lib/tiff_decoder.cc
@@ -44,9 +44,11 @@ using namespace boost;
/** @param f Our Film.
* @param o Options.
* @param j Job that we are associated with, or 0.
+ * @param minimal true to do the bare minimum of work; just run through the content. Useful for acquiring
+ * accurate frame counts as quickly as possible. This generates no video or audio output.
*/
-TIFFDecoder::TIFFDecoder (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j)
- : Decoder (f, o, j)
+TIFFDecoder::TIFFDecoder (boost::shared_ptr<Film> f, boost::shared_ptr<const Options> o, Job* j, bool minimal)
+ : Decoder (f, o, j, minimal)
{
string const dir = _film->content_path ();
diff --git a/src/lib/tiff_decoder.h b/src/lib/tiff_decoder.h
index 1c33443cf..c02a1d03d 100644
--- a/src/lib/tiff_decoder.h
+++ b/src/lib/tiff_decoder.h
@@ -42,7 +42,7 @@ class Image;
class TIFFDecoder : public Decoder
{
public:
- TIFFDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *);
+ TIFFDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *, bool);
/* Methods to query our input video */
float frames_per_second () const;