From: Carl Hetherington Date: Tue, 5 Nov 2013 15:58:50 +0000 (+0000) Subject: Various fixes to make tests pass again. X-Git-Tag: v2.0.48~1202^2~14 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=f75cc4ebbffea7a7953af20e8a2ea124767bf949;hp=994ef64ef0cecd69898ab81432e5c5efef7ef97b Various fixes to make tests pass again. --- 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 (*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 ignore; + ignore.push_back ("Key"); + check_xml ("test/data/metadata.xml.ref", test_film + "/metadata.xml", ignore); shared_ptr 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 #include +#include #include #include "lib/config.h" #include "lib/util.h" @@ -147,6 +148,64 @@ check_dcp (string ref, string check) BOOST_CHECK (ref_dcp.equals (check_dcp, options, boost::bind (note, _1, _2))); } +void +check_xml (xmlpp::Element* ref, xmlpp::Element* test, list 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 (*k); + xmlpp::Element* test_el = dynamic_cast (*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 (*k); + xmlpp::ContentNode* test_cn = dynamic_cast (*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 (*k); + xmlpp::Attribute* test_at = dynamic_cast (*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 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 () { 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 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); 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