Support encoding of MPEG2 DCPs.
[dcpomatic.git] / test / test.cc
index bf008998abca27c36106ae16d991da552b0a9f43..1d5eb9083e92267db462b7de1cc777d9b2ab2253 100644 (file)
@@ -47,8 +47,8 @@
 #include <dcp/dcp.h>
 #include <dcp/equality_options.h>
 #include <dcp/filesystem.h>
-#include <dcp/mono_picture_asset.h>
-#include <dcp/mono_picture_frame.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/mono_j2k_picture_frame.h>
 #include <dcp/openjpeg_image.h>
 #include <dcp/reel.h>
 #include <dcp/reel_picture_asset.h>
@@ -122,7 +122,7 @@ setup_test_config ()
        Config::instance()->set_server_port_base (61921);
        Config::instance()->set_default_dcp_content_type (static_cast<DCPContentType*> (0));
        Config::instance()->set_default_audio_delay (0);
-       Config::instance()->set_default_j2k_bandwidth (100000000);
+       Config::instance()->set_default_video_bit_rate(100000000);
        Config::instance()->set_default_interop (false);
        Config::instance()->set_default_still_length (10);
        Config::instance()->set_default_dcp_audio_channels(8);
@@ -287,13 +287,14 @@ check_wav_file (boost::filesystem::path ref, boost::filesystem::path check)
 void
 check_mxf_audio_file (boost::filesystem::path ref, boost::filesystem::path check)
 {
-       ASDCP::PCM::MXFReader ref_reader;
+       Kumu::FileReaderFactory factory;
+       ASDCP::PCM::MXFReader ref_reader(factory);
        BOOST_REQUIRE (!ASDCP_FAILURE (ref_reader.OpenRead (ref.string().c_str())));
 
        ASDCP::PCM::AudioDescriptor ref_desc;
        BOOST_REQUIRE (!ASDCP_FAILURE (ref_reader.FillAudioDescriptor (ref_desc)));
 
-       ASDCP::PCM::MXFReader check_reader;
+       ASDCP::PCM::MXFReader check_reader(factory);
        BOOST_REQUIRE (!ASDCP_FAILURE (check_reader.OpenRead (check.string().c_str())));
 
        ASDCP::PCM::AudioDescriptor check_desc;
@@ -316,13 +317,14 @@ check_mxf_audio_file (boost::filesystem::path ref, boost::filesystem::path check
 bool
 mxf_atmos_files_same (boost::filesystem::path ref, boost::filesystem::path check, bool verbose)
 {
-       ASDCP::ATMOS::MXFReader ref_reader;
+       Kumu::FileReaderFactory factory;
+       ASDCP::ATMOS::MXFReader ref_reader(factory);
        BOOST_REQUIRE (!ASDCP_FAILURE(ref_reader.OpenRead(ref.string().c_str())));
 
        ASDCP::ATMOS::AtmosDescriptor ref_desc;
        BOOST_REQUIRE (!ASDCP_FAILURE(ref_reader.FillAtmosDescriptor(ref_desc)));
 
-       ASDCP::ATMOS::MXFReader check_reader;
+       ASDCP::ATMOS::MXFReader check_reader(factory);
        BOOST_REQUIRE (!ASDCP_FAILURE(check_reader.OpenRead(check.string().c_str())));
 
        ASDCP::ATMOS::AtmosDescriptor check_desc;
@@ -584,7 +586,7 @@ check_dcp(boost::filesystem::path ref, boost::filesystem::path check, bool sound
 }
 
 void
-check_xml (xmlpp::Element* ref, xmlpp::Element* test, list<string> ignore)
+check_xml(xmlpp::Element* ref, xmlpp::Element* test, list<Glib::ustring> ignore)
 {
        BOOST_CHECK_EQUAL (ref->get_name (), test->get_name ());
        BOOST_CHECK_EQUAL (ref->get_namespace_prefix (), test->get_namespace_prefix ());
@@ -640,7 +642,7 @@ check_xml (xmlpp::Element* ref, xmlpp::Element* test, list<string> ignore)
 }
 
 void
-check_xml (boost::filesystem::path ref, boost::filesystem::path test, list<string> ignore)
+check_xml(boost::filesystem::path ref, boost::filesystem::path test, list<Glib::ustring> ignore)
 {
        auto ref_parser = new xmlpp::DomParser(ref.string());
        auto ref_root = ref_parser->get_document()->get_root_node();
@@ -827,22 +829,25 @@ check_one_frame (boost::filesystem::path dcp_dir, int64_t index, boost::filesyst
 {
        dcp::DCP dcp (dcp_dir);
        dcp.read ();
-       auto asset = dynamic_pointer_cast<dcp::MonoPictureAsset> (dcp.cpls().front()->reels().front()->main_picture()->asset());
+       auto asset = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(dcp.cpls().front()->reels().front()->main_picture()->asset());
        BOOST_REQUIRE (asset);
        auto frame = asset->start_read()->get_frame(index);
-       auto ref_frame (new dcp::MonoPictureFrame (ref));
+       dcp::MonoJ2KPictureFrame ref_frame(ref);
 
        auto image = frame->xyz_image ();
-       auto ref_image = ref_frame->xyz_image ();
+       auto ref_image = ref_frame.xyz_image();
 
        BOOST_REQUIRE (image->size() == ref_image->size());
 
        int off = 0;
        for (int y = 0; y < ref_image->size().height; ++y) {
                for (int x = 0; x < ref_image->size().width; ++x) {
-                       BOOST_REQUIRE_EQUAL (ref_image->data(0)[off], image->data(0)[off]);
-                       BOOST_REQUIRE_EQUAL (ref_image->data(1)[off], image->data(1)[off]);
-                       BOOST_REQUIRE_EQUAL (ref_image->data(2)[off], image->data(2)[off]);
+                       auto x_error = std::abs(ref_image->data(0)[off] - image->data(0)[off]);
+                       BOOST_REQUIRE_MESSAGE(x_error == 0, "x component at " << x << "," << y << " differs by " << x_error);
+                       auto y_error = std::abs(ref_image->data(1)[off] - image->data(1)[off]);
+                       BOOST_REQUIRE_MESSAGE(y_error == 0, "y component at " << x << "," << y << " differs by " << y_error);
+                       auto z_error = std::abs(ref_image->data(2)[off] - image->data(2)[off]);
+                       BOOST_REQUIRE_MESSAGE(z_error == 0, "z component at " << x << "," << y << " differs by " << z_error);
                        ++off;
                }
        }
@@ -960,10 +965,10 @@ void progress (float) {}
 void
 verify_dcp(boost::filesystem::path dir, vector<dcp::VerificationNote::Code> ignore)
 {
-       auto notes = dcp::verify({dir}, {}, &stage, &progress, {}, TestPaths::xsd());
+       auto result = dcp::verify({dir}, {}, &stage, &progress, {}, TestPaths::xsd());
        bool ok = true;
-       for (auto i: notes) {
-               if (find(ignore.begin(), ignore.end(), i.code()) == ignore.end()) {
+       for (auto i: result.notes) {
+               if (i.type() != dcp::VerificationNote::Type::OK && find(ignore.begin(), ignore.end(), i.code()) == ignore.end()) {
                        std::cout << "\t" << dcp::note_to_string(i) << "\n";
                        ok = false;
                }