summaryrefslogtreecommitdiff
path: root/src/lib/examine_content_job.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-10-21 13:09:10 +0100
committerCarl Hetherington <cth@carlh.net>2012-10-21 13:09:10 +0100
commit6b368187e7bc16cbe0e83858f35990e536c5ccc8 (patch)
treea7ee36003c7974c05a3555dc2a1cbd06dbca13ad /src/lib/examine_content_job.cc
parent5b17eb3a0b0f95417c210ac3f7c3b66b5eac483c (diff)
Partial merge of examine content and thumbnail jobs.
Diffstat (limited to 'src/lib/examine_content_job.cc')
-rw-r--r--src/lib/examine_content_job.cc42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc
index fd574e2d0..5800c6f24 100644
--- a/src/lib/examine_content_job.cc
+++ b/src/lib/examine_content_job.cc
@@ -26,6 +26,8 @@
#include "film_state.h"
#include "decoder_factory.h"
#include "decoder.h"
+#include "imagemagick_encoder.h"
+#include "transcoder.h"
using namespace std;
using namespace boost;
@@ -49,13 +51,49 @@ ExamineContentJob::name () const
void
ExamineContentJob::run ()
{
+ shared_ptr<FilmState> fs = _fs->state_copy ();
+
+ /* Decode the content to get an accurate length */
+
shared_ptr<Options> o (new Options ("", "", ""));
o->out_size = Size (512, 512);
o->apply_crop = false;
- _decoder = decoder_factory (_fs, o, this, _log, true, true);
+ descend (0.5);
+
+ _decoder = decoder_factory (fs, o, this, _log, true, true);
_decoder->go ();
-
+ fs->set_length (last_video_frame ());
+
+ ascend ();
+
+ /* Now make thumbnails for it */
+
+ descend (0.5);
+
+ try {
+ o.reset (new Options (fs->dir ("thumbs"), ".png", ""));
+ o->out_size = fs->size ();
+ o->apply_crop = false;
+ o->decode_audio = false;
+ o->decode_video_frequency = 128;
+ o->decode_subtitles = true;
+ shared_ptr<ImageMagickEncoder> e (new ImageMagickEncoder (fs, o, _log));
+ Transcoder w (fs, o, this, _log, e);
+ w.go ();
+ set_progress (1);
+ set_state (FINISHED_OK);
+
+ } catch (std::exception& e) {
+
+ ascend ();
+ set_progress (1);
+ set_error (e.what ());
+ set_state (FINISHED_ERROR);
+
+ }
+
+ ascend ();
set_progress (1);
set_state (FINISHED_OK);
}