Use an enum instead of a bool in PictureAsset::start_write().
authorCarl Hetherington <cth@carlh.net>
Fri, 17 Mar 2023 13:11:34 +0000 (14:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 20 Mar 2023 15:41:02 +0000 (16:41 +0100)
16 files changed:
examples/make_dcp.cc
src/mono_picture_asset.cc
src/mono_picture_asset.h
src/picture_asset.h
src/stereo_picture_asset.cc
src/stereo_picture_asset.h
test/dcp_test.cc
test/decryption_test.cc
test/encryption_test.cc
test/frame_info_hash_test.cc
test/kdm_test.cc
test/recovery_test.cc
test/round_trip_test.cc
test/test.cc
test/verify_test.cc
tools/dcpdecryptmxf.cc

index 60f5608ad36eed4f981d1efe8679f08e9cebfdd4..a99d4ef0d9dc772dd0c0516b00b15cf4daa2d67e 100644 (file)
@@ -59,7 +59,7 @@ main ()
        auto picture_asset = std::make_shared<dcp::MonoPictureAsset>(dcp::Fraction(24, 1), dcp::Standard::SMPTE);
 
        /* Start off a write to it */
-       auto picture_writer = picture_asset->start_write("DCP/picture.mxf", false);
+       auto picture_writer = picture_asset->start_write("DCP/picture.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
 
        /* Write 24 frames of the same JPEG2000 file */
        dcp::ArrayData picture("examples/help.j2c");
index 5aba95d26c12bd7250de5a20bf21676501d9b5a6..cdfcb0df543efef7b762f8e82bf9af73ab2a2f4e 100644 (file)
@@ -183,10 +183,10 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
 
 
 shared_ptr<PictureAssetWriter>
-MonoPictureAsset::start_write (boost::filesystem::path file, bool overwrite)
+MonoPictureAsset::start_write(boost::filesystem::path file, Behaviour behaviour)
 {
        /* Can't use make_shared here as the MonoPictureAssetWriter constructor is private */
-       return shared_ptr<MonoPictureAssetWriter>(new MonoPictureAssetWriter(this, file, overwrite));
+       return shared_ptr<MonoPictureAssetWriter>(new MonoPictureAssetWriter(this, file, behaviour == Behaviour::OVERWRITE_EXISTING));
 }
 
 shared_ptr<MonoPictureAssetReader>
index 7a37fa736854d3b43e1143491fb8e62d7c171796..625d6ac8fecb9503b7c0c07b332cdc1175e79e1d 100644 (file)
@@ -70,10 +70,11 @@ public:
 
        /** Start a progressive write to a MonoPictureAsset.
         *  @path file File to write to.
-        *  @path overwrite true to overwrite an existing file; for use when continuing a write which
-        *  previously failed.  If in doubt, use false here.
+        *  @path behaviour OVERWRITE_EXISTING to overwrite and potentially add to an existing file
+        *  (after a write previously failed), MAKE_NEW to create a new file.
+        *  If in doubt, use MAKE_NEW here.
         */
-       std::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path file, bool overwrite) override;
+       std::shared_ptr<PictureAssetWriter> start_write(boost::filesystem::path file, Behaviour behaviour) override;
        std::shared_ptr<MonoPictureAssetReader> start_read () const;
 
        bool equals (
index 011dea87f0673c9962c1db6abc6460e7c1b6c8b4..236eca223b64d72b348ae7fa52c0393389eefa24 100644 (file)
@@ -73,9 +73,14 @@ public:
        /** Create a new PictureAsset with a given edit rate and standard */
        explicit PictureAsset (Fraction edit_rate, Standard standard);
 
+       enum class Behaviour {
+               OVERWRITE_EXISTING,
+               MAKE_NEW
+       };
+
        virtual std::shared_ptr<PictureAssetWriter> start_write (
                boost::filesystem::path file,
-               bool overwrite
+               Behaviour behaviour
                ) = 0;
 
        Size size () const {
index 7e3f6f63326bad0a264e25501f8f32ac32badf85..cf07c6be6eaed472972177eb8da8a4d6ce5a3b5f 100644 (file)
@@ -87,9 +87,9 @@ StereoPictureAsset::StereoPictureAsset (Fraction edit_rate, Standard standard)
 
 
 shared_ptr<PictureAssetWriter>
-StereoPictureAsset::start_write (boost::filesystem::path file, bool overwrite)
+StereoPictureAsset::start_write(boost::filesystem::path file, Behaviour behaviour)
 {
-       return shared_ptr<StereoPictureAssetWriter> (new StereoPictureAssetWriter(this, file, overwrite));
+       return shared_ptr<StereoPictureAssetWriter>(new StereoPictureAssetWriter(this, file, behaviour == Behaviour::OVERWRITE_EXISTING));
 }
 
 
index a33650484df90ac4622e2d2a703009b7590e990a..9c9a2fa1b5501300ab08bb8190b55e07d02b0a65 100644 (file)
@@ -58,7 +58,7 @@ public:
        explicit StereoPictureAsset (Fraction edit_rate, Standard standard);
 
        /** Start a progressive write to a StereoPictureAsset */
-       std::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path file, bool) override;
+       std::shared_ptr<PictureAssetWriter> start_write(boost::filesystem::path file, Behaviour behaviour) override;
        std::shared_ptr<StereoPictureAssetReader> start_read () const;
 
        bool equals (
index 03c5e2a9ea1248484143ac8fcbab7d7e8303ddef..7b2eb4ef89d35a9f1d8b3098e26ae56153da5d9c 100644 (file)
@@ -103,7 +103,7 @@ BOOST_AUTO_TEST_CASE (dcp_test2)
 
        auto mp = make_shared<dcp::StereoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
        mp->set_metadata (mxf_meta);
-       auto picture_writer = mp->start_write ("build/test/DCP/dcp_test2/video.mxf", false);
+       auto picture_writer = mp->start_write("build/test/DCP/dcp_test2/video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData j2c ("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                /* Left */
@@ -288,7 +288,7 @@ BOOST_AUTO_TEST_CASE (dcp_test5)
 
        auto mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
        mp->set_metadata (mxf_meta);
-       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write ("build/test/DCP/dcp_test5/video.mxf", false);
+       auto picture_writer = mp->start_write("build/test/DCP/dcp_test5/video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData j2c ("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                picture_writer->write (j2c.data (), j2c.size ());
index 757a6986d0a2da14b5d34d1f2cb9d396fd87b580..1e2ca94beedb4a10e2373d05449ad20ce6fd20af 100644 (file)
@@ -155,7 +155,7 @@ BOOST_AUTO_TEST_CASE (decryption_test2)
        auto picture_asset = std::make_shared<dcp::MonoPictureAsset>(dcp::Fraction(24, 1), dcp::Standard::SMPTE);
        picture_asset->set_key (key);
        picture_asset->set_context_id (context_id);
-       auto picture_writer = picture_asset->start_write(dir / "picture.mxf", false);
+       auto picture_writer = picture_asset->start_write(dir / "picture.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData picture("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                picture_writer->write(picture);
index 29b8f1fb348b653195d52ce6ea0c1321bec532af..f2a4084322d64ba77f48e7c47dd19db3cc3b3817 100644 (file)
@@ -93,7 +93,7 @@ BOOST_AUTO_TEST_CASE (encryption_test)
        mp->set_metadata (mxf_metadata);
        mp->set_key (key);
 
-       auto writer = mp->start_write ("build/test/DCP/encryption_test/video.mxf", false);
+       auto writer = mp->start_write("build/test/DCP/encryption_test/video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData j2c ("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                writer->write (j2c.data (), j2c.size ());
index ed91491665340ee56f4efe7ac3a7dd8fbc6c35f4..c19172c652086ab4ae396c29dbcc2127fe7d7924 100644 (file)
@@ -67,7 +67,7 @@ check (shared_ptr<dcp::PictureAssetWriter> writer, boost::random::uniform_int_di
 BOOST_AUTO_TEST_CASE (frame_info_hash_test)
 {
        auto mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
-       auto writer = mp->start_write ("build/test/frame_info_hash_test.mxf", false);
+       auto writer = mp->start_write("build/test/frame_info_hash_test.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
 
        boost::random::mt19937 rng(1);
        boost::random::uniform_int_distribution<> dist(0, 4095);
index 5f72f3bc725ffde74c238e89e152ed69366b63da..6f06b4c96ba41025674ff049343895accf822a8c 100644 (file)
@@ -258,7 +258,7 @@ BOOST_AUTO_TEST_CASE (validity_period_test1)
 
        auto asset = make_shared<dcp::MonoPictureAsset>(dcp::Fraction(24, 1), dcp::Standard::SMPTE);
        asset->set_key (dcp::Key());
-       auto writer = asset->start_write ("build/test/validity_period_test1.mxf", false);
+       auto writer = asset->start_write("build/test/validity_period_test1.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData frame ("test/data/flat_red.j2c");
        writer->write (frame.data(), frame.size());
        writer->finalize ();
index 43e5b93dd608e7002773117348570ada75cf7d1e..eaf34f815f31285649ea3459ee56c565643a7aad 100644 (file)
@@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE (recovery)
        boost::filesystem::remove_all ("build/test/baz");
        boost::filesystem::create_directories ("build/test/baz");
        auto mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
-       auto writer = mp->start_write ("build/test/baz/video1.mxf", false);
+       auto writer = mp->start_write("build/test/baz/video1.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
 
        int written_size = 0;
        for (int i = 0; i < 24; ++i) {
@@ -83,7 +83,7 @@ BOOST_AUTO_TEST_CASE (recovery)
        Kumu::ResetTestRNG ();
 
        mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
-       writer = mp->start_write ("build/test/baz/video2.mxf", true);
+       writer = mp->start_write("build/test/baz/video2.mxf", dcp::PictureAsset::Behaviour::OVERWRITE_EXISTING);
 
        writer->write (data.data(), data.size());
 
index add00651a0efc28e4b3266468e93c78eee36eadd..028accbe19f649d9727de62eb2751c0b343c6527 100644 (file)
@@ -71,7 +71,7 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
        boost::filesystem::create_directory (work_dir);
 
        auto asset_A = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
-       auto writer = asset_A->start_write (work_dir / "video.mxf", false);
+       auto writer = asset_A->start_write(work_dir / "video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData j2c ("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                writer->write (j2c.data (), j2c.size ());
index 76ed92f4b606a3854bba8981d7c574588bc4fa6e..a8efa5c359794ac80246c626f5457778b1470344 100644 (file)
@@ -273,7 +273,7 @@ simple_picture (boost::filesystem::path path, string suffix, int frames, optiona
        if (key) {
                mp->set_key (*key);
        }
-       auto picture_writer = mp->start_write (path / dcp::String::compose("video%1.mxf", suffix), false);
+       auto picture_writer = mp->start_write(path / dcp::String::compose("video%1.mxf", suffix), dcp::PictureAsset::Behaviour::MAKE_NEW);
 
        dcp::Size const size (1998, 1080);
        auto image = make_shared<dcp::OpenJPEGImage>(size);
@@ -516,7 +516,7 @@ black_picture_asset (boost::filesystem::path dir, int frames)
        auto asset = make_shared<dcp::MonoPictureAsset>(dcp::Fraction(24, 1), dcp::Standard::SMPTE);
        asset->set_metadata (dcp::MXFMetadata("libdcp", "libdcp", "1.6.4devel"));
        boost::filesystem::create_directories (dir);
-       auto writer = asset->start_write (dir / "pic.mxf", true);
+       auto writer = asset->start_write(dir / "pic.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        for (int i = 0; i < frames; ++i) {
                writer->write (frame.data(), frame.size());
        }
index 396a1ef5c439721419cb089e07575151ff6d159f..5b51db4344bd0c319759997267e247d5a5c4df2e 100644 (file)
@@ -679,7 +679,7 @@ dcp_from_frame (dcp::ArrayData const& frame, path dir)
 {
        auto asset = make_shared<dcp::MonoPictureAsset>(dcp::Fraction(24, 1), dcp::Standard::SMPTE);
        create_directories (dir);
-       auto writer = asset->start_write (dir / "pic.mxf", true);
+       auto writer = asset->start_write(dir / "pic.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        for (int i = 0; i < 24; ++i) {
                writer->write (frame.data(), frame.size());
        }
@@ -1227,7 +1227,7 @@ check_picture_size (int width, int height, int frame_rate, bool three_d)
        } else {
                mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction(frame_rate, 1), dcp::Standard::SMPTE);
        }
-       auto picture_writer = mp->start_write (dcp_path / "video.mxf", false);
+       auto picture_writer = mp->start_write(dcp_path / "video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
 
        auto image = black_image (dcp::Size(width, height));
        auto j2c = dcp::compress_j2k (image, 100000000, frame_rate, three_d, width > 2048);
@@ -3025,7 +3025,7 @@ BOOST_AUTO_TEST_CASE (verify_partially_encrypted)
        auto mp = make_shared<dcp::MonoPictureAsset>(dcp::Fraction (24, 1), dcp::Standard::SMPTE);
        mp->set_key (key);
 
-       auto writer = mp->start_write (dir / "video.mxf", false);
+       auto writer = mp->start_write(dir / "video.mxf", dcp::PictureAsset::Behaviour::MAKE_NEW);
        dcp::ArrayData j2c ("test/data/flat_red.j2c");
        for (int i = 0; i < 24; ++i) {
                writer->write (j2c.data(), j2c.size());
index 33ba79bb0ddfdeb196c12a42d41842cb43978ef8..1cdb58ec0b0441aa2f42a37eb145357195d1f73d 100644 (file)
@@ -221,7 +221,7 @@ main (int argc, char* argv[])
                                in.max_object_count(),
                                in.atmos_version()
                                );
-                       auto writer = out.start_write (output_file.get());
+                       auto writer = out.start_write(output_file.get());
                        copy (in, writer, ignore_hmac);
                        break;
                }
@@ -230,7 +230,7 @@ main (int argc, char* argv[])
                        dcp::MonoPictureAsset in (input_file);
                        add_key (in, decrypted_kdm);
                        dcp::MonoPictureAsset out (in.edit_rate(), dcp::Standard::SMPTE);
-                       auto writer = out.start_write (output_file.get(), false);
+                       auto writer = out.start_write(output_file.get(), dcp::PictureAsset::Behaviour::MAKE_NEW);
                        copy (in, writer, ignore_hmac);
                        break;
                }