Emit no audio from DCPs if none is mapped
[dcpomatic.git] / src / lib / string_text.h
index 887224d53eea3ceeb7e4fc8d83662799b1db9cd2..787231b8cf2d57b2ed3a8dda65b1ea7e42fb312c 100644 (file)
 #define DCPOMATIC_STRING_TEXT_H
 
 
+#include "font.h"
+#include <dcp/subtitle_standard.h>
 #include <dcp/subtitle_string.h>
 
-/** A wrapper for SubtitleString which allows us to include settings that are not
 
- *  applicable to true DCP subtitles.  For example, we can set outline width for burn-in
- *  but this cannot be specified in DCP XML.
+/** A wrapper for SubtitleString which allows us to:
+ *
+ *    - include settings that are not applicable to true DCP subtitles.
+ *      For example, we can set outline width for burn-in but this cannot be specified in DCP XML.
+ *
+ *    - include details of how v_align should be interpreted
+ *
+ *    - specify the font by referring to a Font object from the content we came from, rather than
+ *      having to use a DCP ID like in dcp::SubtitleString.
  */
 class StringText : public dcp::SubtitleString
 {
 public:
-       StringText (dcp::SubtitleString dcp_, int outline_width_)
+       StringText(dcp::SubtitleString dcp_, int outline_width_, std::shared_ptr<dcpomatic::Font> font_, dcp::SubtitleStandard valign_standard_)
                : dcp::SubtitleString (dcp_)
                , outline_width (outline_width_)
+               , font (font_)
+               , valign_standard (valign_standard_)
        {}
 
        int outline_width;
+       std::shared_ptr<dcpomatic::Font> font;
+
+       /** Interop and SMPTE use the same VAlign choices (top, center, bottom) but give them different
+        *  meanings.  To add some extra confusion, it seems that SMPTE changed their minds on this topic
+        *  between the 2010 and 2014 versions of standard 428-7, so there isn't even one answer for SMPTE.
+        *
+        *  This is the standard which should be used to interpret v_align() in this subtitle.
+         *
+        *  valign_standard == SMPTE_{2007,2010} means:
+        *     top - top of screen to top of subtitle
+        *     center - centre of screen to center of subtitle
+        *     bottom - bottom of screen to bottom of subtitle
+        *
+        *  valign_standard == {INTEROP,SMPTE_2014} means:
+        *     top - top of screen to baseline of subtitle
+        *     center - centre of screen to baseline of subtitle
+        *     bottom - bottom of screen to baseline of subtitle
+        */
+       dcp::SubtitleStandard valign_standard;
 };