Fix error when padding is needed in 3D encodes (#2476).
[dcpomatic.git] / src / lib / reel_writer.cc
index e0279725bc79b50a43c4bb95d25a2e1cda504610..31860e8816131da9973231612a19d415866001d9 100644 (file)
@@ -195,7 +195,8 @@ ReelWriter::ReelWriter (
                */
                _sound_asset_writer = _sound_asset->start_write (
                        film()->directory().get() / audio_asset_filename (_sound_asset, _reel_index, _reel_count, _content_summary),
-                       film()->contains_atmos_content()
+                       film()->contains_atmos_content(),
+                       !film()->limit_to_smpte_bv20()
                        );
        }
 
@@ -892,9 +893,10 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
 
 
 float
-ReelWriter::convert_vertical_position(StringText const& subtitle, dcp::Standard to) const
+ReelWriter::convert_vertical_position(StringText const& subtitle, dcp::SubtitleStandard to) const
 {
-       if (subtitle.valign_standard == to) {
+       if (dcp::uses_baseline(subtitle.valign_standard) == dcp::uses_baseline(to)) {
+               /* The from and to standards use the same alignment reference */
                return subtitle.v_position();
        }
 
@@ -914,7 +916,7 @@ ReelWriter::convert_vertical_position(StringText const& subtitle, dcp::Standard
                break;
        }
 
-       return subtitle.v_position() + ((subtitle.valign_standard == dcp::Standard::SMPTE) ? correction : -correction);
+       return subtitle.v_position() + (dcp::uses_bounding_box(subtitle.valign_standard) ? correction : -correction);
 }
 
 
@@ -957,7 +959,7 @@ ReelWriter::write (PlayerText subs, TextType type, optional<DCPTextTrack> track,
        for (auto i: subs.string) {
                i.set_in  (dcp::Time(period.from.seconds() - _period.from.seconds(), tcr));
                i.set_out (dcp::Time(period.to.seconds() - _period.from.seconds(), tcr));
-               i.set_v_position(convert_vertical_position(i, film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE));
+               i.set_v_position(convert_vertical_position(i, film()->interop() ? dcp::SubtitleStandard::INTEROP : dcp::SubtitleStandard::SMPTE_2014));
                auto sub = make_shared<dcp::SubtitleString>(i);
                if (type == TextType::OPEN_SUBTITLE) {
                        sub->set_font(fonts.get(i.font));