X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fcpl_sar_test.cc;h=ab1ef182d8e14acff76c9a66a6ec14ac06686a82;hb=ddb999544ab9da2a3a4760baf241a5ef8520c37e;hp=cafa589fe5e178b91e2e58099bb7a30f7f47fb57;hpb=6425742f95a4c2e539061b29016a4a5bd10ac9ae;p=libdcp.git diff --git a/test/cpl_sar_test.cc b/test/cpl_sar_test.cc index cafa589f..ab1ef182 100644 --- a/test/cpl_sar_test.cc +++ b/test/cpl_sar_test.cc @@ -1,59 +1,109 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of libdcp. + + libdcp 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, + libdcp 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 libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ + #include "cpl.h" +#include "mono_j2k_picture_asset.h" #include "reel_mono_picture_asset.h" -#include "mono_picture_asset.h" +#include "warnings.h" #include +LIBDCP_DISABLE_WARNINGS +#include +LIBDCP_ENABLE_WARNINGS #include -using boost::shared_ptr; + +using std::string; +using std::shared_ptr; +using std::make_shared; + +static void +check (shared_ptr pa, dcp::Fraction frac, string sar) +{ + pa->set_screen_aspect_ratio (frac); + xmlpp::Document doc; + auto el = doc.create_root_node ("Test"); + pa->write_to_cpl (el, dcp::Standard::INTEROP); + + cxml::Node node (el); + BOOST_CHECK_EQUAL (node.node_child("MainPicture")->string_child ("ScreenAspectRatio"), sar); +} + /** Test for a reported bug where in Interop files uses * excessive decimal places and (sometimes) the wrong decimal point character. + * Also check that we correctly use one of the allowed + * values with Interop. */ BOOST_AUTO_TEST_CASE (cpl_sar) { - shared_ptr pa ( - new dcp::ReelMonoPictureAsset ( - shared_ptr (new dcp::MonoPictureAsset ("test/ref/DCP/dcp_test1/video.mxf")), - 0 - ) + auto pa = make_shared( + make_shared("test/ref/DCP/dcp_test1/video.mxf"), 0 ); - { - pa->set_screen_aspect_ratio (dcp::Fraction (1998, 1080)); - xmlpp::Document doc; - xmlpp::Element* el = doc.create_root_node ("Test"); - pa->write_to_cpl (el, dcp::INTEROP); - - cxml::Node node (el); - BOOST_CHECK_EQUAL (node.node_child("MainPicture")->string_child ("ScreenAspectRatio"), "1.85"); - } - - { - pa->set_screen_aspect_ratio (dcp::Fraction (2048, 858)); - xmlpp::Document doc; - xmlpp::Element* el = doc.create_root_node ("Test"); - pa->write_to_cpl (el, dcp::INTEROP); - - cxml::Node node (el); - BOOST_CHECK_EQUAL (node.node_child("MainPicture")->string_child ("ScreenAspectRatio"), "2.39"); - } + /* Easy ones */ + check (pa, dcp::Fraction(1998, 1080), "1.85"); + check (pa, dcp::Fraction(2048, 858), "2.39"); + + /* Check the use of the allowed values */ + + /* Just less then, equal to and just more than 1.33 */ + check (pa, dcp::Fraction(1200, 1000), "1.33"); + check (pa, dcp::Fraction(1330, 1000), "1.33"); + check (pa, dcp::Fraction(1430, 1000), "1.33"); + + /* Same for 1.66 */ + check (pa, dcp::Fraction(1600, 1000), "1.66"); + check (pa, dcp::Fraction(1660, 1000), "1.66"); + check (pa, dcp::Fraction(1670, 1000), "1.66"); + + /* 1.77 */ + check (pa, dcp::Fraction(1750, 1000), "1.77"); + check (pa, dcp::Fraction(1770, 1000), "1.77"); + check (pa, dcp::Fraction(1800, 1000), "1.77"); + + /* 1.85 */ + check (pa, dcp::Fraction(1820, 1000), "1.85"); + check (pa, dcp::Fraction(1850, 1000), "1.85"); + check (pa, dcp::Fraction(1910, 1000), "1.85"); + + /* 2.00 */ + check (pa, dcp::Fraction(1999, 1000), "2.00"); + check (pa, dcp::Fraction(2000, 1000), "2.00"); + check (pa, dcp::Fraction(2001, 1000), "2.00"); + + /* 2.39 */ + check (pa, dcp::Fraction(2350, 1000), "2.39"); + check (pa, dcp::Fraction(2390, 1000), "2.39"); + check (pa, dcp::Fraction(2500, 1000), "2.39"); }