Use libdcp's warnings.h
[dcpomatic.git] / src / lib / render_text.cc
index bcf04147a1af14496ed187e5824bbf867a70da93..0c14b00c4e7c3881a7b45b72ffa4b39bc40c420c 100644 (file)
 #include "render_text.h"
 #include "types.h"
 #include "util.h"
-#include "warnings.h"
 #include <dcp/raw_convert.h>
+#include <dcp/warnings.h>
 #include <fontconfig/fontconfig.h>
 #include <cairomm/cairomm.h>
-DCPOMATIC_DISABLE_WARNINGS
+LIBDCP_DISABLE_WARNINGS
 #include <pangomm.h>
-DCPOMATIC_ENABLE_WARNINGS
+LIBDCP_ENABLE_WARNINGS
 #include <pango/pangocairo.h>
 #include <boost/algorithm/string.hpp>
 #include <iostream>
@@ -244,19 +244,30 @@ calculate_fade_factor (StringText const& first, DCPTime time, int frame_rate)
        */
        auto const fade_in_start = DCPTime::from_seconds(first.in().as_seconds()).round(frame_rate);
        auto const fade_in_end = fade_in_start + DCPTime::from_seconds (first.fade_up_time().as_seconds ());
-       auto const fade_out_end =  DCPTime::from_seconds (first.out().as_seconds()).round(frame_rate);
-       auto const fade_out_start = fade_out_end - DCPTime::from_seconds (first.fade_down_time().as_seconds ());
 
        if (fade_in_start <= time && time <= fade_in_end && fade_in_start != fade_in_end) {
                fade_factor *= DCPTime(time - fade_in_start).seconds() / DCPTime(fade_in_end - fade_in_start).seconds();
        }
-       if (fade_out_start <= time && time <= fade_out_end && fade_out_start != fade_out_end) {
-               fade_factor *= 1 - DCPTime(time - fade_out_start).seconds() / DCPTime(fade_out_end - fade_out_start).seconds();
-       }
-       if (time < fade_in_start || time > fade_out_end) {
+
+       if (time < fade_in_start) {
                fade_factor = 0;
        }
 
+       /* first.out() may be zero if we don't know when this subtitle will finish.  We can only think about
+        * fading out if we _do_ know when it will finish.
+        */
+       if (first.out() != dcp::Time()) {
+               auto const fade_out_end = DCPTime::from_seconds (first.out().as_seconds()).round(frame_rate);
+               auto const fade_out_start = fade_out_end - DCPTime::from_seconds(first.fade_down_time().as_seconds());
+
+               if (fade_out_start <= time && time <= fade_out_end && fade_out_start != fade_out_end) {
+                       fade_factor *= 1 - DCPTime(time - fade_out_start).seconds() / DCPTime(fade_out_end - fade_out_start).seconds();
+               }
+               if (time > fade_out_end) {
+                       fade_factor = 0;
+               }
+       }
+
        return fade_factor;
 }