X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fvideo_content_scale.cc;h=a1673d3deafc58ae84950eec58314783eaf14ac4;hb=3828baf56467224f5d44049bf1e7a7ed11f43a05;hp=14db7b02f7dd6bb97c3724fcccb4fa78c9ac3630;hpb=2e81be9e5b95fdba1049afc1ddef79e7a66980db;p=dcpomatic.git diff --git a/src/lib/video_content_scale.cc b/src/lib/video_content_scale.cc index 14db7b02f..a1673d3de 100644 --- a/src/lib/video_content_scale.cc +++ b/src/lib/video_content_scale.cc @@ -1,19 +1,20 @@ /* Copyright (C) 2013-2015 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ @@ -25,6 +26,7 @@ #include #include #include +#include #include "i18n.h" @@ -84,13 +86,13 @@ string VideoContentScale::id () const { SafeStringStream s; - + if (_ratio) { s << _ratio->id (); } else { s << (_scale ? "S1" : "S0"); } - + return s.str (); } @@ -122,27 +124,27 @@ VideoContentScale::from_id (string id) return VideoContentScale (true); } - + /** @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 c, dcp::Size display_container, dcp::Size film_container, int round) const +VideoContentScale::size (shared_ptr c, dcp::Size display_container, dcp::Size film_container) const { /* Work out the size of the content if it were put inside film_container */ - dcp::Size video_size_after_crop = c->video_size_after_crop (); - + dcp::Size const video_size_after_crop = c->size_after_crop (); + dcp::Size size; if (_ratio) { /* Stretch to fit the requested ratio */ - size = fit_ratio_within (_ratio->ratio (), film_container, round); + size = fit_ratio_within (_ratio->ratio (), film_container); } else if (_scale || video_size_after_crop.width > film_container.width || video_size_after_crop.height > film_container.height) { /* Scale, preserving aspect ratio; this is either if we have been asked to scale with no stretch or if the unscaled content is too big for film_container. */ - size = fit_ratio_within (video_size_after_crop.ratio(), film_container, round); + size = fit_ratio_within (video_size_after_crop.ratio(), film_container); } else { /* No stretch nor scale */ size = video_size_after_crop; @@ -154,9 +156,9 @@ VideoContentScale::size (shared_ptr c, dcp::Size display_con float (display_container.width) / film_container.width, float (display_container.height) / film_container.height ); - - size.width = rint (size.width * scale); - size.height = rint (size.height * scale); + + size.width = lrintf (size.width * scale); + size.height = lrintf (size.height * scale); } return size;