X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexamine_content_job.cc;h=1e263ffa585f97b413bd4cbe84db6c77c65a7ad3;hb=abd57c6c2e8526eac93e9d0c9bd0b6080de1e6fa;hp=d91fc2136e8e3545b32b57e201de8eb3e731712a;hpb=4cb33e432c7070f59c3ee3fbeb0b5c8755bba3bd;p=dcpomatic.git diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc index d91fc2136..1e263ffa5 100644 --- a/src/lib/examine_content_job.cc +++ b/src/lib/examine_content_job.cc @@ -21,20 +21,22 @@ * @brief A class to run through content at high speed to find its length. */ +#include #include "examine_content_job.h" #include "options.h" -#include "film_state.h" #include "decoder_factory.h" #include "decoder.h" #include "imagemagick_encoder.h" #include "transcoder.h" #include "log.h" +#include "film.h" -using namespace std; -using namespace boost; +using std::string; +using std::vector; +using boost::shared_ptr; -ExamineContentJob::ExamineContentJob (shared_ptr fs, Log* l, shared_ptr req) - : Job (fs, l, req) +ExamineContentJob::ExamineContentJob (shared_ptr f, shared_ptr req) + : Job (f, req) { } @@ -46,18 +48,16 @@ ExamineContentJob::~ExamineContentJob () string ExamineContentJob::name () const { - if (_fs->name().empty ()) { + if (_film->name().empty ()) { return "Examine content"; } - return String::compose ("Examine content of %1", _fs->name()); + return String::compose ("Examine content of %1", _film->name()); } void ExamineContentJob::run () { - shared_ptr fs = _fs->state_copy (); - /* Decode the content to get an accurate length */ shared_ptr o (new Options ("", "", "")); @@ -66,14 +66,12 @@ ExamineContentJob::run () descend (0.5); - _decoder = decoder_factory (fs, o, this, _log, true, true); + _decoder = decoder_factory (_film, o, this, true, true); _decoder->go (); - fs->set_length (_decoder->last_video_frame ()); - fs->set_audio_delay (-_decoder->audio_to_discard ()); + _film->set_length (_decoder->last_video_frame ()); - _log->log (String::compose ("Video length is %1 frames", _decoder->last_video_frame())); - _log->log (String::compose ("%1ms of audio to discard", _decoder->audio_to_discard())); + _film->log()->log (String::compose ("Video length is %1 frames", _decoder->last_video_frame())); ascend (); @@ -82,14 +80,14 @@ ExamineContentJob::run () descend (0.5); try { - o.reset (new Options (fs->dir ("thumbs"), ".png", "")); - o->out_size = fs->size (); + o.reset (new Options (_film->dir ("thumbs"), ".png", "")); + o->out_size = _film->size (); o->apply_crop = false; o->decode_audio = false; o->decode_video_frequency = 128; o->decode_subtitles = true; - shared_ptr e (new ImageMagickEncoder (fs, o, _log)); - Transcoder w (fs, o, this, _log, e); + shared_ptr e (new ImageMagickEncoder (_film, o)); + Transcoder w (_film, o, this, e); w.go (); } catch (std::exception& e) { @@ -102,6 +100,28 @@ ExamineContentJob::run () } + string const tdir = _film->dir ("thumbs"); + vector thumbs; + + for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator (tdir); i != boost::filesystem::directory_iterator(); ++i) { + + /* Aah, the sweet smell of progress */ +#if BOOST_FILESYSTEM_VERSION == 3 + string const l = boost::filesystem::path(*i).leaf().generic_string(); +#else + string const l = i->leaf (); +#endif + + size_t const d = l.find (".png"); + size_t const t = l.find (".tmp"); + if (d != string::npos && t == string::npos) { + thumbs.push_back (atoi (l.substr (0, d).c_str())); + } + } + + sort (thumbs.begin(), thumbs.end()); + _film->set_thumbs (thumbs); + ascend (); set_progress (1); set_state (FINISHED_OK);