Change video content scaling so that it either:
[dcpomatic.git] / src / lib / util.cc
index e4f552c4d7c46177414b1db0e40352847f7bf705..c1ef4245f16b18713dd008bbb9d212ab858b1674 100644 (file)
@@ -394,7 +394,6 @@ dcpomatic_setup ()
 
        Ratio::setup_ratios ();
        PresetColourConversion::setup_colour_conversion_presets ();
-       VideoContentScale::setup_scales ();
        DCPContentType::setup_dcp_content_types ();
        Filter::setup_filters ();
        CinemaSoundProcessor::setup_cinema_sound_processors ();
@@ -927,7 +926,7 @@ emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size
 {
        /* XXX: this is rather inefficient; decoding the image just to get its size */
        FFmpegImageProxy proxy (sub.png_image());
-       shared_ptr<Image> image = proxy.image().first;
+       shared_ptr<Image> image = proxy.image().image;
        /* set up rect with height and width */
        dcpomatic::Rect<double> rect(0, 0, image->size().width / double(size.width), image->size().height / double(size.height));
 
@@ -1184,3 +1183,21 @@ linear_to_db (double linear)
        return 20 * log10(linear);
 }
 
+
+dcp::Size
+scale_for_display (dcp::Size s, dcp::Size display_container, dcp::Size film_container)
+{
+       /* Now scale it down if the display container is smaller than the film container */
+       if (display_container != film_container) {
+               float const scale = min (
+                       float (display_container.width) / film_container.width,
+                       float (display_container.height) / film_container.height
+                       );
+
+               s.width = lrintf (s.width * scale);
+               s.height = lrintf (s.height * scale);
+       }
+
+       return s;
+}
+