Noisy change to get film into AudioContent::modify_trim_start().
[dcpomatic.git] / src / lib / content.h
index 550b3cd9cf52770e7a9acb7786a86dac3829130d..5b804b3318aabde130272ebeb55afaeb66cd948e 100644 (file)
 #ifndef DCPOMATIC_CONTENT_H
 #define DCPOMATIC_CONTENT_H
 
-#include "types.h"
-#include "signaller.h"
-#include "dcpomatic_time.h"
+
 #include "change_signaller.h"
+#include "dcpomatic_time.h"
+#include "signaller.h"
+#include "types.h"
 #include "user_property.h"
 #include <libcxml/cxml.h>
 #include <boost/filesystem.hpp>
@@ -152,7 +153,7 @@ public:
                return _position;
        }
 
-       void set_trim_start (dcpomatic::ContentTime);
+       void set_trim_start(std::shared_ptr<const Film> film, dcpomatic::ContentTime);
 
        dcpomatic::ContentTime trim_start () const {
                boost::mutex::scoped_lock lm (_mutex);
@@ -178,7 +179,7 @@ public:
                return _video_frame_rate;
        }
 
-       void set_video_frame_rate (double r);
+       void set_video_frame_rate(std::shared_ptr<const Film> film, double r);
        void unset_video_frame_rate ();
 
        double active_video_frame_rate (std::shared_ptr<const Film> film) const;
@@ -191,6 +192,10 @@ public:
 
        std::string calculate_digest () const;
 
+       virtual bool can_be_played () const {
+               return true;
+       }
+
        /* ChangeType::PENDING and ChangeType::CANCELLED may be emitted from any thread; ChangeType::DONE always from GUI thread */
        boost::signals2::signal<void (ChangeType, std::weak_ptr<Content>, int, bool)> Change;
 
@@ -202,6 +207,9 @@ public:
        std::shared_ptr<TextContent> only_text () const;
        std::shared_ptr<TextContent> text_of_original_type (TextType type) const;
 
+       /** @return true if this content has changed since it was last examined */
+       bool changed () const;
+
 protected:
 
        virtual void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty> &) const;
@@ -218,6 +226,7 @@ private:
        friend struct best_dcp_frame_rate_test_single;
        friend struct best_dcp_frame_rate_test_double;
        friend struct audio_sampling_rate_test;
+       friend struct subtitle_font_id_change_test2;
        template<class, class> friend class ChangeSignaller;
 
        void signal_change (ChangeType, int);
@@ -235,7 +244,7 @@ private:
         *  else (either some video happening at the same time, or the rate of the DCP).
         */
        boost::optional<double> _video_frame_rate;
-       bool _change_signals_frequent;
+       bool _change_signals_frequent = false;
 };