Move edit rate and intrinsic duration out of MXF.
authorCarl Hetherington <cth@carlh.net>
Thu, 4 Jun 2015 16:16:22 +0000 (17:16 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 5 Jun 2015 13:34:43 +0000 (14:34 +0100)
src/mono_picture_mxf_writer.cc
src/mxf.cc
src/mxf.h
src/mxf_writer.cc
src/picture_mxf.cc
src/picture_mxf.h
src/sound_mxf.cc
src/sound_mxf.h
src/sound_mxf_writer.cc
src/stereo_picture_mxf_writer.cc

index 01292876a0ef0438469b8719134cb7c9d4341e5d..7d8335c0f8d48245120ab486db882bec54ebb16f 100644 (file)
@@ -105,6 +105,7 @@ MonoPictureMXFWriter::finalize ()
                boost::throw_exception (MXFFileError ("error in finalizing video MXF", _mxf->file().string(), r));
        }
 
+       _picture_mxf->_intrinsic_duration = _frames_written;
        PictureMXFWriter::finalize ();
 }
 
index ba614202aafb37797bd1aae6e02f4f3bc9d69f29..756f099a2e8d8b31d0144c4f2535d7a5d601446a 100644 (file)
@@ -42,22 +42,19 @@ using boost::shared_ptr;
 using boost::dynamic_pointer_cast;
 using namespace dcp;
 
-MXF::MXF (Fraction edit_rate)
-       : _edit_rate (edit_rate)
-       , _intrinsic_duration (0)
-       , _encryption_context (0)
+MXF::MXF ()
+       : _encryption_context (0)
        , _decryption_context (0)
 {
-       /* _intrinsic_duration must be set up up by a subclass */
+
 }
 
 MXF::MXF (boost::filesystem::path file)
        : Asset (file)
-       , _intrinsic_duration (0)
        , _encryption_context (0)
        , _decryption_context (0)
 {
-       /* _edit_rate and _intrinsic_duration must be set up up by a subclass */
+
 }
 
 MXF::~MXF ()
@@ -104,16 +101,6 @@ MXF::equals (shared_ptr<const Asset> other, EqualityOptions opt, NoteHandler not
                return false;
        }
        
-       if (_edit_rate != other_mxf->_edit_rate) {
-               note (DCP_ERROR, "MXF: edit rates differ");
-               return false;
-       }
-       
-       if (_intrinsic_duration != other_mxf->_intrinsic_duration) {
-               note (DCP_ERROR, String::compose ("MXF: intrinsic durations differ (%1 vs %2)", _intrinsic_duration, other_mxf->_intrinsic_duration));
-               return false;
-       }
-
        if (_file.leaf() != other_mxf->file().leaf()) {
                if (!opt.mxf_filenames_can_differ) {
                        note (DCP_ERROR, "MXF: filenames differ");
index 1b5b03d6868779a0f517e182642df41bcf2701ad..65b399b653a424cf9028ff0b2f576ee26b86886a 100644 (file)
--- a/src/mxf.h
+++ b/src/mxf.h
@@ -47,7 +47,7 @@ class MXFMetadata;
 class MXF : public Asset
 {
 public:
-       MXF (Fraction edit_rate);
+       MXF ();
        MXF (boost::filesystem::path file);
        ~MXF ();
 
@@ -103,17 +103,6 @@ public:
        MXFMetadata metadata () const {
                return _metadata;
        }
-
-       Fraction edit_rate () const {
-               return _edit_rate;
-       }
-
-       /** @return The total length of this content in video frames.
-        *  The amount of content presented may be less than this.
-        */
-       int64_t intrinsic_duration () const {
-               return _intrinsic_duration;
-       }
        
 protected:
        friend class MXFWriter;
@@ -122,12 +111,6 @@ protected:
        std::string pkl_type (Standard standard) const;
        void read_writer_info (ASDCP::WriterInfo const &);
        
-       Fraction _edit_rate;
-       /** The total length of this content in video frames.  The amount of
-        *  content presented may be less than this.
-        */
-       int64_t _intrinsic_duration;
-       
        ASDCP::AESEncContext* _encryption_context;
        ASDCP::AESDecContext* _decryption_context;
        /** ID of the key used for encryption/decryption, or an empty string */
index 93f3ab071af9889be729accec70b9edb7c79478f..d4aba72f0f4e07caadaabfba0f87445a04204b65 100644 (file)
@@ -50,5 +50,4 @@ MXFWriter::finalize ()
 {
        DCP_ASSERT (!_finalized);
        _finalized = true;
-       _mxf->_intrinsic_duration = _frames_written;
 }
index 46aa7752847aa539aaeb790194ccfcf7b293a311..f3a1cd0b610f9284b64c8440688013bd6197ef18 100644 (file)
@@ -48,12 +48,14 @@ using namespace dcp;
 
 PictureMXF::PictureMXF (boost::filesystem::path file)
        : MXF (file)
+       , _intrinsic_duration (0)
 {
 
 }
 
 PictureMXF::PictureMXF (Fraction edit_rate)
-       : MXF (edit_rate)
+       : _edit_rate (edit_rate)
+       , _intrinsic_duration (0)
 {
 
 }
index 75119367986cab8dc8edd05e4e3b280c79fb2f3b..f2c3192ebb74fc0dbdd0690a1bc54da3a3a9653e 100644 (file)
@@ -81,7 +81,17 @@ public:
                _screen_aspect_ratio = r;
        }
 
+       Fraction edit_rate () const {
+               return _edit_rate;
+       }
+
+       int64_t intrinsic_duration () const {
+               return _intrinsic_duration;
+       }
+
 protected:
+       friend class MonoPictureMXFWriter;
+       friend class StereoPictureMXFWriter;
 
        bool frame_buffer_equals (
                int frame, EqualityOptions opt, NoteHandler note,
@@ -96,6 +106,11 @@ protected:
 
        void read_picture_descriptor (ASDCP::JP2K::PictureDescriptor const &);
 
+       Fraction _edit_rate;
+       /** The total length of this content in video frames.  The amount of
+        *  content presented may be less than this.
+        */
+       int64_t _intrinsic_duration;
        /** picture size in pixels */
        Size _size;
        Fraction _frame_rate;
index e338c16165abb2db3b28e519d3edd2f7270d88b9..6e952bd0d34514d9ccfd975972eadc3281ab4a9c 100644 (file)
@@ -44,6 +44,7 @@ using namespace dcp;
 
 SoundMXF::SoundMXF (boost::filesystem::path file)
        : MXF (file)
+       , _intrinsic_duration (0)
        , _channels (0)
        , _sampling_rate (0)
 {
@@ -74,7 +75,8 @@ SoundMXF::SoundMXF (boost::filesystem::path file)
 }
 
 SoundMXF::SoundMXF (Fraction edit_rate, int sampling_rate, int channels)
-       : MXF (edit_rate)
+       : _edit_rate (edit_rate)
+       , _intrinsic_duration (0)
        , _channels (channels)
        , _sampling_rate (sampling_rate)
 {
index 80585055ae13b798fe84e6f160ce58e09326020f..a8746311c33636f1e549a473860602c0acb1fb25 100644 (file)
@@ -63,11 +63,26 @@ public:
                return _sampling_rate;
        }
 
+       Fraction edit_rate () const {
+               return _edit_rate;
+       }
+
+       int64_t intrinsic_duration () const {
+               return _intrinsic_duration;
+       }
+       
 private:
+       friend class SoundMXFWriter;
+       
        std::string asdcp_kind () const {
                return "Sound";
        }
 
+       Fraction _edit_rate;
+       /** The total length of this content in video frames.  The amount of
+        *  content presented may be less than this.
+        */
+       int64_t _intrinsic_duration;
        int _channels;      ///< number of channels
        int _sampling_rate; ///< sampling rate in Hz
 };
index 52547b16b973f589424cea6d54bbda0b88ec9fb1..19250d9d1ffda1ca58423e94d239ba632efde145 100644 (file)
@@ -117,5 +117,6 @@ SoundMXFWriter::finalize ()
                boost::throw_exception (MiscError ("could not finalise audio MXF"));
        }
 
+       _sound_mxf->_intrinsic_duration = _frames_written;
        MXFWriter::finalize ();
 }
index 2c0468f6956d5e341465dfaa5a7c87c0df6694e2..a4bd7d9f7c87da3ba4ef679cc7bd12cf3ecfe3fd 100644 (file)
@@ -118,5 +118,6 @@ StereoPictureMXFWriter::finalize ()
                boost::throw_exception (MXFFileError ("error in finalizing video MXF", _mxf->file().string(), r));
        }
 
+       _picture_mxf->_intrinsic_duration = _frames_written;
        PictureMXFWriter::finalize ();
 }