X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Fround_trip_test.cc;h=90671d79fd3750276b0decaecbff5759b0e19d2e;hb=2ae92dcc97765deb2845dd07a338858aeb375cb3;hp=7ba501e60edffd0c042731c161ecd48dc529555d;hpb=56e7a6f1768036df852a45d939b9adc038b17057;p=libdcp.git diff --git a/test/round_trip_test.cc b/test/round_trip_test.cc index 7ba501e6..90671d79 100644 --- a/test/round_trip_test.cc +++ b/test/round_trip_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2015 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,25 +21,29 @@ #include "decrypted_kdm.h" #include "encrypted_kdm.h" #include "signer.h" -#include "mono_picture_mxf.h" -#include "sound_mxf.h" +#include "mono_picture_asset.h" +#include "sound_asset.h" #include "reel.h" #include "test.h" #include "cpl.h" #include "mono_picture_frame.h" -#include "argb_frame.h" #include "certificate_chain.h" -#include "mono_picture_mxf_writer.h" +#include "mono_picture_asset_writer.h" #include "reel_picture_asset.h" #include "reel_mono_picture_asset.h" #include "file.h" +#include "openjpeg_image.h" +#include "rgb_xyz.h" +#include "colour_conversion.h" #include +#include #include using std::list; using boost::shared_ptr; +using boost::scoped_array; -/* Build an encrypted picture MXF and a KDM for it and check that the KDM can be decrypted */ +/** Build an encrypted picture asset and a KDM for it and check that the KDM can be decrypted */ BOOST_AUTO_TEST_CASE (round_trip_test) { shared_ptr signer (new dcp::Signer ("openssl")); @@ -47,8 +51,8 @@ BOOST_AUTO_TEST_CASE (round_trip_test) boost::filesystem::path work_dir = "build/test/round_trip_test"; boost::filesystem::create_directory (work_dir); - shared_ptr mxf_A (new dcp::MonoPictureMXF (dcp::Fraction (24, 1))); - shared_ptr writer = mxf_A->start_write (work_dir / "video.mxf", dcp::SMPTE, false); + shared_ptr asset_A (new dcp::MonoPictureAsset (dcp::Fraction (24, 1))); + shared_ptr writer = asset_A->start_write (work_dir / "video.mxf", dcp::SMPTE, false); dcp::File j2c ("test/data/32x32_red_square.j2c"); for (int i = 0; i < 24; ++i) { writer->write (j2c.data (), j2c.size ()); @@ -57,16 +61,17 @@ BOOST_AUTO_TEST_CASE (round_trip_test) dcp::Key key; - mxf_A->set_key (key); + asset_A->set_key (key); shared_ptr cpl (new dcp::CPL ("A Test DCP", dcp::FEATURE)); shared_ptr reel (new dcp::Reel ()); - reel->add (shared_ptr (new dcp::ReelMonoPictureAsset (mxf_A, 0))); + reel->add (shared_ptr (new dcp::ReelMonoPictureAsset (asset_A, 0))); cpl->add (reel); /* A KDM using our certificate chain's leaf key pair */ dcp::DecryptedKDM kdm_A ( cpl, + key, dcp::LocalTime ("2013-01-01T00:00:00+00:00"), dcp::LocalTime ("2013-01-08T00:00:00+00:00"), "libdcp", @@ -79,7 +84,7 @@ BOOST_AUTO_TEST_CASE (round_trip_test) kdm_A.encrypt(signer, signer->certificates().leaf(), dcp::MODIFIED_TRANSITIONAL_1).as_xml (kdm_file); /* Reload the KDM, using our private key to decrypt it */ - dcp::DecryptedKDM kdm_B (dcp::EncryptedKDM (kdm_file), signer->key ()); + dcp::DecryptedKDM kdm_B (dcp::EncryptedKDM (dcp::file_to_string (kdm_file)), signer->key ()); /* Check that the decrypted KDMKeys are the same as the ones we started with */ BOOST_CHECK_EQUAL (kdm_A.keys().size(), kdm_B.keys().size()); @@ -93,17 +98,24 @@ BOOST_AUTO_TEST_CASE (round_trip_test) ++j; } - /* Reload the picture MXF */ - shared_ptr mxf_B ( - new dcp::MonoPictureMXF (work_dir / "video.mxf") + /* Reload the picture asset */ + shared_ptr asset_B ( + new dcp::MonoPictureAsset (work_dir / "video.mxf") ); BOOST_CHECK (!kdm_B.keys().empty ()); - mxf_B->set_key (kdm_B.keys().front().key()); + asset_B->set_key (kdm_B.keys().front().key()); - shared_ptr frame_A = mxf_A->get_frame(0)->argb_frame (); - shared_ptr frame_B = mxf_B->get_frame(0)->argb_frame (); - BOOST_CHECK_EQUAL (frame_A->size().width, frame_B->size().width); - BOOST_CHECK_EQUAL (frame_A->size().height, frame_B->size().height); - BOOST_CHECK_EQUAL (memcmp (frame_A->data(), frame_B->data(), frame_A->size().width * frame_A->size().height), 0); + shared_ptr xyz_A = asset_A->get_frame(0)->xyz_image (); + shared_ptr xyz_B = asset_B->get_frame(0)->xyz_image (); + + scoped_array frame_A (new uint8_t[xyz_A->size().width * xyz_A->size().height * 4]); + dcp::xyz_to_rgba (xyz_A, dcp::ColourConversion::srgb_to_xyz(), frame_A.get()); + + scoped_array frame_B (new uint8_t[xyz_B->size().width * xyz_B->size().height * 4]); + dcp::xyz_to_rgba (xyz_B, dcp::ColourConversion::srgb_to_xyz(), frame_B.get()); + + BOOST_CHECK_EQUAL (xyz_A->size().width, xyz_B->size().width); + BOOST_CHECK_EQUAL (xyz_A->size().height, xyz_B->size().height); + BOOST_CHECK_EQUAL (memcmp (frame_A.get(), frame_B.get(), xyz_A->size().width * xyz_A->size().height * 4), 0); }