diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-10-25 01:40:24 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-10-25 01:40:24 +0100 |
| commit | 8c3eac75cc3717371dce1132bf10093f5ec3a26f (patch) | |
| tree | 70611b7b8ac166efd84715faaca7b5fe95b03993 /src/lib | |
| parent | 5ef9c8005218793b1a02bc6f0ecdc68184b1a603 (diff) | |
Fix up ze tests.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 59 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 4 |
2 files changed, 42 insertions, 21 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index fd8b90d99..e8a23377d 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -907,39 +907,55 @@ Film::set_content (string c) c = c.substr (_directory.length() + 1); } + string old_content; + { boost::mutex::scoped_lock lm (_state_mutex); if (c == _content) { return; } + old_content = _content; _content = c; } - + /* Create a temporary decoder so that we can get information about the content. */ - - shared_ptr<Options> o (new Options ("", "", "")); - o->out_size = Size (1024, 1024); - - 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 ()); - set_audio_sample_rate (d->audio_sample_rate ()); - set_has_subtitles (d->has_subtitles ()); - set_audio_streams (d->audio_streams ()); - set_subtitle_streams (d->subtitle_streams ()); - set_audio_stream (audio_streams().empty() ? -1 : 0); - set_subtitle_stream (subtitle_streams().empty() ? -1 : 0); - - signal_changed (CONTENT); + try { + shared_ptr<Options> o (new Options ("", "", "")); + o->out_size = Size (1024, 1024); + + 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 ()); + set_audio_sample_rate (d->audio_sample_rate ()); + set_has_subtitles (d->has_subtitles ()); + set_audio_streams (d->audio_streams ()); + set_subtitle_streams (d->subtitle_streams ()); + set_audio_stream (audio_streams().empty() ? -1 : 0); + set_subtitle_stream (subtitle_streams().empty() ? -1 : 0); + + { + boost::mutex::scoped_lock lm (_state_mutex); + _content = c; + } + + signal_changed (CONTENT); + + set_content_digest (md5_digest (content_path ())); + + examine_content (); - set_content_digest (md5_digest (content_path ())); + } catch (...) { - examine_content (); + boost::mutex::scoped_lock lm (_state_mutex); + _content = old_content; + throw; + + } } void @@ -1336,7 +1352,10 @@ Film::signal_changed (Property p) boost::mutex::scoped_lock lm (_state_mutex); _dirty = true; } - ui_signaller->emit (boost::bind (boost::ref (Changed), p)); + + if (ui_signaller) { + ui_signaller->emit (boost::bind (boost::ref (Changed), p)); + } } int diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 507bf6791..fa02fd370 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -124,7 +124,9 @@ JobManager::scheduler () if (active_jobs != _last_active_jobs) { _last_active_jobs = active_jobs; - ui_signaller->emit (boost::bind (boost::ref (ActiveJobsChanged), active_jobs)); + if (ui_signaller) { + ui_signaller->emit (boost::bind (boost::ref (ActiveJobsChanged), active_jobs)); + } } dvdomatic_sleep (1); |
