Try to fix Windows build.
[dcpomatic.git] / test / test.cc
index 95d84bcc907f92d62c6fe87a60a672e9cf999583..dff7800ce8c0ee2f470ae2c906d88fbb5c86870d 100644 (file)
@@ -101,6 +101,11 @@ struct TestConfig
                EncodeServerFinder::instance()->stop ();
 
                signal_manager = new TestSignalManager ();
+
+               char* env_private = getenv("DCPOMATIC_TEST_PRIVATE");
+               if (env_private) {
+                       private_data = env_private;
+               }
        }
 
        ~TestConfig ()
@@ -231,7 +236,15 @@ check_image (boost::filesystem::path ref, boost::filesystem::path check)
        ref_image.read (ref.string ());
        Magick::Image check_image;
        check_image.read (check.string ());
-       BOOST_CHECK_MESSAGE (ref_image.compare (check_image), ref << " differs from " << check);
+       /* XXX: this is a hack; we really want the ImageMagick call but GraphicsMagick doesn't have it;
+          this may cause random test failures on platforms that use GraphicsMagick.
+       */
+#ifdef DCPOMATIC_IMAGE_MAGICK
+       double const dist = ref_image.compare(check_image, Magick::RootMeanSquaredErrorMetric);
+       BOOST_CHECK_MESSAGE (dist < 0.001, ref << " differs from " << check << " " << dist);
+#else
+       BOOST_CHECK_MESSAGE (!ref_image.compare(check_image), ref << " differs from " << check);
+#endif
 }
 
 void
@@ -417,55 +430,11 @@ write_image (shared_ptr<const Image> image, boost::filesystem::path file, string
        m.write (file.string ());
 }
 
-class Reader
-{
-public:
-       Reader (boost::filesystem::path file)
-       {
-               format_context = avformat_alloc_context ();
-               BOOST_REQUIRE (format_context);
-               BOOST_REQUIRE (avformat_open_input (&format_context, file.string().c_str(), 0, 0) >= 0);
-               BOOST_REQUIRE (avformat_find_stream_info (format_context, 0) >= 0);
-       }
-
-       ~Reader ()
-       {
-               avformat_close_input (&format_context);
-       }
-
-       AVFormatContext* format_context;
-};
-
-
 void
-check_ffmpeg (boost::filesystem::path ref, boost::filesystem::path check, int skip_packet_stream)
+check_ffmpeg (boost::filesystem::path ref, boost::filesystem::path check)
 {
-       Reader ref_r (ref);
-       Reader check_r (check);
-
-       BOOST_REQUIRE_EQUAL (ref_r.format_context->nb_streams, check_r.format_context->nb_streams);
-
-       AVPacket ref_p;
-       AVPacket check_p;
-
-       bool skipped = false;
-
-       while (true) {
-               int p = av_read_frame (ref_r.format_context, &ref_p);
-               int q = av_read_frame (check_r.format_context, &check_p);
-               if (ref_p.stream_index == skip_packet_stream && check_p.stream_index == skip_packet_stream && !skipped) {
-                       skipped = true;
-                       continue;
-               }
-               BOOST_REQUIRE_EQUAL (p, q);
-               BOOST_REQUIRE (p == 0 || p == AVERROR_EOF);
-               if (p == AVERROR_EOF) {
-                       break;
-               }
-
-               BOOST_REQUIRE_EQUAL (ref_p.buf->size, check_p.buf->size);
-               BOOST_REQUIRE_EQUAL (memcmp (ref_p.buf->data, check_p.buf->data, ref_p.buf->size), 0);
-       }
+       int const r = system (string("ffcmp " + ref.string() + " " + check.string()).c_str());
+       BOOST_REQUIRE_EQUAL (WEXITSTATUS(r), 0);
 }
 
 void