Support more detailed horizontal positioning coming from libsub.
authorCarl Hetherington <cth@carlh.net>
Fri, 28 Jul 2017 16:04:03 +0000 (17:04 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 28 Jul 2017 16:04:03 +0000 (17:04 +0100)
ChangeLog
cscript
src/lib/ffmpeg_decoder.cc
src/lib/subtitle_decoder.cc

index 19f656509c0b44392d801993886d4c9569b73a30..a64e2fec6833e6b14ee1669a73cb942df1dc8577 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2017-07-28  Carl Hetherington  <cth@carlh.net>
 
+       * Support a few more SSA style tags.
+
        * Updated de_DE translation from Carsten Kurz.
 
        * Version 2.11.15 released.
diff --git a/cscript b/cscript
index 0a8604fc60f0f482f6592d5900c107f97ff3499c..6daf34f14279812a695d8c6be93df0b603d6bb8f 100644 (file)
--- a/cscript
+++ b/cscript
@@ -296,7 +296,7 @@ def dependencies(target):
 
     return (('ffmpeg-cdist', '5fce90f', ffmpeg_options),
             ('libdcp', '047d8ff'),
-            ('libsub', 'd3cbf2f'),
+            ('libsub', 'ec880ed'),
             ('rtaudio-cdist', None))
 
 def configure_options(target):
index a09eab68e12e11763436cd83db1378d710a632cc..af309cdbe4aa99715eca949e88b1cb934f3699a5 100644 (file)
@@ -647,7 +647,12 @@ FFmpegDecoder::decode_ass_subtitle (string ass, ContentTime from)
        }
 
        sub::RawSubtitle base;
-       list<sub::RawSubtitle> raw = sub::SSAReader::parse_line (base, bits[9]);
+       list<sub::RawSubtitle> raw = sub::SSAReader::parse_line (
+               base,
+               bits[9],
+               _ffmpeg_content->video->size().width,
+               _ffmpeg_content->video->size().height
+               );
 
        BOOST_FOREACH (sub::Subtitle const & i, sub::collect<list<sub::Subtitle> > (raw)) {
                subtitle->emit_text_start (from, i);
index 4e68e4a79ffb596962c518c9250c41f66b5c06fe..a3eed637416b7d226e983c5cd3d8f9df7ab09bbe 100644 (file)
@@ -81,7 +81,7 @@ SubtitleDecoder::emit_text_start (ContentTime from, list<dcp::SubtitleString> s)
 void
 SubtitleDecoder::emit_text_start (ContentTime from, sub::Subtitle const & subtitle)
 {
-       /* See if our next subtitle needs to be placed on screen by us */
+       /* See if our next subtitle needs to be vertically placed on screen by us */
        bool needs_placement = false;
        optional<int> bottom_line;
        BOOST_FOREACH (sub::Line i, subtitle.lines) {
@@ -141,7 +141,7 @@ SubtitleDecoder::emit_text_start (ContentTime from, sub::Subtitle const & subtit
                                case sub::TOP_OF_SCREEN:
                                        v_align = dcp::VALIGN_TOP;
                                        break;
-                               case sub::CENTRE_OF_SCREEN:
+                               case sub::VERTICAL_CENTRE_OF_SCREEN:
                                        v_align = dcp::VALIGN_CENTER;
                                        break;
                                case sub::BOTTOM_OF_SCREEN:
@@ -160,6 +160,19 @@ SubtitleDecoder::emit_text_start (ContentTime from, sub::Subtitle const & subtit
                                effect = dcp::SHADOW;
                        }
 
+                       dcp::HAlign h_align;
+                       switch (i.horizontal_position.reference) {
+                       case sub::LEFT_OF_SCREEN:
+                               h_align = dcp::HALIGN_LEFT;
+                               break;
+                       case sub::HORIZONTAL_CENTRE_OF_SCREEN:
+                               h_align = dcp::HALIGN_CENTER;
+                               break;
+                       case sub::RIGHT_OF_SCREEN:
+                               h_align = dcp::HALIGN_RIGHT;
+                               break;
+                       }
+
                        out.push_back (
                                dcp::SubtitleString (
                                        string(TEXT_FONT_ID),
@@ -173,8 +186,8 @@ SubtitleDecoder::emit_text_start (ContentTime from, sub::Subtitle const & subtit
                                        dcp::Time (from.seconds(), 1000),
                                        /* XXX: hmm; this is a bit ugly (we don't know the to time yet) */
                                        dcp::Time (),
-                                       0,
-                                       dcp::HALIGN_CENTER,
+                                       i.horizontal_position.proportional,
+                                       h_align,
                                        v_position,
                                        v_align,
                                        dcp::DIRECTION_LTR,