Add another believed-correct subtitle timing fix.
[dcpomatic.git] / src / lib / active_text.h
index 10ce30f08476711a511f9d7ee53b09fb5c30d7e1..b54957b3ff270da744b6f6e29e4bb4a722f63277 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "dcpomatic_time.h"
 #include "player_text.h"
-#include <boost/noncopyable.hpp>
+#include <boost/thread/mutex.hpp>
 #include <list>
 #include <map>
 
@@ -33,16 +33,20 @@ class TextContent;
 /** @class ActiveText
  *  @brief A class to maintain information on active subtitles for Player.
  */
-class ActiveText : public boost::noncopyable
+class ActiveText
 {
 public:
-       std::list<PlayerText> get (DCPTimePeriod period) const;
-       std::list<PlayerText> get_burnt (DCPTimePeriod period, bool always_burn_captions) const;
-       void clear_before (DCPTime time);
+       ActiveText () {}
+
+       ActiveText (ActiveText const&) = delete;
+       ActiveText& operator= (ActiveText const&) = delete;
+
+       std::list<PlayerText> get_burnt (dcpomatic::DCPTimePeriod period, bool always_burn_captions) const;
+       void clear_before (dcpomatic::DCPTime time);
        void clear ();
-       void add_from (boost::weak_ptr<const TextContent> content, PlayerText ps, DCPTime from);
-       std::pair<PlayerText, DCPTime> add_to (boost::weak_ptr<const TextContent> content, DCPTime to);
-       bool have (boost::weak_ptr<const TextContent> content) const;
+       void add_from (std::weak_ptr<const TextContent> content, PlayerText ps, dcpomatic::DCPTime from);
+       std::pair<PlayerText, dcpomatic::DCPTime> add_to (std::weak_ptr<const TextContent> content, dcpomatic::DCPTime to);
+       bool have (std::weak_ptr<const TextContent> content) const;
 
 private:
        class Period
@@ -50,19 +54,18 @@ private:
        public:
                Period () {}
 
-               Period (PlayerText s, DCPTime f)
+               Period (PlayerText s, dcpomatic::DCPTime f)
                        : subs (s)
                        , from (f)
                {}
 
                PlayerText subs;
-               DCPTime from;
-               boost::optional<DCPTime> to;
+               dcpomatic::DCPTime from;
+               boost::optional<dcpomatic::DCPTime> to;
        };
 
-       typedef std::map<boost::weak_ptr<const TextContent>, std::list<Period> > Map;
-
-       void add (DCPTimePeriod period, std::list<PlayerText>& pc, std::list<Period> p) const;
+       typedef std::map<std::weak_ptr<const TextContent>, std::list<Period>, std::owner_less<std::weak_ptr<const TextContent>>> Map;
 
+       mutable boost::mutex _mutex;
        Map _data;
 };