diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-11-05 15:58:50 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-11-05 15:58:50 +0000 |
| commit | f75cc4ebbffea7a7953af20e8a2ea124767bf949 (patch) | |
| tree | b483ddcf71280b73bdc11bc4865748e76b3857ff | |
| parent | 994ef64ef0cecd69898ab81432e5c5efef7ef97b (diff) | |
Various fixes to make tests pass again.
| -rw-r--r-- | src/lib/playlist.cc | 8 | ||||
| -rw-r--r-- | src/lib/util.cc | 15 | ||||
| -rw-r--r-- | test/film_metadata_test.cc | 10 | ||||
| -rw-r--r-- | test/test.cc | 59 | ||||
| -rw-r--r-- | test/test.h | 1 | ||||
| -rw-r--r-- | test/wscript | 6 |
6 files changed, 83 insertions, 16 deletions
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 621b99dd7..c54b24c1c 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -82,14 +82,14 @@ Playlist::maybe_sequence_video () _sequencing_video = true; ContentList cl = _content; - Time last = 0; + Time next = 0; for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) { if (!dynamic_pointer_cast<VideoContent> (*i)) { continue; } - (*i)->set_position (last); - last = (*i)->end (); + (*i)->set_position (next); + next = (*i)->end() + 1; } /* This won't change order, so it does not need a sort */ @@ -260,7 +260,7 @@ Playlist::length () const { Time len = 0; for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) { - len = max (len, (*i)->end ()); + len = max (len, (*i)->end() + 1); } return len; diff --git a/src/lib/util.cc b/src/lib/util.cc index 15efcc099..96b834fcc 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -763,12 +763,17 @@ FrameRateConversion::FrameRateConversion (float source, int dcp) , repeat (1) , change_speed (false) { - if (source > (dcp * 2)) { + if (fabs (source / 2.0 - dcp) < fabs (source - dcp)) { + /* The difference between source and DCP frame rate will be lower + (i.e. better) if we skip. + */ skip = true; - } - - if (source < dcp) { - repeat = floor (dcp / source); + } else if (fabs (source * 2 - dcp) < fabs (source - dcp)) { + /* The difference between source and DCP frame rate would be better + if we repeated each frame once; it may be better still if we + repeated more than once. Work out the required repeat. + */ + repeat = round (dcp / source); } change_speed = !about_equal (source * factor(), dcp); diff --git a/test/film_metadata_test.cc b/test/film_metadata_test.cc index 324787f19..1f06aa538 100644 --- a/test/film_metadata_test.cc +++ b/test/film_metadata_test.cc @@ -24,9 +24,11 @@ #include "lib/film.h" #include "lib/dcp_content_type.h" #include "lib/ratio.h" +#include "test.h" using std::string; using std::stringstream; +using std::list; using boost::shared_ptr; BOOST_AUTO_TEST_CASE (film_metadata_test) @@ -48,9 +50,9 @@ BOOST_AUTO_TEST_CASE (film_metadata_test) f->set_j2k_bandwidth (200000000); f->write_metadata (); - stringstream s; - s << "diff -u test/data/metadata.xml.ref " << test_film << "/metadata.xml"; - BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); + list<string> ignore; + ignore.push_back ("Key"); + check_xml ("test/data/metadata.xml.ref", test_film + "/metadata.xml", ignore); shared_ptr<Film> g (new Film (test_film)); g->read_metadata (); @@ -60,5 +62,5 @@ BOOST_AUTO_TEST_CASE (film_metadata_test) BOOST_CHECK_EQUAL (g->container(), Ratio::from_id ("185")); g->write_metadata (); - BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0); + check_xml ("test/data/metadata.xml.ref", test_film + "/metadata.xml", ignore); } diff --git a/test/test.cc b/test/test.cc index 154510738..1309439d2 100644 --- a/test/test.cc +++ b/test/test.cc @@ -19,6 +19,7 @@ #include <vector> #include <list> +#include <libxml++/libxml++.h> #include <libdcp/dcp.h> #include "lib/config.h" #include "lib/util.h" @@ -148,6 +149,64 @@ check_dcp (string ref, string check) } void +check_xml (xmlpp::Element* ref, xmlpp::Element* test, list<string> ignore) +{ + BOOST_CHECK_EQUAL (ref->get_name (), test->get_name ()); + BOOST_CHECK_EQUAL (ref->get_namespace_prefix (), test->get_namespace_prefix ()); + + if (find (ignore.begin(), ignore.end(), ref->get_name()) != ignore.end ()) { + return; + } + + xmlpp::Element::NodeList ref_children = ref->get_children (); + xmlpp::Element::NodeList test_children = test->get_children (); + BOOST_CHECK_EQUAL (ref_children.size (), test_children.size ()); + + xmlpp::Element::NodeList::iterator k = ref_children.begin (); + xmlpp::Element::NodeList::iterator l = test_children.begin (); + while (k != ref_children.end ()) { + + /* XXX: should be doing xmlpp::EntityReference, xmlpp::XIncludeEnd, xmlpp::XIncludeStart */ + + xmlpp::Element* ref_el = dynamic_cast<xmlpp::Element*> (*k); + xmlpp::Element* test_el = dynamic_cast<xmlpp::Element*> (*l); + BOOST_CHECK ((ref_el && test_el) || (!ref_el && !test_el)); + if (ref_el && test_el) { + check_xml (ref_el, test_el, ignore); + } + + xmlpp::ContentNode* ref_cn = dynamic_cast<xmlpp::ContentNode*> (*k); + xmlpp::ContentNode* test_cn = dynamic_cast<xmlpp::ContentNode*> (*l); + BOOST_CHECK ((ref_cn && test_cn) || (!ref_cn && !test_cn)); + if (ref_cn && test_cn) { + BOOST_CHECK_EQUAL (ref_cn->get_content(), test_cn->get_content ()); + } + + xmlpp::Attribute* ref_at = dynamic_cast<xmlpp::Attribute*> (*k); + xmlpp::Attribute* test_at = dynamic_cast<xmlpp::Attribute*> (*l); + BOOST_CHECK ((ref_at && test_at) || (!ref_at && !test_at)); + if (ref_at && test_at) { + BOOST_CHECK_EQUAL (ref_at->get_name(), test_at->get_name ()); + BOOST_CHECK_EQUAL (ref_at->get_value(), test_at->get_value ()); + } + + ++k; + ++l; + } +} + +void +check_xml (boost::filesystem::path ref, boost::filesystem::path test, list<string> ignore) +{ + xmlpp::DomParser* ref_parser = new xmlpp::DomParser (ref.string ()); + xmlpp::Element* ref_root = ref_parser->get_document()->get_root_node (); + xmlpp::DomParser* test_parser = new xmlpp::DomParser (test.string ()); + xmlpp::Element* test_root = test_parser->get_document()->get_root_node (); + + check_xml (ref_root, test_root, ignore); +} + +void wait_for_jobs () { JobManager* jm = JobManager::instance (); diff --git a/test/test.h b/test/test.h index 5c37f82d8..e49dfc276 100644 --- a/test/test.h +++ b/test/test.h @@ -24,4 +24,5 @@ class Film; extern void wait_for_jobs (); extern boost::shared_ptr<Film> new_test_film (std::string); extern void check_dcp (std::string, std::string); +extern void check_xml (boost::filesystem::path, boost::filesystem::path, std::list<std::string>); extern boost::filesystem::path test_film_dir (std::string); diff --git a/test/wscript b/test/wscript index 7c7aee733..b40b69475 100644 --- a/test/wscript +++ b/test/wscript @@ -16,6 +16,9 @@ def build(bld): obj.use = 'libdcpomatic' obj.source = """ test.cc + scaling_test.cc + film_metadata_test.cc + frame_rate_test.cc colour_conversion_test.cc audio_delay_test.cc silence_padding_test.cc @@ -24,15 +27,12 @@ def build(bld): ffmpeg_audio_test.cc threed_test.cc play_test.cc - frame_rate_test.cc ffmpeg_pts_offset.cc ffmpeg_examiner_test.cc black_fill_test.cc - scaling_test.cc ratio_test.cc pixel_formats_test.cc make_black_test.cc - film_metadata_test.cc stream_test.cc util_test.cc ffmpeg_dcp_test.cc |
