X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Ftest.cc;h=21f27c36c31fbc28596a060d4f661c5aa8eab218;hb=5119f9d875cd59f0acf069b653784b676bc54548;hp=89ee7f619728f0391fa78f2fcbf716e2174b72d8;hpb=d311043bf3c1e3e7f41b314f7ab7c91ed7e5aa7f;p=dcpomatic.git diff --git a/test/test.cc b/test/test.cc index 89ee7f619..21f27c36c 100644 --- a/test/test.cc +++ b/test/test.cc @@ -38,6 +38,7 @@ #include "lib/job.h" #include "lib/job_manager.h" #include "lib/log_entry.h" +#include "lib/make_dcp.h" #include "lib/ratio.h" #include "lib/signal_manager.h" #include "lib/util.h" @@ -129,7 +130,7 @@ class TestSignalManager : public SignalManager { public: /* No wakes in tests: we call ui_idle ourselves */ - void wake_ui () + void wake_ui () override { } @@ -368,6 +369,8 @@ rms_error (boost::filesystem::path ref, boost::filesystem::path check) FFmpegImageProxy check_proxy (check); auto check_image = check_proxy.image(Image::Alignment::COMPACT).image; + BOOST_REQUIRE_EQUAL (ref_image->planes(), check_image->planes()); + BOOST_REQUIRE_EQUAL (ref_image->pixel_format(), check_image->pixel_format()); auto const format = ref_image->pixel_format(); @@ -416,6 +419,19 @@ rms_error (boost::filesystem::path ref, boost::filesystem::path check) } break; } + case AV_PIX_FMT_YUVJ420P: + { + for (int c = 0; c < ref_image->planes(); ++c) { + for (int y = 0; y < height / ref_image->vertical_factor(c); ++y) { + auto p = ref_image->data()[c] + y * ref_image->stride()[c]; + auto q = check_image->data()[c] + y * check_image->stride()[c]; + for (int x = 0; x < ref_image->line_size()[c]; ++x) { + sum_square += pow((*p++ - *q++), 2); + } + } + } + break; + } default: BOOST_REQUIRE_MESSAGE (false, "unrecognised pixel format " << format); } @@ -452,29 +468,26 @@ check_file (boost::filesystem::path ref, boost::filesystem::path check) BOOST_CHECK (check_file); int const buffer_size = 65536; - uint8_t* ref_buffer = new uint8_t[buffer_size]; - uint8_t* check_buffer = new uint8_t[buffer_size]; + std::vector ref_buffer(buffer_size); + std::vector check_buffer(buffer_size); string error = "File " + check.string() + " differs from reference " + ref.string(); while (N) { uintmax_t this_time = min (uintmax_t (buffer_size), N); - size_t r = fread (ref_buffer, 1, this_time, ref_file); + size_t r = fread (ref_buffer.data(), 1, this_time, ref_file); BOOST_CHECK_EQUAL (r, this_time); - r = fread (check_buffer, 1, this_time, check_file); + r = fread (check_buffer.data(), 1, this_time, check_file); BOOST_CHECK_EQUAL (r, this_time); - BOOST_CHECK_MESSAGE (memcmp (ref_buffer, check_buffer, this_time) == 0, error); - if (memcmp (ref_buffer, check_buffer, this_time)) { + BOOST_CHECK_MESSAGE (memcmp(ref_buffer.data(), check_buffer.data(), this_time) == 0, error); + if (memcmp(ref_buffer.data(), check_buffer.data(), this_time)) { break; } N -= this_time; } - delete[] ref_buffer; - delete[] check_buffer; - fclose (ref_file); fclose (check_file); } @@ -495,17 +508,14 @@ check_text_file (boost::filesystem::path ref, boost::filesystem::path check) DCPOMATIC_ASSERT (buffer_size < 1024 * 1024); - auto ref_buffer = new uint8_t[buffer_size]; - auto ref_read = fread(ref_buffer, 1, buffer_size, ref_file); - auto check_buffer = new uint8_t[buffer_size]; - auto check_read = fread(check_buffer, 1, buffer_size, check_file); + std::vector ref_buffer(buffer_size); + auto ref_read = fread(ref_buffer.data(), 1, buffer_size, ref_file); + std::vector check_buffer(buffer_size); + auto check_read = fread(check_buffer.data(), 1, buffer_size, check_file); BOOST_CHECK_EQUAL (ref_read, check_read); string const error = "File " + check.string() + " differs from reference " + ref.string(); - BOOST_CHECK_MESSAGE(memcmp(ref_buffer, check_buffer, ref_read) == 0, error); - - delete[] ref_buffer; - delete[] check_buffer; + BOOST_CHECK_MESSAGE(memcmp(ref_buffer.data(), check_buffer.data(), ref_read) == 0, error); fclose (ref_file); fclose (check_file); @@ -698,9 +708,9 @@ png_flush (png_structp) static void -png_error_fn (png_structp png_ptr, char const * message) +png_error_fn (png_structp, char const * message) { - reinterpret_cast(png_get_error_ptr(png_ptr))->png_error (message); + throw EncodeError (String::compose("Error during PNG write: %1", message)); } @@ -893,7 +903,7 @@ void make_and_verify_dcp (shared_ptr film, vector ignore) { film->write_metadata (); - film->make_dcp (TranscodeJob::ChangedBehaviour::IGNORE); + make_dcp (film, TranscodeJob::ChangedBehaviour::IGNORE); BOOST_REQUIRE (!wait_for_jobs()); auto notes = dcp::verify ({film->dir(film->dcp_name())}, &stage, &progress, TestPaths::xsd()); bool ok = true; @@ -927,3 +937,17 @@ ConfigRestorer::~ConfigRestorer() setup_test_config(); } + +boost::filesystem::path +find_file (boost::filesystem::path dir, string filename_part) +{ + boost::optional found; + for (auto i: boost::filesystem::directory_iterator(dir)) { + if (i.path().filename().string().find(filename_part) != string::npos) { + BOOST_REQUIRE (!found); + found = i; + } + } + BOOST_REQUIRE (found); + return *found; +}