From aa8843ee88691dfafa32079d80b94fbdb936f7a0 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 12 Apr 2015 18:35:49 +0100 Subject: [PATCH] Fix ISDCF name test and add check to see if a mapped channel is included in the DCP. --- src/lib/film.cc | 5 ++++ test/isdcf_name_test.cc | 53 ++++++++++++++++++++++++++++++++++------- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/lib/film.cc b/src/lib/film.cc index 3aed4d965..297193f83 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -641,6 +641,11 @@ Film::isdcf_name (bool if_created_now) const int non_lfe = 0; int lfe = 0; for (list::const_iterator i = mapped.begin(); i != mapped.end(); ++i) { + if (static_cast (*i) >= audio_channels()) { + /* This channel is mapped but is not included in the DCP */ + continue; + } + if ((*i) == dcp::LFE) { ++lfe; } else { diff --git a/test/isdcf_name_test.cc b/test/isdcf_name_test.cc index c2ea833bd..5f6ccc5e1 100644 --- a/test/isdcf_name_test.cc +++ b/test/isdcf_name_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-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 @@ -22,6 +22,7 @@ #include "lib/ratio.h" #include "lib/dcp_content_type.h" #include "lib/image_content.h" +#include "lib/sndfile_content.h" #include "test.h" using std::cout; @@ -48,7 +49,7 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test) m.package_type = "OV"; film->set_isdcf_metadata (m); film->set_interop (true); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_UK-PG_51_2K_ST_20140704_FA_IOP_OV"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_UK-PG_2K_ST_20140704_FA_IOP_OV"); /* Test a long name and some different data */ @@ -68,7 +69,7 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test) m.package_type = "VF"; film->set_isdcf_metadata (m); film->set_interop (false); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); /* Test interior aspect ratio: shouldn't be shown with trailers */ @@ -77,17 +78,17 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test) wait_for_jobs (); content->set_scale (VideoContentScale (Ratio::from_id ("133"))); film->set_container (Ratio::from_id ("185")); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); /* But should be shown for anything else */ film->set_dcp_content_type (DCPContentType::from_isdcf_name ("XSN")); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); /* Test 3D */ film->set_three_d (true); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE-3D_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-FR_US-R_4K_DI_20140704_PP_SMPTE-3D_VF"); /* Test content type modifiers */ @@ -100,7 +101,7 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test) m.mastered_luminance = "4fl"; film->set_isdcf_metadata (m); film->set_video_frame_rate (48); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); /* Test a name which is already in camelCase */ @@ -114,12 +115,48 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test) film->set_isdcf_metadata (m); film->set_video_frame_rate (24); film->set_name ("IKnowCamels"); - BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); /* And one in capitals */ film->set_name ("LIKE SHOUTING"); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_4K_DI_20140704_PP_SMPTE_VF"); + + /* Test audio channel markup */ + + film->set_audio_channels (6); + shared_ptr sound (new SndfileContent (film, "test/data/sine_440.wav")); + film->examine_and_add_content (sound); + wait_for_jobs (); BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF"); + + AudioMapping mapping = sound->audio_mapping (); + + mapping.set (0, dcp::LEFT, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_20_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::RIGHT, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_30_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::LFE, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_31_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::LS, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_41_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::RS, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_51_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::CHANNEL_7, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_51_4K_DI_20140704_PP_SMPTE_VF"); + film->set_audio_channels (8); + mapping.set (0, dcp::CHANNEL_7, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_61_4K_DI_20140704_PP_SMPTE_VF"); + mapping.set (0, dcp::CHANNEL_8, 1.0); + sound->set_audio_mapping (mapping); + BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_71_4K_DI_20140704_PP_SMPTE_VF"); } -- 2.30.2