diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-12-16 14:53:22 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-12-16 14:53:22 +0000 |
| commit | aa230169f8b59b7cb2da9a3bbb8ce5f7600285c0 (patch) | |
| tree | 5cde52f6c50b9a56597e0f6ebad1f8e4aa5e1c8d /src/lib/examine_content_job.cc | |
| parent | 7fd2aff3af82d3e573934d046be26b72a67a93e6 (diff) | |
| parent | 3ce37f08e98b9c3a238fb1c9a6184fb7fd4e5667 (diff) | |
Merge speed-up branch.
Diffstat (limited to 'src/lib/examine_content_job.cc')
| -rw-r--r-- | src/lib/examine_content_job.cc | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc index dc2fc305c..70a04b825 100644 --- a/src/lib/examine_content_job.cc +++ b/src/lib/examine_content_job.cc @@ -59,30 +59,46 @@ ExamineContentJob::name () const void ExamineContentJob::run () { - /* Decode the content to get an accurate length */ + descend (1); - /* We don't want to use any existing length here, as progress - will be messed up. + /* Set the film's length to either + a) a length judged by running through the content or + b) the length from a decoder's header. */ - _film->unset_length (); - _film->set_crop (Crop ()); + if (!_film->trust_content_header()) { + /* Decode the content to get an accurate length */ + + /* We don't want to use any existing length here, as progress + will be messed up. + */ + _film->unset_length (); + _film->set_crop (Crop ()); + + shared_ptr<DecodeOptions> o (new DecodeOptions); + o->decode_audio = false; + + Decoders decoders = decoder_factory (_film, o, this); + + set_progress_unknown (); + while (!decoders.video->pass()) { + /* keep going */ + } + + _film->set_length (decoders.video->video_frame()); + + _film->log()->log (String::compose ("Video length examined as %1 frames", _film->length().get())); + + } else { + + /* 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); + _film->set_length (d.video->length()); - shared_ptr<DecodeOptions> o (new DecodeOptions); - o->decode_audio = false; - - descend (1); - - Decoders decoders = decoder_factory (_film, o, this); - - set_progress_unknown (); - while (!decoders.video->pass()) { - /* keep going */ + _film->log()->log (String::compose ("Video length obtained from header as %1 frames", _film->length().get())); } - _film->set_length (decoders.video->video_frame()); - - _film->log()->log (String::compose ("Video length is %1 frames", _film->length())); - ascend (); set_progress (1); set_state (FINISHED_OK); |
