From: Carl Hetherington Date: Sat, 7 Feb 2015 16:07:07 +0000 (+0000) Subject: Missing file. X-Git-Tag: v2.0.48~219 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=1355b2068548aa14a054d7dac31cb6589ab5430f;p=dcpomatic.git Missing file. --- diff --git a/test/video_content_scale_test.cc b/test/video_content_scale_test.cc new file mode 100644 index 000000000..383d87ec5 --- /dev/null +++ b/test/video_content_scale_test.cc @@ -0,0 +1,182 @@ +/* + Copyright (C) 2015 Carl Hetherington + + This program 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, + 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. + +*/ + +#include +#include "lib/ffmpeg_content.h" +#include "lib/ratio.h" + +using std::list; +using std::string; +using std::cerr; +using std::stringstream; +using boost::shared_ptr; +using boost::optional; + +static +void +test (dcp::Size content_size, dcp::Size display_size, dcp::Size film_size, Crop crop, Ratio const * ratio, bool scale, dcp::Size correct) +{ + shared_ptr film; + stringstream s; + s << "" + "" + "FFmpeg" + "/home/c.hetherington/DCP/prophet_clip.mkv" + "f3f23663da5bef6d2cbaa0db066f3351314142710" + "0" + "0" + "0" + "2879" + "" << content_size.width << "" + "" << content_size.height << "" + "23.97602462768555" + "23.97602462768555" + "0" + "1" + "" << crop.left << "" + "" << crop.right << "" + "" << crop.top << "" + "" << crop.bottom << "" + ""; + + if (ratio) { + s << "" << ratio->id() << ""; + } else { + s << "" << scale << ""; + } + + s << "" + "" + "2.4" + "1" + "0.4124564" + "0.3575761" + "0.1804375" + "0.2126729" + "0.7151522" + "0.072175" + "0.0193339" + "0.119192" + "0.9503041" + "2.6" + "" + "0" + "0" + "0" + "0" + "0" + "0" + ""; + + shared_ptr doc (new cxml::Document ()); + doc->read_string(s.str ()); + + list notes; + shared_ptr vc (new FFmpegContent (film, doc, 10, notes)); + + optional sc; + if (ratio) { + sc = VideoContentScale (ratio); + } else { + sc = VideoContentScale (scale); + } + + dcp::Size answer = sc.get().size (vc, display_size, film_size, 1); + if (answer != correct) { + cerr << "Testing " << vc->video_size().width << "x" << vc->video_size().height << "\n"; + cerr << "Testing " << display_size.width << "x" << display_size.height << "\n"; + cerr << answer.width << "x" << answer.height << " instead of " << correct.width << "x" << correct.height << "\n"; + } + BOOST_CHECK (answer == correct); +} + +/* Test scale and stretch to specified ratio */ +BOOST_AUTO_TEST_CASE (video_content_scale_test_to_ratio) +{ + /* To DCP */ + + // Flat in flat container + test ( + dcp::Size (400, 200), + dcp::Size (1998, 1080), + dcp::Size (1998, 1080), + Crop (0, 0, 0, 0), + Ratio::from_id ("185"), + true, + dcp::Size (1998, 1080) + ); + + // Scope in flat container + test ( + dcp::Size (400, 200), + dcp::Size (1998, 1080), + dcp::Size (1998, 1080), + Crop (0, 0, 0, 0), + Ratio::from_id ("239"), + true, + dcp::Size (1998, 837) + ); + + // Flat in scope container + test ( + dcp::Size (400, 200), + dcp::Size (2048, 858), + dcp::Size (2048, 858), + Crop (0, 0, 0, 0), + Ratio::from_id ("185"), + true, + dcp::Size (1587, 858) + ); + + + /* To player */ + + // Flat in flat container + test ( + dcp::Size (400, 200), + dcp::Size (185, 100), + dcp::Size (1998, 1080), + Crop (0, 0, 0, 0), + Ratio::from_id ("185"), + true, + dcp::Size (185, 100) + ); + + // Scope in flat container + test ( + dcp::Size (400, 200), + dcp::Size (185, 100), + dcp::Size (1998, 1080), + Crop (0, 0, 0, 0), + Ratio::from_id ("239"), + true, + dcp::Size (185, 78) + ); + + // Flat in scope container + test ( + dcp::Size (400, 200), + dcp::Size (239, 100), + dcp::Size (2048, 858), + Crop (0, 0, 0, 0), + Ratio::from_id ("185"), + true, + dcp::Size (185, 100) + ); +}