Require instrinsic duration of ReelMarkersAsset to be specified on construction.
authorCarl Hetherington <cth@carlh.net>
Sun, 17 Jan 2021 23:24:21 +0000 (00:24 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 17 Jan 2021 23:24:21 +0000 (00:24 +0100)
We need the intrinsic duration to match other assets in the reel,
so we can't just calculate it from the markers.

src/reel_markers_asset.cc
src/reel_markers_asset.h

index c0ad6b57a8a5a7ca5278a2653dd106d3f8c41d26..ba0021cfc156fb7c13fef27befc3973f74744493 100644 (file)
@@ -44,8 +44,8 @@ using boost::optional;
 using std::shared_ptr;
 using namespace dcp;
 
-ReelMarkersAsset::ReelMarkersAsset (Fraction edit_rate, int64_t entry_point)
-       : ReelAsset (make_uuid(), edit_rate, 0, entry_point)
+ReelMarkersAsset::ReelMarkersAsset (Fraction edit_rate, int64_t intrinsic_duration, int64_t entry_point)
+       : ReelAsset (make_uuid(), edit_rate, intrinsic_duration, entry_point)
 {
 
 }
@@ -70,14 +70,12 @@ void
 ReelMarkersAsset::set (Marker m, Time t)
 {
        _markers[m] = t;
-       update_duration ();
 }
 
 void
 ReelMarkersAsset::unset (Marker m)
 {
        _markers.erase (m);
-       update_duration ();
 }
 
 optional<Time>
@@ -90,17 +88,6 @@ ReelMarkersAsset::get (Marker m) const
        return i->second;
 }
 
-void
-ReelMarkersAsset::update_duration ()
-{
-       int const tcr = edit_rate().numerator / edit_rate().denominator;
-       _intrinsic_duration = 0;
-       for (map<Marker, Time>::const_iterator i = _markers.begin(); i != _markers.end(); ++i) {
-               _intrinsic_duration = max(_intrinsic_duration, i->second.as_editable_units(tcr));
-       }
-       _duration = _intrinsic_duration;
-}
-
 xmlpp::Node*
 ReelMarkersAsset::write_to_cpl (xmlpp::Node* node, Standard standard) const
 {
index 0066a27d100daac9a9966a8af9e6409019d6ecac..465426141af67bae82f54ef19720403c300472f1 100644 (file)
@@ -40,7 +40,7 @@ namespace dcp {
 class ReelMarkersAsset : public ReelAsset
 {
 public:
-       ReelMarkersAsset (Fraction edit_rate, int64_t entry_point);
+       ReelMarkersAsset (Fraction edit_rate, int64_t intrinsic_duration, int64_t entry_point);
        explicit ReelMarkersAsset (std::shared_ptr<const cxml::Node>);
 
        xmlpp::Node* write_to_cpl (xmlpp::Node* node, Standard standard) const;
@@ -57,8 +57,6 @@ protected:
        std::string cpl_node_name (Standard) const;
 
 private:
-       void update_duration ();
-
        std::map<Marker, Time> _markers;
 };