summaryrefslogtreecommitdiff
path: root/test/test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-06-19 13:30:02 +0200
committerCarl Hetherington <cth@carlh.net>2020-06-19 13:42:24 +0200
commita0c931b6bfb05b56996a75bbfcf378cd44ef18e1 (patch)
treed02d8cb5ef0fd0f8ce0751bf17fab9c98ffd1868 /test/test.cc
parentcabe0934c60fb6e74bf4c3023bdcb5c68753e5d9 (diff)
Make Atmos content work more like other content. Now its MXFsencrypt-atmos
are re-written, meaning that they can be encrypted. This commit is mostly just for the backend. We also need a fair few checks/restrictions in the UI: - any present atmos content dictates the project frame rate - no mixed edit rates of atmos content - probably some other things I haven't thought of
Diffstat (limited to 'test/test.cc')
-rw-r--r--test/test.cc77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/test.cc b/test/test.cc
index 90decc2df..32d32f988 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -237,6 +237,83 @@ check_mxf_audio_file (boost::filesystem::path ref, boost::filesystem::path check
}
}
+
+/** @return true if the files are the same, otherwise false */
+bool
+mxf_atmos_files_same (boost::filesystem::path ref, boost::filesystem::path check, bool verbose)
+{
+ ASDCP::ATMOS::MXFReader ref_reader;
+ 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;
+ BOOST_REQUIRE (!ASDCP_FAILURE(check_reader.OpenRead(check.string().c_str())));
+
+ ASDCP::ATMOS::AtmosDescriptor check_desc;
+ BOOST_REQUIRE (!ASDCP_FAILURE(check_reader.FillAtmosDescriptor(check_desc)));
+
+ if (ref_desc.EditRate.Numerator != check_desc.EditRate.Numerator) {
+ if (verbose) {
+ std::cout << "EditRate.Numerator differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.EditRate.Denominator != check_desc.EditRate.Denominator) {
+ if (verbose) {
+ std::cout << "EditRate.Denominator differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.ContainerDuration != check_desc.ContainerDuration) {
+ if (verbose) {
+ std::cout << "EditRate.ContainerDuration differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.FirstFrame != check_desc.FirstFrame) {
+ if (verbose) {
+ std::cout << "EditRate.FirstFrame differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.MaxChannelCount != check_desc.MaxChannelCount) {
+ if (verbose) {
+ std::cout << "EditRate.MaxChannelCount differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.MaxObjectCount != check_desc.MaxObjectCount) {
+ if (verbose) {
+ std::cout << "EditRate.MaxObjectCount differs.\n";
+ }
+ return false;
+ }
+ if (ref_desc.AtmosVersion != check_desc.AtmosVersion) {
+ if (verbose) {
+ std::cout << "EditRate.AtmosVersion differs.\n";
+ }
+ return false;
+ }
+
+ ASDCP::DCData::FrameBuffer ref_buffer (Kumu::Megabyte);
+ ASDCP::DCData::FrameBuffer check_buffer (Kumu::Megabyte);
+ for (size_t i = 0; i < ref_desc.ContainerDuration; ++i) {
+ ref_reader.ReadFrame (i, ref_buffer, 0);
+ check_reader.ReadFrame (i, check_buffer, 0);
+ if (memcmp(ref_buffer.RoData(), check_buffer.RoData(), ref_buffer.Size())) {
+ if (verbose) {
+ std::cout << "data differs.\n";
+ }
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
void
check_image (boost::filesystem::path ref, boost::filesystem::path check, double threshold)
{