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 | |
| parent | 5ef9c8005218793b1a02bc6f0ecdc68184b1a603 (diff) | |
Fix up ze tests.
| -rw-r--r-- | src/lib/film.cc | 59 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 4 | ||||
| -rw-r--r-- | test/test.cc | 130 |
3 files changed, 107 insertions, 86 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); diff --git a/test/test.cc b/test/test.cc index ddb6cbb55..cf09a7e4a 100644 --- a/test/test.cc +++ b/test/test.cc @@ -72,48 +72,48 @@ BOOST_AUTO_TEST_CASE (film_metadata_test) BOOST_CHECK_THROW (new Film ("build/test/film", true), OpenFileError); - Film f (test_film, false); - BOOST_CHECK (f.format() == 0); - BOOST_CHECK (f.dcp_content_type() == 0); - BOOST_CHECK (f.filters ().empty()); - - f.set_name ("fred"); - BOOST_CHECK_THROW (f.set_content ("jim"), OpenFileError); - f.set_dcp_content_type (DCPContentType::from_pretty_name ("Short")); - f.set_format (Format::from_nickname ("Flat")); - f.set_left_crop (1); - f.set_right_crop (2); - f.set_top_crop (3); - f.set_bottom_crop (4); + shared_ptr<Film> f (new Film (test_film, false)); + BOOST_CHECK (f->format() == 0); + BOOST_CHECK (f->dcp_content_type() == 0); + BOOST_CHECK (f->filters ().empty()); + + f->set_name ("fred"); + BOOST_CHECK_THROW (f->set_content ("jim"), OpenFileError); + f->set_dcp_content_type (DCPContentType::from_pretty_name ("Short")); + f->set_format (Format::from_nickname ("Flat")); + f->set_left_crop (1); + f->set_right_crop (2); + f->set_top_crop (3); + f->set_bottom_crop (4); vector<Filter const *> f_filters; f_filters.push_back (Filter::from_id ("pphb")); f_filters.push_back (Filter::from_id ("unsharp")); - f.set_filters (f_filters); - f.set_dcp_frames (42); - f.set_dcp_ab (true); - f.write_metadata (); + f->set_filters (f_filters); + f->set_dcp_frames (42); + f->set_dcp_ab (true); + f->write_metadata (); stringstream s; s << "diff -u test/metadata.ref " << test_film << "/metadata"; BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); - Film g (test_film, true); + shared_ptr<Film> g (new Film (test_film, true)); - BOOST_CHECK_EQUAL (g.name(), "fred"); - BOOST_CHECK_EQUAL (g.dcp_content_type(), DCPContentType::from_pretty_name ("Short")); - BOOST_CHECK_EQUAL (g.format(), Format::from_nickname ("Flat")); - BOOST_CHECK_EQUAL (g.crop().left, 1); - BOOST_CHECK_EQUAL (g.crop().right, 2); - BOOST_CHECK_EQUAL (g.crop().top, 3); - BOOST_CHECK_EQUAL (g.crop().bottom, 4); - vector<Filter const *> g_filters = g.filters (); + BOOST_CHECK_EQUAL (g->name(), "fred"); + BOOST_CHECK_EQUAL (g->dcp_content_type(), DCPContentType::from_pretty_name ("Short")); + BOOST_CHECK_EQUAL (g->format(), Format::from_nickname ("Flat")); + BOOST_CHECK_EQUAL (g->crop().left, 1); + BOOST_CHECK_EQUAL (g->crop().right, 2); + BOOST_CHECK_EQUAL (g->crop().top, 3); + BOOST_CHECK_EQUAL (g->crop().bottom, 4); + vector<Filter const *> g_filters = g->filters (); BOOST_CHECK_EQUAL (g_filters.size(), 2); BOOST_CHECK_EQUAL (g_filters.front(), Filter::from_id ("pphb")); BOOST_CHECK_EQUAL (g_filters.back(), Filter::from_id ("unsharp")); - BOOST_CHECK_EQUAL (g.dcp_frames(), 42); - BOOST_CHECK_EQUAL (g.dcp_ab(), true); + BOOST_CHECK_EQUAL (g->dcp_frames(), 42); + BOOST_CHECK_EQUAL (g->dcp_ab(), true); - g.write_metadata (); + g->write_metadata (); BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); } @@ -262,17 +262,17 @@ BOOST_AUTO_TEST_CASE (md5_digest_test) BOOST_AUTO_TEST_CASE (paths_test) { - Film f ("build/test/film4", false); - f.set_directory ("build/test/a/b/c/d/e"); + shared_ptr<Film> f (new Film ("build/test/film4", false)); + f->set_directory ("build/test/a/b/c/d/e"); vector<int> thumbs; thumbs.push_back (42); - f.set_thumbs (thumbs); - BOOST_CHECK_EQUAL (f.thumb_file (0), "build/test/a/b/c/d/e/thumbs/00000042.png"); + f->set_thumbs (thumbs); + BOOST_CHECK_EQUAL (f->thumb_file (0), "build/test/a/b/c/d/e/thumbs/00000042.png"); - f._content = "/foo/bar/baz"; - BOOST_CHECK_EQUAL (f.content_path(), "/foo/bar/baz"); - f._content = "foo/bar/baz"; - BOOST_CHECK_EQUAL (f.content_path(), "build/test/a/b/c/d/e/foo/bar/baz"); + f->_content = "/foo/bar/baz"; + BOOST_CHECK_EQUAL (f->content_path(), "/foo/bar/baz"); + f->_content = "foo/bar/baz"; + BOOST_CHECK_EQUAL (f->content_path(), "build/test/a/b/c/d/e/foo/bar/baz"); } void @@ -366,12 +366,12 @@ BOOST_AUTO_TEST_CASE (make_dcp_test) boost::filesystem::remove_all (test_film); } - Film film (test_film, false); - film.set_name ("test_film2"); - film.set_content ("../../../test/test.mp4"); - film.set_format (Format::from_nickname ("Flat")); - film.set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); - film.make_dcp (true); + shared_ptr<Film> film (new Film (test_film, false)); + film->set_name ("test_film2"); + film->set_content ("../../../test/test.mp4"); + film->set_format (Format::from_nickname ("Flat")); + film->set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); + film->make_dcp (true); while (JobManager::instance()->work_to_do ()) { dvdomatic_sleep (1); @@ -388,14 +388,14 @@ BOOST_AUTO_TEST_CASE (make_dcp_with_range_test) boost::filesystem::remove_all (test_film); } - Film film (test_film, false); - film.set_name ("test_film3"); - film.set_content ("../../../test/test.mp4"); - film.examine_content (); - film.set_format (Format::from_nickname ("Flat")); - film.set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); - film.set_dcp_frames (42); - film.make_dcp (true); + shared_ptr<Film> film (new Film (test_film, false)); + film->set_name ("test_film3"); + film->set_content ("../../../test/test.mp4"); + film->examine_content (); + film->set_format (Format::from_nickname ("Flat")); + film->set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); + film->set_dcp_frames (42); + film->make_dcp (true); while (JobManager::instance()->work_to_do() && !JobManager::instance()->errors()) { dvdomatic_sleep (1); @@ -406,25 +406,25 @@ BOOST_AUTO_TEST_CASE (make_dcp_with_range_test) BOOST_AUTO_TEST_CASE (audio_sampling_rate_test) { - Film f ("build/test/test_film5", false); - f.set_frames_per_second (24); + shared_ptr<Film> f (new Film ("build/test/test_film5", false)); + f->set_frames_per_second (24); - f.set_audio_sample_rate (48000); - BOOST_CHECK_EQUAL (f.target_audio_sample_rate(), 48000); + f->set_audio_sample_rate (48000); + BOOST_CHECK_EQUAL (f->target_audio_sample_rate(), 48000); - f.set_audio_sample_rate (44100); - BOOST_CHECK_EQUAL (f.target_audio_sample_rate(), 48000); + f->set_audio_sample_rate (44100); + BOOST_CHECK_EQUAL (f->target_audio_sample_rate(), 48000); - f.set_audio_sample_rate (80000); - BOOST_CHECK_EQUAL (f.target_audio_sample_rate(), 96000); + f->set_audio_sample_rate (80000); + BOOST_CHECK_EQUAL (f->target_audio_sample_rate(), 96000); - f.set_frames_per_second (23.976); - f.set_audio_sample_rate (48000); - BOOST_CHECK_EQUAL (f.target_audio_sample_rate(), 47952); + f->set_frames_per_second (23.976); + f->set_audio_sample_rate (48000); + BOOST_CHECK_EQUAL (f->target_audio_sample_rate(), 47952); - f.set_frames_per_second (29.97); - f.set_audio_sample_rate (48000); - BOOST_CHECK_EQUAL (f.target_audio_sample_rate(), 47952); + f->set_frames_per_second (29.97); + f->set_audio_sample_rate (48000); + BOOST_CHECK_EQUAL (f->target_audio_sample_rate(), 47952); } class TestJob : public Job |
