X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Ftest.cc;h=e61387132f12fce7e61e558a445743366ef2ddae;hb=266e3f1b80d1263ff3cc8b3afaecd6ca1f88983b;hp=4dab0cff1b5895c0e197e19c0db140092662757e;hpb=62f9b78a2eb5f0fc6b9028264bac6ad501d83309;p=dcpomatic.git diff --git a/test/test.cc b/test/test.cc index 4dab0cff1..e61387132 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" @@ -99,10 +100,10 @@ boost::filesystem::path TestPaths::xsd () } -void +static void setup_test_config () { - Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency()); + Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency() / 2); Config::instance()->set_server_encoding_threads (1); Config::instance()->set_server_port_base (61921); Config::instance()->set_default_container (Ratio::from_id ("185")); @@ -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 { } @@ -364,12 +365,14 @@ double rms_error (boost::filesystem::path ref, boost::filesystem::path check) { FFmpegImageProxy ref_proxy (ref); - auto ref_image = ref_proxy.image().image; + auto ref_image = ref_proxy.image(Image::Alignment::COMPACT).image; FFmpegImageProxy check_proxy (check); - auto check_image = check_proxy.image().image; + 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()); - AVPixelFormat const format = ref_image->pixel_format(); + auto const format = ref_image->pixel_format(); BOOST_REQUIRE (ref_image->size() == check_image->size()); int const width = ref_image->size().width; @@ -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 (); + 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; @@ -920,3 +930,10 @@ check_int_close (std::pair a, std::pair b, int d) check_int_close (a.first, b.first, d); check_int_close (a.second, b.second, d); } + + +ConfigRestorer::~ConfigRestorer() +{ + setup_test_config(); +} +