Store interop/SMPTE in MXF.
authorCarl Hetherington <cth@carlh.net>
Tue, 6 Mar 2018 01:01:29 +0000 (01:01 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 13 Mar 2018 22:29:01 +0000 (22:29 +0000)
30 files changed:
examples/make_dcp.cc
src/asset_writer.cc
src/asset_writer.h
src/atmos_asset.cc
src/atmos_asset_writer.cc
src/mono_picture_asset.cc
src/mono_picture_asset.h
src/mono_picture_asset_writer.cc
src/mono_picture_asset_writer.h
src/mxf.cc
src/mxf.h
src/picture_asset.cc
src/picture_asset.h
src/picture_asset_writer.cc
src/picture_asset_writer.h
src/picture_asset_writer_common.cc
src/smpte_subtitle_asset.cc
src/sound_asset.cc
src/sound_asset.h
src/sound_asset_writer.cc
src/sound_asset_writer.h
src/stereo_picture_asset.cc
src/stereo_picture_asset.h
src/stereo_picture_asset_writer.cc
src/stereo_picture_asset_writer.h
test/dcp_test.cc
test/encryption_test.cc
test/frame_info_hash_test.cc
test/recovery_test.cc
test/round_trip_test.cc

index 582dd946189407941db52a1e0b488d6d1e69e1eb..0c7ebf77add9c1b4014804a304182f84bd8ad49f 100644 (file)
@@ -54,10 +54,10 @@ main ()
           per second.
        */
 
-       boost::shared_ptr<dcp::MonoPictureAsset> picture_asset (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
+       boost::shared_ptr<dcp::MonoPictureAsset> picture_asset (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
 
        /* Start off a write to it */
-       boost::shared_ptr<dcp::PictureAssetWriter> picture_writer = picture_asset->start_write ("DCP/picture.mxf", dcp::SMPTE, false);
+       boost::shared_ptr<dcp::PictureAssetWriter> picture_writer = picture_asset->start_write ("DCP/picture.mxf", false);
 
        /* Write 24 frames of the same JPEG2000 file */
        dcp::File picture ("examples/help.j2c");
@@ -71,8 +71,8 @@ main ()
        /* Now create a sound MXF.  As before, create an object and a writer.
           When creating the object we specify the sampling rate (48kHz) and the number of channels (2).
        */
-       boost::shared_ptr<dcp::SoundAsset> sound_asset (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 2));
-       boost::shared_ptr<dcp::SoundAssetWriter> sound_writer = sound_asset->start_write ("DCP/sound.mxf", dcp::SMPTE);
+       boost::shared_ptr<dcp::SoundAsset> sound_asset (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 2, dcp::SMPTE));
+       boost::shared_ptr<dcp::SoundAssetWriter> sound_writer = sound_asset->start_write ("DCP/sound.mxf");
 
        /* Write some sine waves */
        float* audio[2];
index b9bac1874335cd770c7d371401cc0ae76fee5027..4f5cf4be65876bcaf6d54f880b33e85ab64cb9bd 100644 (file)
@@ -48,13 +48,13 @@ using namespace dcp;
  *  @param mxf MXF that we are writing.
  *  @param file File to write to.
  */
-AssetWriter::AssetWriter (MXF* mxf, boost::filesystem::path file, Standard standard)
+AssetWriter::AssetWriter (MXF* mxf, boost::filesystem::path file)
        : _mxf (mxf)
        , _file (file)
        , _frames_written (0)
        , _finalized (false)
        , _started (false)
-       , _encryption_context (new EncryptionContext (mxf->key(), standard))
+       , _encryption_context (new EncryptionContext (mxf->key(), mxf->standard()))
 {
 
 }
index 814405d4e77719151d36d977da153233034d9ee9..bc055d700f45cf319032f235d65c62b20c738b05 100644 (file)
@@ -63,7 +63,7 @@ public:
        }
 
 protected:
-       AssetWriter (MXF* mxf, boost::filesystem::path file, Standard standard);
+       AssetWriter (MXF* mxf, boost::filesystem::path file);
 
        /** MXF that we are writing */
        MXF* _mxf;
index eac01dcf3525378a35b1b6dd824bad28486674f1..ab17493d1cc70e2543f915c6468214069fa53f1d 100644 (file)
@@ -42,7 +42,8 @@ using boost::shared_ptr;
 using namespace dcp;
 
 AtmosAsset::AtmosAsset (Fraction edit_rate, int first_frame, int max_channel_count, int max_object_count, string atmos_id, int atmos_version)
-       : _edit_rate (edit_rate)
+       : MXF (SMPTE)
+       , _edit_rate (edit_rate)
        , _intrinsic_duration (0)
        , _first_frame (first_frame)
        , _max_channel_count (max_channel_count)
@@ -55,6 +56,7 @@ AtmosAsset::AtmosAsset (Fraction edit_rate, int first_frame, int max_channel_cou
 
 AtmosAsset::AtmosAsset (boost::filesystem::path file)
        : Asset (file)
+       , MXF (SMPTE)
 {
        ASDCP::ATMOS::MXFReader reader;
        Kumu::Result_t r = reader.OpenRead (file.string().c_str());
index eb0d608aa8f4d3c5f8bad07c44ff8c3a4b9fb2d8..60529a2c6398d3b1b0b426ed5e0c157db036d9a7 100644 (file)
@@ -52,7 +52,7 @@ struct AtmosAssetWriter::ASDCPState
 };
 
 AtmosAssetWriter::AtmosAssetWriter (AtmosAsset* asset, boost::filesystem::path file)
-       : AssetWriter (asset, file, SMPTE)
+       : AssetWriter (asset, file)
        , _state (new AtmosAssetWriter::ASDCPState)
        , _asset (asset)
 {
@@ -67,7 +67,7 @@ AtmosAssetWriter::AtmosAssetWriter (AtmosAsset* asset, boost::filesystem::path f
 
        _state->desc.AtmosVersion = 0;
 
-       _asset->fill_writer_info (&_state->writer_info, _asset->id(), SMPTE);
+       _asset->fill_writer_info (&_state->writer_info, _asset->id());
 }
 
 void
index 407a3614de88231a2df313bb59296422e4c6648c..cebd8fa16fe3ae18a7c2860f92172bce3da5ca40 100644 (file)
@@ -73,8 +73,8 @@ MonoPictureAsset::MonoPictureAsset (boost::filesystem::path file)
        _id = read_writer_info (info);
 }
 
-MonoPictureAsset::MonoPictureAsset (Fraction edit_rate)
-       : PictureAsset (edit_rate)
+MonoPictureAsset::MonoPictureAsset (Fraction edit_rate, Standard standard)
+       : PictureAsset (edit_rate, standard)
 {
 
 }
@@ -167,10 +167,10 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
 }
 
 shared_ptr<PictureAssetWriter>
-MonoPictureAsset::start_write (boost::filesystem::path file, Standard standard, bool overwrite)
+MonoPictureAsset::start_write (boost::filesystem::path file, bool overwrite)
 {
        /* XXX: can't we use shared_ptr here? */
-       return shared_ptr<MonoPictureAssetWriter> (new MonoPictureAssetWriter (this, file, standard, overwrite));
+       return shared_ptr<MonoPictureAssetWriter> (new MonoPictureAssetWriter (this, file, overwrite));
 }
 
 shared_ptr<MonoPictureAssetReader>
index ea276bcdb17280f36ab1a2abec02eed29dd23cf7..7a1c0d0a0ceadfa0dc5008c19965cd5aa73e077d 100644 (file)
@@ -54,11 +54,12 @@ public:
 
        /** Create a MonoPictureAsset with a given edit rate.
         *  @param edit_rate Edit rate (i.e. frame rate) in frames per second.
+        *  @param standard DCP standard (INTEROP or SMPTE).
         */
-       explicit MonoPictureAsset (Fraction edit_rate);
+       explicit MonoPictureAsset (Fraction edit_rate, Standard standard);
 
        /** Start a progressive write to a MonoPictureAsset */
-       boost::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path, Standard standard, bool);
+       boost::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path, bool);
        boost::shared_ptr<MonoPictureAssetReader> start_read () const;
 
        bool equals (
index a51c3861ca56a734e61b9e0ed475860732e64d62..b48e46e990c4375d7cb5210abca8e66efa9c5f1d 100644 (file)
@@ -57,8 +57,8 @@ struct MonoPictureAssetWriter::ASDCPState : public ASDCPStateBase
 /** @param a Asset to write to.  `a' must not be deleted while
  *  this writer class still exists, or bad things will happen.
  */
-MonoPictureAssetWriter::MonoPictureAssetWriter (PictureAsset* asset, boost::filesystem::path file, Standard standard, bool overwrite)
-       : PictureAssetWriter (asset, file, standard, overwrite)
+MonoPictureAssetWriter::MonoPictureAssetWriter (PictureAsset* asset, boost::filesystem::path file, bool overwrite)
+       : PictureAssetWriter (asset, file, overwrite)
        , _state (new MonoPictureAssetWriter::ASDCPState)
 {
 
@@ -67,7 +67,7 @@ MonoPictureAssetWriter::MonoPictureAssetWriter (PictureAsset* asset, boost::file
 void
 MonoPictureAssetWriter::start (uint8_t const * data, int size)
 {
-       dcp::start (this, _state, _standard, _picture_asset, data, size);
+       dcp::start (this, _state, _picture_asset, data, size);
        _picture_asset->set_frame_rate (_picture_asset->edit_rate());
 }
 
index dcea0294022a57e0e1bede0535e009fd4b8920ba..2284cd3c9a627d089273f63db38b550e9c616d0c 100644 (file)
@@ -66,7 +66,7 @@ public:
 private:
        friend class MonoPictureAsset;
 
-       MonoPictureAssetWriter (PictureAsset *, boost::filesystem::path file, Standard standard, bool);
+       MonoPictureAssetWriter (PictureAsset *, boost::filesystem::path file, bool);
        void start (uint8_t const *, int);
 
        /* do this with an opaque pointer so we don't have to include
index 03e3d1d8dafe9027a4a450dbbc483557cdaed6fa..008dbc2ae8955ae1c37d55eb96d16d9202eeeec4 100644 (file)
@@ -60,17 +60,27 @@ using namespace dcp;
 MXF::MXF ()
        : _context_id (make_uuid ())
 {
+       /* Subclasses can create MXFs with unspecified _standard but are expected to fill
+          _standard in once the MXF is read.
+       */
+}
+
+MXF::MXF (Standard standard)
+       : _context_id (make_uuid ())
+       , _standard (standard)
+{
 
 }
 
 void
-MXF::fill_writer_info (ASDCP::WriterInfo* writer_info, string id, Standard standard) const
+MXF::fill_writer_info (ASDCP::WriterInfo* writer_info, string id) const
 {
        writer_info->ProductVersion = _metadata.product_version;
        writer_info->CompanyName = _metadata.company_name;
        writer_info->ProductName = _metadata.product_name.c_str();
 
-       if (standard == INTEROP) {
+       DCP_ASSERT (_standard);
+       if (_standard == INTEROP) {
                writer_info->LabelSetType = ASDCP::LS_MXF_INTEROP;
        } else {
                writer_info->LabelSetType = ASDCP::LS_MXF_SMPTE;
@@ -117,6 +127,17 @@ MXF::read_writer_info (ASDCP::WriterInfo const & info)
                _key_id = buffer;
        }
 
+       switch (info.LabelSetType) {
+       case ASDCP::LS_MXF_INTEROP:
+               _standard = INTEROP;
+               break;
+       case ASDCP::LS_MXF_SMPTE:
+               _standard = SMPTE;
+               break;
+       default:
+               DCP_ASSERT (false);
+       }
+
        _metadata.read (info);
 
        Kumu::bin2UUIDhex (info.AssetUUID, ASDCP::UUIDlen, buffer, sizeof (buffer));
index 8f83fafdd869572d93e2dc5812f739830ce6a24f..aef8b12d53f00dedee93157ccc6fc7bc94adafa0 100644 (file)
--- a/src/mxf.h
+++ b/src/mxf.h
@@ -37,6 +37,7 @@
 #include "asset.h"
 #include "key.h"
 #include "metadata.h"
+#include "dcp_assert.h"
 
 #include <boost/signals2.hpp>
 
@@ -61,7 +62,7 @@ class PictureAssetWriter;
 class MXF
 {
 public:
-       MXF ();
+       MXF (Standard standard);
        virtual ~MXF () {}
 
        /** @return true if the data is encrypted */
@@ -112,16 +113,22 @@ public:
                return _metadata;
        }
 
+       Standard standard () const {
+               DCP_ASSERT (_standard);
+               return *_standard;
+       }
+
 protected:
        template <class P, class Q>
-       friend void start (PictureAssetWriter* writer, boost::shared_ptr<P> state, Standard standard, Q* mxf, uint8_t const * data, int size);
+       friend void start (PictureAssetWriter* writer, boost::shared_ptr<P> state, Q* mxf, uint8_t const * data, int size);
+
+       MXF ();
 
        std::string read_writer_info (ASDCP::WriterInfo const &);
        /** Fill in a ADSCP::WriteInfo struct.
         *  @param w struct to fill in.
-        *  @param standard INTEROP or SMPTE.
         */
-       void fill_writer_info (ASDCP::WriterInfo* w, std::string id, Standard standard) const;
+       void fill_writer_info (ASDCP::WriterInfo* w, std::string id) const;
 
        /** ID of the key used for encryption/decryption, if there is one */
        boost::optional<std::string> _key_id;
@@ -129,6 +136,7 @@ protected:
        boost::optional<Key> _key;
        std::string _context_id;
        MXFMetadata _metadata;
+       boost::optional<Standard> _standard;
 };
 
 }
index a0a7d7d7dbc5f1211be9a926a7c887fcd34a43f5..7c4eb7b5802991ab1f1266c9048a6c03a41de18f 100644 (file)
@@ -55,6 +55,7 @@ using std::make_pair;
 using boost::shared_ptr;
 using namespace dcp;
 
+/** Load a PictureAsset from a file */
 PictureAsset::PictureAsset (boost::filesystem::path file)
        : Asset (file)
        , _intrinsic_duration (0)
@@ -62,8 +63,10 @@ PictureAsset::PictureAsset (boost::filesystem::path file)
 
 }
 
-PictureAsset::PictureAsset (Fraction edit_rate)
-       : _edit_rate (edit_rate)
+/** Create a new PictureAsset with a given edit rate and standard */
+PictureAsset::PictureAsset (Fraction edit_rate, Standard standard)
+       : MXF (standard)
+       , _edit_rate (edit_rate)
        , _intrinsic_duration (0)
 {
 
index a03b85d2f974f992779d7ba732c449900289c07a..696776dad6a46b4d6ccf1182db33ee03a20c07d6 100644 (file)
@@ -62,11 +62,10 @@ class PictureAsset : public Asset, public MXF
 {
 public:
        explicit PictureAsset (boost::filesystem::path file);
-       explicit PictureAsset (Fraction edit_rate);
+       explicit PictureAsset (Fraction edit_rate, Standard standard);
 
        virtual boost::shared_ptr<PictureAssetWriter> start_write (
                boost::filesystem::path file,
-               Standard standard,
                bool overwrite
                ) = 0;
 
index e3d7b70e5079a2628637bce408fe771b105bfc41..6861562e4c81441e09219e531f6ddb72bd194e11 100644 (file)
@@ -43,10 +43,9 @@ using std::string;
 using boost::shared_ptr;
 using namespace dcp;
 
-PictureAssetWriter::PictureAssetWriter (PictureAsset* asset, boost::filesystem::path file, Standard standard, bool overwrite)
-       : AssetWriter (asset, file, standard)
+PictureAssetWriter::PictureAssetWriter (PictureAsset* asset, boost::filesystem::path file, bool overwrite)
+       : AssetWriter (asset, file)
        , _picture_asset (asset)
-       , _standard (standard)
        , _overwrite (overwrite)
 {
        asset->set_file (file);
index f26ff2a0c14a45867d3dd33ae50af50f6ca5f712..f2bd611b1977aa083d8bf8e7413d959908379754 100644 (file)
@@ -82,12 +82,11 @@ public:
 
 protected:
        template <class P, class Q>
-       friend void start (PictureAssetWriter *, boost::shared_ptr<P>, Standard, Q *, uint8_t const *, int);
+       friend void start (PictureAssetWriter *, boost::shared_ptr<P>, Q *, uint8_t const *, int);
 
-       PictureAssetWriter (PictureAsset *, boost::filesystem::path, Standard standard, bool);
+       PictureAssetWriter (PictureAsset *, boost::filesystem::path, bool);
 
        PictureAsset* _picture_asset;
-       Standard _standard;
        bool _overwrite;
 };
 
index eae6318fdb89d1502d51dff69c1541c861ec0c5b..2caadc6eea9c1f62a1e73f88fe72f78b15932a7d 100644 (file)
@@ -50,7 +50,7 @@ struct ASDCPStateBase
 }
 
 template <class P, class Q>
-void dcp::start (PictureAssetWriter* writer, shared_ptr<P> state, Standard standard, Q* asset, uint8_t const * data, int size)
+void dcp::start (PictureAssetWriter* writer, shared_ptr<P> state, Q* asset, uint8_t const * data, int size)
 {
        asset->set_file (writer->_file);
 
@@ -64,7 +64,7 @@ void dcp::start (PictureAssetWriter* writer, shared_ptr<P> state, Standard stand
        asset->set_size (Size (state->picture_descriptor.StoredWidth, state->picture_descriptor.StoredHeight));
        asset->set_screen_aspect_ratio (Fraction (state->picture_descriptor.AspectRatio.Numerator, state->picture_descriptor.AspectRatio.Denominator));
 
-       asset->fill_writer_info (&state->writer_info, asset->id(), standard);
+       asset->fill_writer_info (&state->writer_info, asset->id());
 
        Kumu::Result_t r = state->mxf_writer.OpenWrite (
                asset->file()->string().c_str(),
index c85afc2e268cd2ba8588b6b406047f095b67a053..a0472f3f569436321e01ea466edd629fefad2035 100644 (file)
@@ -63,7 +63,8 @@ using boost::dynamic_pointer_cast;
 using namespace dcp;
 
 SMPTESubtitleAsset::SMPTESubtitleAsset ()
-       : _intrinsic_duration (0)
+       : MXF (SMPTE)
+       , _intrinsic_duration (0)
        , _edit_rate (24, 1)
        , _time_code_rate (24)
        , _xml_id (make_uuid ())
@@ -293,10 +294,10 @@ SMPTESubtitleAsset::xml_as_string () const
 void
 SMPTESubtitleAsset::write (boost::filesystem::path p) const
 {
-       EncryptionContext enc (key (), SMPTE);
+       EncryptionContext enc (key(), SMPTE);
 
        ASDCP::WriterInfo writer_info;
-       fill_writer_info (&writer_info, _id, SMPTE);
+       fill_writer_info (&writer_info, _id);
 
        ASDCP::TimedText::TimedTextDescriptor descriptor;
        descriptor.EditRate = ASDCP::Rational (_edit_rate.numerator, _edit_rate.denominator);
index 74d412123803435de48e19d364ef5570f684cdb0..b8ed6fb5555ae942d5768a64f93a29c8e55260d2 100644 (file)
@@ -84,8 +84,9 @@ SoundAsset::SoundAsset (boost::filesystem::path file)
        _id = read_writer_info (info);
 }
 
-SoundAsset::SoundAsset (Fraction edit_rate, int sampling_rate, int channels)
-       : _edit_rate (edit_rate)
+SoundAsset::SoundAsset (Fraction edit_rate, int sampling_rate, int channels, Standard standard)
+       : MXF (standard)
+       , _edit_rate (edit_rate)
        , _intrinsic_duration (0)
        , _channels (channels)
        , _sampling_rate (sampling_rate)
@@ -192,10 +193,10 @@ SoundAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, NoteHand
 }
 
 shared_ptr<SoundAssetWriter>
-SoundAsset::start_write (boost::filesystem::path file, Standard standard)
+SoundAsset::start_write (boost::filesystem::path file)
 {
        /* XXX: can't we use a shared_ptr here? */
-       return shared_ptr<SoundAssetWriter> (new SoundAssetWriter (this, file, standard));
+       return shared_ptr<SoundAssetWriter> (new SoundAssetWriter (this, file));
 }
 
 shared_ptr<SoundAssetReader>
index 6d09031285edd8fc8e4227448eca521849423db7..774951523a38618fb5b1a638e13b6181ed95a38c 100644 (file)
@@ -56,9 +56,9 @@ class SoundAsset : public Asset, public MXF
 {
 public:
        explicit SoundAsset (boost::filesystem::path file);
-       SoundAsset (Fraction edit_rate, int sampling_rate, int channels);
+       SoundAsset (Fraction edit_rate, int sampling_rate, int channels, Standard standard);
 
-       boost::shared_ptr<SoundAssetWriter> start_write (boost::filesystem::path file, Standard standard);
+       boost::shared_ptr<SoundAssetWriter> start_write (boost::filesystem::path file);
        boost::shared_ptr<SoundAssetReader> start_read () const;
 
        bool equals (
index 3cb25db59b733fa224d663a1540b7ecf34cbbae6..1bb2959dcfd6de738643fab1589397df93f272f8 100644 (file)
@@ -53,8 +53,8 @@ struct SoundAssetWriter::ASDCPState
        ASDCP::PCM::AudioDescriptor desc;
 };
 
-SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path file, Standard standard)
-       : AssetWriter (asset, file, standard)
+SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path file)
+       : AssetWriter (asset, file)
        , _state (new SoundAssetWriter::ASDCPState)
        , _asset (asset)
        , _frame_buffer_offset (0)
@@ -68,7 +68,7 @@ SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path f
        _state->desc.BlockAlign = 3 * _asset->channels();
        _state->desc.AvgBps = _asset->sampling_rate() * _state->desc.BlockAlign;
        _state->desc.LinkedTrackID = 0;
-       if (standard == INTEROP) {
+       if (asset->standard() == INTEROP) {
                _state->desc.ChannelFormat = ASDCP::PCM::CF_NONE;
        } else {
                /* Just use WTF ("wild track format") for SMPTE for now; searches suggest that this
@@ -86,7 +86,7 @@ SoundAssetWriter::SoundAssetWriter (SoundAsset* asset, boost::filesystem::path f
        _state->frame_buffer.Size (ASDCP::PCM::CalcFrameBufferSize (_state->desc));
        memset (_state->frame_buffer.Data(), 0, _state->frame_buffer.Capacity());
 
-       _asset->fill_writer_info (&_state->writer_info, _asset->id(), standard);
+       _asset->fill_writer_info (&_state->writer_info, _asset->id());
 }
 
 void
index 0a7d8cdaed8988f11cab3c41241b6376b34700be..b2de9e8eed4182a5034734751594f46ef821b75f 100644 (file)
@@ -63,7 +63,7 @@ public:
 private:
        friend class SoundAsset;
 
-       SoundAssetWriter (SoundAsset *, boost::filesystem::path, Standard standard);
+       SoundAssetWriter (SoundAsset *, boost::filesystem::path);
 
        void write_current_frame ();
 
index 4bbf7268568d0c7366fc5fecc0f6427b4703743a..e5ed363eeceaffeb995da45d5e39ee7139e8744f 100644 (file)
@@ -70,17 +70,16 @@ StereoPictureAsset::StereoPictureAsset (boost::filesystem::path file)
        _id = read_writer_info (info);
 }
 
-StereoPictureAsset::StereoPictureAsset (Fraction edit_rate)
-       : PictureAsset
-         (edit_rate)
+StereoPictureAsset::StereoPictureAsset (Fraction edit_rate, Standard standard)
+       : PictureAsset (edit_rate, standard)
 {
 
 }
 
 shared_ptr<PictureAssetWriter>
-StereoPictureAsset::start_write (boost::filesystem::path file, Standard standard, bool overwrite)
+StereoPictureAsset::start_write (boost::filesystem::path file, bool overwrite)
 {
-       return shared_ptr<StereoPictureAssetWriter> (new StereoPictureAssetWriter (this, file, standard, overwrite));
+       return shared_ptr<StereoPictureAssetWriter> (new StereoPictureAssetWriter (this, file, overwrite));
 }
 
 shared_ptr<StereoPictureAssetReader>
index fbf4e61817ef78f3bd851dd58b03ba083f4b5590..704ea1d4598527b2f03b0dc9e23f6407feebc2e9 100644 (file)
@@ -44,10 +44,10 @@ class StereoPictureAsset : public PictureAsset
 {
 public:
        explicit StereoPictureAsset (boost::filesystem::path file);
-       explicit StereoPictureAsset (Fraction edit_rate);
+       explicit StereoPictureAsset (Fraction edit_rate, Standard standard);
 
        /** Start a progressive write to a StereoPictureAsset */
-       boost::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path file, Standard, bool);
+       boost::shared_ptr<PictureAssetWriter> start_write (boost::filesystem::path file, bool);
        boost::shared_ptr<StereoPictureAssetReader> start_read () const;
 
        bool equals (
index 09faec287bf787e6de9a89466cf700c5ba289ffe..db770e8bc05fc15c029dde3e132a1e5dca2b328f 100644 (file)
@@ -50,8 +50,8 @@ struct StereoPictureAssetWriter::ASDCPState : public ASDCPStateBase
        ASDCP::JP2K::MXFSWriter mxf_writer;
 };
 
-StereoPictureAssetWriter::StereoPictureAssetWriter (PictureAsset* mxf, boost::filesystem::path file, Standard standard, bool overwrite)
-       : PictureAssetWriter (mxf, file, standard, overwrite)
+StereoPictureAssetWriter::StereoPictureAssetWriter (PictureAsset* mxf, boost::filesystem::path file, bool overwrite)
+       : PictureAssetWriter (mxf, file, overwrite)
        , _state (new StereoPictureAssetWriter::ASDCPState)
        , _next_eye (EYE_LEFT)
 {
@@ -61,7 +61,7 @@ StereoPictureAssetWriter::StereoPictureAssetWriter (PictureAsset* mxf, boost::fi
 void
 StereoPictureAssetWriter::start (uint8_t const * data, int size)
 {
-       dcp::start (this, _state, _standard, _picture_asset, data, size);
+       dcp::start (this, _state, _picture_asset, data, size);
        _picture_asset->set_frame_rate (Fraction (_picture_asset->edit_rate().numerator * 2, _picture_asset->edit_rate().denominator));
 }
 
index 1b0956d3d4e14d918ee8bcc71c63d0d841b6a5d7..82b78757c42d3134975e32f1f9a8408a13a552a2 100644 (file)
@@ -65,7 +65,7 @@ public:
 private:
        friend class StereoPictureAsset;
 
-       StereoPictureAssetWriter (PictureAsset *, boost::filesystem::path file, Standard, bool);
+       StereoPictureAssetWriter (PictureAsset *, boost::filesystem::path file, bool);
        void start (uint8_t const *, int);
 
        /* do this with an opaque pointer so we don't have to include
index 513f6833aa8e643b2c9fbcde76aabcec332c3fe1..7723a3896440fa5c51671e6c4716cdae3bb2848e 100644 (file)
@@ -65,18 +65,18 @@ make_simple (boost::filesystem::path path)
        cpl->set_content_version_label_text ("81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00");
        cpl->set_metadata (xml_meta);
 
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
+       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
        mp->set_metadata (mxf_meta);
-       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write (path / "video.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write (path / "video.mxf", false);
        dcp::File j2c ("test/data/32x32_red_square.j2c");
        for (int i = 0; i < 24; ++i) {
                picture_writer->write (j2c.data (), j2c.size ());
        }
        picture_writer->finalize ();
 
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1));
+       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1, dcp::SMPTE));
        ms->set_metadata (mxf_meta);
-       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write (path / "audio.mxf", dcp::SMPTE);
+       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write (path / "audio.mxf");
 
        SF_INFO info;
        info.format = 0;
@@ -143,9 +143,9 @@ BOOST_AUTO_TEST_CASE (dcp_test2)
        cpl->set_content_version_label_text ("81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00");
        cpl->set_metadata (xml_meta);
 
-       shared_ptr<dcp::StereoPictureAsset> mp (new dcp::StereoPictureAsset (dcp::Fraction (24, 1)));
+       shared_ptr<dcp::StereoPictureAsset> mp (new dcp::StereoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
        mp->set_metadata (mxf_meta);
-       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write ("build/test/DCP/dcp_test2/video.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write ("build/test/DCP/dcp_test2/video.mxf", false);
        dcp::File j2c ("test/data/32x32_red_square.j2c");
        for (int i = 0; i < 24; ++i) {
                /* Left */
@@ -155,9 +155,9 @@ BOOST_AUTO_TEST_CASE (dcp_test2)
        }
        picture_writer->finalize ();
 
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1));
+       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1, dcp::SMPTE));
        ms->set_metadata (mxf_meta);
-       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/dcp_test2/audio.mxf", dcp::SMPTE);
+       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/dcp_test2/audio.mxf");
 
        SF_INFO info;
        info.format = 0;
@@ -244,18 +244,18 @@ BOOST_AUTO_TEST_CASE (dcp_test5)
        cpl->set_content_version_label_text ("81fb54df-e1bf-4647-8788-ea7ba154375b_2012-07-17T04:45:18+00:00");
        cpl->set_metadata (xml_meta);
 
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
+       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
        mp->set_metadata (mxf_meta);
-       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write ("build/test/DCP/dcp_test5/video.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write ("build/test/DCP/dcp_test5/video.mxf", false);
        dcp::File j2c ("test/data/32x32_red_square.j2c");
        for (int i = 0; i < 24; ++i) {
                picture_writer->write (j2c.data (), j2c.size ());
        }
        picture_writer->finalize ();
 
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1));
+       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1, dcp::SMPTE));
        ms->set_metadata (mxf_meta);
-       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/dcp_test5/audio.mxf", dcp::SMPTE);
+       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/dcp_test5/audio.mxf");
 
        SF_INFO info;
        info.format = 0;
index 64b4ecd915aab1d6926655b5f0d5fb9d84c9a221..42b93bb0830b885bedff702069e4eac1cae1c04e 100644 (file)
@@ -78,21 +78,21 @@ BOOST_AUTO_TEST_CASE (encryption_test)
 
        dcp::Key key;
 
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
+       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
        mp->set_metadata (mxf_metadata);
        mp->set_key (key);
 
-       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/DCP/encryption_test/video.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/DCP/encryption_test/video.mxf", false);
        dcp::File j2c ("test/data/32x32_red_square.j2c");
        for (int i = 0; i < 24; ++i) {
                writer->write (j2c.data (), j2c.size ());
        }
        writer->finalize ();
 
-       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1));
+       shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset (dcp::Fraction (24, 1), 48000, 1, dcp::SMPTE));
        ms->set_metadata (mxf_metadata);
        ms->set_key (key);
-       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/encryption_test/audio.mxf", dcp::SMPTE);
+       shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write ("build/test/DCP/encryption_test/audio.mxf");
 
        SF_INFO info;
        info.format = 0;
index 1713963b39effa4507578e2ee33fe9511ce586de..6bc1dbef0a2b95c60b4c3c227a4282abfdbbe77c 100644 (file)
@@ -45,8 +45,8 @@ check (unsigned int* seed, shared_ptr<dcp::PictureAssetWriter> writer, string ha
 /** Test the hashing of data written to JPEG2000 MXFs with some random inputs */
 BOOST_AUTO_TEST_CASE (frame_info_hash_test)
 {
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
-       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/frame_info_hash_test.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
+       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/frame_info_hash_test.mxf", false);
 
        unsigned int seed = 42;
 
index 6c4f6ac918c08a217dce12bf4692145f396b0f97..8bd15aba47202bbc810449a36af4fdd757f6826e 100644 (file)
@@ -48,8 +48,8 @@ BOOST_AUTO_TEST_CASE (recovery)
 
        boost::filesystem::remove_all ("build/test/baz");
        boost::filesystem::create_directories ("build/test/baz");
-       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
-       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/baz/video1.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::MonoPictureAsset> mp (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
+       shared_ptr<dcp::PictureAssetWriter> writer = mp->start_write ("build/test/baz/video1.mxf", false);
 
        int written_size = 0;
        for (int i = 0; i < 24; ++i) {
@@ -77,8 +77,8 @@ BOOST_AUTO_TEST_CASE (recovery)
        Kumu::ResetTestRNG ();
 #endif
 
-       mp.reset (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
-       writer = mp->start_write ("build/test/baz/video2.mxf", dcp::SMPTE, true);
+       mp.reset (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
+       writer = mp->start_write ("build/test/baz/video2.mxf", true);
 
        writer->write (data, size);
 
index 505477a323ca009348aa8e9b151dc99faccd3335..567d3aa45bae3add498fc7b1d9e387fb6c5c944e 100644 (file)
@@ -53,8 +53,8 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
        boost::filesystem::path work_dir = "build/test/round_trip_test";
        boost::filesystem::create_directory (work_dir);
 
-       shared_ptr<dcp::MonoPictureAsset> asset_A (new dcp::MonoPictureAsset (dcp::Fraction (24, 1)));
-       shared_ptr<dcp::PictureAssetWriter> writer = asset_A->start_write (work_dir / "video.mxf", dcp::SMPTE, false);
+       shared_ptr<dcp::MonoPictureAsset> asset_A (new dcp::MonoPictureAsset (dcp::Fraction (24, 1), dcp::SMPTE));
+       shared_ptr<dcp::PictureAssetWriter> writer = asset_A->start_write (work_dir / "video.mxf", false);
        dcp::File j2c ("test/data/32x32_red_square.j2c");
        for (int i = 0; i < 24; ++i) {
                writer->write (j2c.data (), j2c.size ());