Fix errors when a custom size is given which is larger than the container (#2404).
[dcpomatic.git] / src / lib / video_content.cc
index ca0076fba8784e4601f46069a0b1714f7bf36152..9b39ff01b8f56d9f84e7176a27b227a482c6786b 100644 (file)
@@ -305,7 +305,7 @@ VideoContent::as_xml (xmlpp::Node* node) const
 }
 
 void
-VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
+VideoContent::take_from_examiner(shared_ptr<const Film> film, shared_ptr<VideoExaminer> d)
 {
        /* These examiner calls could call other content methods which take a lock on the mutex */
        auto const vs = d->video_size ();
@@ -332,7 +332,7 @@ VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
        LOG_GENERAL ("Video length obtained from header as %1 frames", _length);
 
        if (d->video_frame_rate()) {
-               _parent->set_video_frame_rate (d->video_frame_rate().get());
+               _parent->set_video_frame_rate(film, d->video_frame_rate().get());
        }
 }
 
@@ -650,7 +650,10 @@ VideoContent::scaled_size (dcp::Size film_container)
        }
 
        if (_custom_size) {
-               return *_custom_size;
+               if (_custom_size->width <= film_container.width && _custom_size->height <= film_container.height) {
+                       return *_custom_size;
+               }
+               return fit_ratio_within(_custom_size->ratio(), film_container);
        }
 
        auto size = size_after_crop ();