Move common parts of text/image subtitle out to a base class.
authorCarl Hetherington <cth@carlh.net>
Fri, 1 Jun 2018 00:11:32 +0000 (01:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 7 Jul 2018 20:22:27 +0000 (21:22 +0100)
src/subtitle.cc [new file with mode: 0644]
src/subtitle.h [new file with mode: 0644]
src/subtitle_string.cc
src/subtitle_string.h
src/wscript

diff --git a/src/subtitle.cc b/src/subtitle.cc
new file mode 100644 (file)
index 0000000..6e3a291
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+
+    This file is part of libdcp.
+
+    libdcp 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.
+
+    libdcp 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 libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
+*/
+
+#include "subtitle.h"
+#include "dcp_time.h"
+
+using namespace dcp;
+
+/** @param v_position Vertical position as a fraction of the screen height (between 0 and 1) from v_align */
+Subtitle::Subtitle (
+       Time in,
+       Time out,
+       float h_position,
+       HAlign h_align,
+       float v_position,
+       VAlign v_align,
+       Time fade_up_time,
+       Time fade_down_time
+       )
+       : _in (in)
+       , _out (out)
+       , _h_position (h_position)
+       , _h_align (h_align)
+       , _v_position (v_position)
+       , _v_align (v_align)
+       , _fade_up_time (fade_up_time)
+       , _fade_down_time (fade_down_time)
+{
+
+}
diff --git a/src/subtitle.h b/src/subtitle.h
new file mode 100644 (file)
index 0000000..32f7457
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+
+    This file is part of libdcp.
+
+    libdcp 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.
+
+    libdcp 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 libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
+*/
+
+/** @file  src/subtitle.h
+ *  @brief Subtitle class.
+ */
+
+#include "dcp_time.h"
+
+namespace dcp {
+
+class Subtitle
+{
+public:
+       Subtitle (
+               Time in,
+               Time out,
+               float h_position,
+               HAlign h_align,
+               float v_position,
+               VAlign v_align,
+               Time fade_up_time,
+               Time fade_down_time
+               );
+
+       Time in () const {
+               return _in;
+       }
+
+       Time out () const {
+               return _out;
+       }
+
+
+       float h_position () const {
+               return _h_position;
+       }
+
+       HAlign h_align () const {
+               return _h_align;
+       }
+
+       /** @return vertical position as a proportion of the screen height from the
+        *  vertical alignment point.
+        *  (between 0 and 1)
+        */
+       float v_position () const {
+               return _v_position;
+       }
+
+       VAlign v_align () const {
+               return _v_align;
+       }
+
+       Time fade_up_time () const {
+               return _fade_up_time;
+       }
+
+       Time fade_down_time () const {
+               return _fade_down_time;
+       }
+
+       void set_in (Time i) {
+               _in = i;
+       }
+
+       void set_out (Time o) {
+               _out = o;
+       }
+
+       void set_h_position (float p) {
+               _h_position = p;
+       }
+
+       /** @param p New vertical position as a proportion of the screen height
+        *  from the top (between 0 and 1)
+        */
+       void set_v_position (float p) {
+               _v_position = p;
+       }
+
+       void set_fade_up_time (dcp::Time t) {
+               _fade_up_time = t;
+       }
+
+       void set_fade_down_time (dcp::Time t) {
+               _fade_down_time = t;
+       }
+
+
+protected:
+       Time _in;
+       Time _out;
+       /** Horizontal position as a proportion of the screen width from the _h_align
+        *  (between 0 and 1)
+        */
+       float _h_position;
+       HAlign _h_align;
+       /** Vertical position as a proportion of the screen height from the _v_align
+        *  (between 0 and 1)
+        */
+       float _v_position;
+       VAlign _v_align;
+       Time _fade_up_time;
+       Time _fade_down_time;
+};
+
+}
index 5a22475c65ff9f3c9a91ab6116bddd2865a49406..6d1e8cdb10e99bd38a9275bfb67e710ac310f072 100644 (file)
@@ -62,25 +62,18 @@ SubtitleString::SubtitleString (
        Time fade_up_time,
        Time fade_down_time
        )
-       : _font (font)
+       : Subtitle (in, out, h_position, h_align, v_position, v_align, fade_up_time, fade_down_time)
+       , _font (font)
        , _italic (italic)
        , _bold (bold)
        , _underline (underline)
        , _colour (colour)
        , _size (size)
        , _aspect_adjust (aspect_adjust)
-       , _in (in)
-       , _out (out)
-       , _h_position (h_position)
-       , _h_align (h_align)
-       , _v_position (v_position)
-       , _v_align (v_align)
        , _direction (direction)
        , _text (text)
        , _effect (effect)
        , _effect_colour (effect_colour)
-       , _fade_up_time (fade_up_time)
-       , _fade_down_time (fade_down_time)
 {
 
 }
index 47e4fed15593880473817fa6d5c1d25af51a6124..fc88c15b475ae7ba29e10e9b5e59017398c97f9e 100644 (file)
@@ -39,6 +39,7 @@
 #define LIBDCP_SUBTITLE_STRING_H
 
 #include "types.h"
+#include "subtitle.h"
 #include "dcp_time.h"
 #include <boost/optional.hpp>
 #include <string>
@@ -48,7 +49,7 @@ namespace dcp {
 /** @class SubtitleString
  *  @brief A single line of subtitle text with all the associated attributes.
  */
-class SubtitleString
+class SubtitleString : public Subtitle
 {
 public:
        SubtitleString (
@@ -94,38 +95,10 @@ public:
                return _colour;
        }
 
-       Time in () const {
-               return _in;
-       }
-
-       Time out () const {
-               return _out;
-       }
-
        std::string text () const {
                return _text;
        }
 
-       float h_position () const {
-               return _h_position;
-       }
-
-       HAlign h_align () const {
-               return _h_align;
-       }
-
-       /** @return vertical position as a proportion of the screen height from the
-        *  vertical alignment point.
-        *  (between 0 and 1)
-        */
-       float v_position () const {
-               return _v_position;
-       }
-
-       VAlign v_align () const {
-               return _v_align;
-       }
-
        Direction direction () const {
                return _direction;
        }
@@ -138,14 +111,6 @@ public:
                return _effect_colour;
        }
 
-       Time fade_up_time () const {
-               return _fade_up_time;
-       }
-
-       Time fade_down_time () const {
-               return _fade_down_time;
-       }
-
        int size () const {
                return _size;
        }
@@ -160,25 +125,6 @@ public:
                return _aspect_adjust;
        }
 
-       void set_in (Time i) {
-               _in = i;
-       }
-
-       void set_out (Time o) {
-               _out = o;
-       }
-
-       void set_h_position (float p) {
-               _h_position = p;
-       }
-
-       /** @param p New vertical position as a proportion of the screen height
-        *  from the top (between 0 and 1)
-        */
-       void set_v_position (float p) {
-               _v_position = p;
-       }
-
        void set_size (int s) {
                _size = s;
        }
@@ -203,14 +149,6 @@ public:
                _effect_colour = c;
        }
 
-       void set_fade_up_time (dcp::Time t) {
-               _fade_up_time = t;
-       }
-
-       void set_fade_down_time (dcp::Time t) {
-               _fade_down_time = t;
-       }
-
 private:
        /** font ID */
        boost::optional<std::string> _font;
@@ -227,24 +165,10 @@ private:
         */
        int _size;
        float _aspect_adjust;
-       Time _in;
-       Time _out;
-       /** Horizontal position as a proportion of the screen width from the _h_align
-        *  (between 0 and 1)
-        */
-       float _h_position;
-       HAlign _h_align;
-       /** Vertical position as a proportion of the screen height from the _v_align
-        *  (between 0 and 1)
-        */
-       float _v_position;
-       VAlign _v_align;
        Direction _direction;
        std::string _text;
        Effect _effect;
        Colour _effect_colour;
-       Time _fade_up_time;
-       Time _fade_down_time;
 };
 
 bool operator== (SubtitleString const & a, SubtitleString const & b);
index 8be5b7edc099485f185a858f5661842638822a4c..b08d3b85e836a7f7b05a38f26463edeef185dbae 100644 (file)
@@ -93,6 +93,7 @@ def build(bld):
              stereo_picture_asset.cc
              stereo_picture_asset_writer.cc
              stereo_picture_frame.cc
+             subtitle.cc
              subtitle_asset.cc
              subtitle_asset_internal.cc
              subtitle_string.cc
@@ -171,6 +172,7 @@ def build(bld):
               stereo_picture_asset_reader.h
               stereo_picture_asset_writer.h
               stereo_picture_frame.h
+              subtitle.h
               subtitle_asset.h
               subtitle_string.h
               transfer_function.h