- /* Here we are converting from time (in the DCP) to a frame number in the content.
- Hence we need to use the DCP's frame rate and the double/skip correction, not
- the source's rate; source rate will be equal to DCP rate if we ignore
- double/skip. There's no need to call Film::active_frame_rate_change() here
- as we know that we are it (since we're video).
+ if (_ratio) {
+ s << _ratio->id () << "_";
+ } else {
+ s << (_scale ? "S1" : "S0");
+ }
+
+ return s.str ();
+}
+
+string
+VideoContentScale::name () const
+{
+ if (_ratio) {
+ return _ratio->nickname ();
+ }
+
+ if (_scale) {
+ return _("No stretch");
+ }
+
+ return _("No scale");
+}
+
+/** @param display_container Size of the container that we are displaying this content in.
+ * @param film_container The size of the film's image.
+ */
+dcp::Size
+VideoContentScale::size (shared_ptr<const VideoContent> c, dcp::Size display_container, dcp::Size film_container) const
+{
+ if (_ratio) {
+ return fit_ratio_within (_ratio->ratio (), display_container);
+ }
+
+ dcp::Size const ac = c->video_size_after_crop ();
+
+ /* Force scale if the film_container is smaller than the content's image */
+ if (_scale || film_container.width < ac.width || film_container.height < ac.height) {
+ return fit_ratio_within (ac.ratio (), display_container);
+ }
+
+ /* Scale the image so that it will be in the right place in film_container, even if display_container is a
+ different size.