Rename SafeStringStream -> locked_stringstream. Bump deps for removal of stringstream.
[dcpomatic.git] / src / lib / content_subtitle.h
index 8c266f4835da680495a3f07414d98b65935e54bc..8c0f29f4e29f0faaf453b41c957fc535684cc22a 100644 (file)
@@ -1,75 +1,73 @@
 /*
     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
+    DCP-o-matic is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
 #ifndef DCPOMATIC_CONTENT_SUBTITLE_H
 #define DCPOMATIC_CONTENT_SUBTITLE_H
 
-#include <list>
-#include <dcp/subtitle_string.h>
 #include "dcpomatic_time.h"
 #include "rect.h"
+#include "image_subtitle.h"
+#include <dcp/subtitle_string.h>
+#include <list>
 
 class Image;
 
 class ContentSubtitle
 {
 public:
-       virtual ContentTime from () const = 0;
-       virtual ContentTime to () const = 0;
+       ContentSubtitle (ContentTimePeriod p)
+               : _period (p)
+       {}
+
+       ContentTimePeriod period () const {
+               return _period;
+       }
+
+private:
+       ContentTimePeriod _period;
 };
 
 class ContentImageSubtitle : public ContentSubtitle
 {
 public:
-       ContentImageSubtitle (ContentTime f, ContentTime t, boost::shared_ptr<Image> im, dcpomatic::Rect<double> r)
-               : image (im)
-               , rectangle (r)
-               , _from (f)
-               , _to (t)
+       ContentImageSubtitle (ContentTimePeriod p, boost::shared_ptr<Image> im, dcpomatic::Rect<double> r)
+               : ContentSubtitle (p)
+               , sub (im, r)
        {}
 
-       ContentTime from () const {
-               return _from;
-       }
-
-       ContentTime to () const {
-               return _to;
-       }
-       
-       boost::shared_ptr<Image> image;
-       dcpomatic::Rect<double> rectangle;
-
-private:
-       ContentTime _from;
-       ContentTime _to;
+       /* Our subtitle, with its rectangle unmodified by any offsets or scales that the content specifies */
+       ImageSubtitle sub;
 };
 
+/** A text subtitle.  We store the time period separately (as well as in the dcp::SubtitleStrings)
+ *  as the dcp::SubtitleString timings are sometimes quite heavily quantised and this causes problems
+ *  when we want to compare the quantised periods to the unquantised ones.
+ */
 class ContentTextSubtitle : public ContentSubtitle
 {
 public:
-       ContentTextSubtitle (std::list<dcp::SubtitleString> s)
-               : subs (s)
+       ContentTextSubtitle (ContentTimePeriod p, std::list<dcp::SubtitleString> s)
+               : ContentSubtitle (p)
+               , subs (s)
        {}
 
-       ContentTime from () const;
-       ContentTime to () const;
-       
        std::list<dcp::SubtitleString> subs;
 };