summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-07-25 11:04:30 +0200
committerCarl Hetherington <cth@carlh.net>2023-08-06 22:05:03 +0200
commit02d4493e593d567b210cd7f2b98d33a345867d1d (patch)
treef3604e4104d6668c0eb67b4a7f29975876dd59a6
parentea57d67cb7c7cd500d34bf783ed23c3dbc66b59b (diff)
Go back to respecting the user's choice for the number of audio channels in the MXF.
-rw-r--r--src/lib/reel_writer.cc3
-rw-r--r--src/lib/writer.cc7
-rw-r--r--test/audio_processor_test.cc2
-rw-r--r--test/content_test.cc3
-rw-r--r--test/cpl_metadata_test.cc4
-rw-r--r--test/ffmpeg_audio_test.cc8
-rw-r--r--test/import_dcp_test.cc1
-rw-r--r--test/no_use_video_test.cc4
-rw-r--r--test/player_test.cc3
-rw-r--r--test/reels_test.cc5
-rw-r--r--test/srt_subtitle_test.cc1
-rw-r--r--test/threed_test.cc1
12 files changed, 32 insertions, 10 deletions
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index e8db82fbb..7c0c9188a 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -179,8 +179,7 @@ ReelWriter::ReelWriter (
_sound_asset = make_shared<dcp::SoundAsset> (
dcp::Fraction(film()->video_frame_rate(), 1),
film()->audio_frame_rate(),
- /* Always make 16-channel sound assets for SMPTE; libdcp will pad unused channels for us */
- standard == dcp::Standard::SMPTE ? MAX_DCP_AUDIO_CHANNELS : film()->audio_channels(),
+ film()->audio_channels(),
lang ? *lang : dcp::LanguageTag("en-US"),
standard
);
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 71e9d579d..8b8ab89de 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -653,9 +653,12 @@ Writer::finish (boost::filesystem::path output_dcp)
field = dcp::MCASoundField::FIVE_POINT_ONE;
}
- dcp::MainSoundConfiguration msc(field, MAX_DCP_AUDIO_CHANNELS);
+ auto const audio_channels = film()->audio_channels();
+ dcp::MainSoundConfiguration msc(field, audio_channels);
for (auto i: film()->mapped_audio_channels()) {
- msc.set_mapping(i, static_cast<dcp::Channel>(i));
+ if (i < audio_channels) {
+ msc.set_mapping(i, static_cast<dcp::Channel>(i));
+ }
}
cpl->set_main_sound_configuration(msc);
diff --git a/test/audio_processor_test.cc b/test/audio_processor_test.cc
index 8d59a3fe9..4fe5eeb10 100644
--- a/test/audio_processor_test.cc
+++ b/test/audio_processor_test.cc
@@ -47,7 +47,7 @@ BOOST_AUTO_TEST_CASE (audio_processor_test)
film->examine_and_add_content (c);
BOOST_REQUIRE (!wait_for_jobs());
- film->set_audio_channels (6);
+ film->set_audio_channels(16);
film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
film->set_audio_processor (AudioProcessor::from_id ("mid-side-decoder"));
diff --git a/test/content_test.cc b/test/content_test.cc
index 85862af82..47099025e 100644
--- a/test/content_test.cc
+++ b/test/content_test.cc
@@ -45,6 +45,7 @@ BOOST_AUTO_TEST_CASE (content_test1)
film->set_dcp_content_type (DCPContentType::from_isdcf_name ("FTR"));
film->set_name ("content_test1");
film->set_container (Ratio::from_id ("185"));
+ film->set_audio_channels(16);
auto content = content_factory(TestPaths::private_data() / "demo_sound_bug.mkv")[0];
film->examine_and_add_content (content);
@@ -150,6 +151,8 @@ BOOST_AUTO_TEST_CASE (content_test6)
&cl
);
+ film->set_audio_channels(16);
+
make_and_verify_dcp (film);
check_dcp (TestPaths::private_data() / "fha", film);
diff --git a/test/cpl_metadata_test.cc b/test/cpl_metadata_test.cc
index b8346c663..544e78899 100644
--- a/test/cpl_metadata_test.cc
+++ b/test/cpl_metadata_test.cc
@@ -71,7 +71,7 @@ BOOST_AUTO_TEST_CASE(main_sound_configuration_test_51_vi)
BOOST_REQUIRE(msc);
/* We think this should say 51 not 71 at the start (#2580) */
- BOOST_CHECK_EQUAL(msc->to_string(), "51/L,R,C,LFE,Ls,Rs,-,VIN,-,-,-,-,-,-,-,-");
+ BOOST_CHECK_EQUAL(msc->to_string(), "51/L,R,C,LFE,Ls,Rs,-,VIN");
}
@@ -117,5 +117,5 @@ BOOST_AUTO_TEST_CASE(main_sound_configuration_test_71)
auto msc = cpl->main_sound_configuration();
BOOST_REQUIRE(msc);
- BOOST_CHECK_EQUAL(msc->to_string(), "71/L,R,C,LFE,Lss,Rss,-,VIN,-,-,Lrs,Rrs,-,-,-,-");
+ BOOST_CHECK_EQUAL(msc->to_string(), "71/L,R,C,LFE,Lss,Rss,-,VIN,-,-,Lrs,Rrs");
}
diff --git a/test/ffmpeg_audio_test.cc b/test/ffmpeg_audio_test.cc
index 910fc942c..b2a83aad8 100644
--- a/test/ffmpeg_audio_test.cc
+++ b/test/ffmpeg_audio_test.cc
@@ -58,8 +58,10 @@ BOOST_AUTO_TEST_CASE (ffmpeg_audio_test)
BOOST_REQUIRE (!wait_for_jobs());
+ int constexpr audio_channels = 6;
+
film->set_container (Ratio::from_id ("185"));
- film->set_audio_channels (6);
+ film->set_audio_channels(audio_channels);
film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
make_and_verify_dcp (film);
@@ -71,7 +73,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_audio_test)
auto sound_asset = check.cpls().front()->reels().front()->main_sound ();
BOOST_CHECK (sound_asset);
- BOOST_CHECK_EQUAL(sound_asset->asset()->channels (), 16);
+ BOOST_REQUIRE_EQUAL(sound_asset->asset()->channels (), audio_channels);
/* Sample index in the DCP */
int n = 0;
@@ -82,7 +84,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_audio_test)
auto sound_frame = sound_asset->asset()->start_read()->get_frame (frame++);
uint8_t const * d = sound_frame->data ();
for (int offset = 0; offset < sound_frame->size(); offset += (3 * sound_asset->asset()->channels())) {
- for (auto channel = 0; channel < MAX_DCP_AUDIO_CHANNELS; ++channel) {
+ for (auto channel = 0; channel < audio_channels; ++channel) {
auto const sample = d[offset + channel * 3 + 1] | (d[offset + channel * 3 + 2] << 8);
if (channel == 2) {
/* Input should be on centre */
diff --git a/test/import_dcp_test.cc b/test/import_dcp_test.cc
index acac79051..7387c7be7 100644
--- a/test/import_dcp_test.cc
+++ b/test/import_dcp_test.cc
@@ -85,6 +85,7 @@ BOOST_AUTO_TEST_CASE (import_dcp_test)
B->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR"));
B->set_name ("frobozz");
B->set_interop (false);
+ B->set_audio_channels(16);
auto d = make_shared<DCPContent>("build/test/import_dcp_test/" + A->dcp_name());
B->examine_and_add_content (d);
diff --git a/test/no_use_video_test.cc b/test/no_use_video_test.cc
index 0ad17d7b9..b2e019581 100644
--- a/test/no_use_video_test.cc
+++ b/test/no_use_video_test.cc
@@ -61,6 +61,8 @@ BOOST_AUTO_TEST_CASE (no_use_video_test1)
B->set_position (film, dcpomatic::DCPTime());
A->video->set_use (false);
+ film->set_audio_channels(16);
+
make_and_verify_dcp (film);
check_dcp ("test/data/no_use_video_test1", film);
@@ -81,6 +83,8 @@ BOOST_AUTO_TEST_CASE (no_use_video_test2)
B->set_position (film, dcpomatic::DCPTime());
A->video->set_use (false);
+ film->set_audio_channels(16);
+
make_and_verify_dcp (film);
check_dcp (TestPaths::private_data() / "no_use_video_test2", film);
diff --git a/test/player_test.cc b/test/player_test.cc
index a6e7cd2de..5120c0180 100644
--- a/test/player_test.cc
+++ b/test/player_test.cc
@@ -558,6 +558,7 @@ BOOST_AUTO_TEST_CASE(multiple_sound_files_bug)
auto C = content_factory(TestPaths::private_data() / "kook" / "3.wav").front();
auto film = new_test_film2("multiple_sound_files_bug", { A, B, C }, &cl);
+ film->set_audio_channels(16);
C->set_position(film, DCPTime(3840000));
make_and_verify_dcp(film, { dcp::VerificationNote::Code::MISSING_CPL_METADATA });
@@ -573,6 +574,7 @@ BOOST_AUTO_TEST_CASE(trimmed_sound_mix_bug_13)
auto A = content_factory("test/data/sine_16_48_440_10.wav").front();
auto B = content_factory("test/data/sine_16_44.1_440_10.wav").front();
auto film = new_test_film2("trimmed_sound_mix_bug_13", { A, B });
+ film->set_audio_channels(16);
A->set_position(film, DCPTime());
A->audio->set_gain(-12);
@@ -600,6 +602,7 @@ BOOST_AUTO_TEST_CASE(trimmed_sound_mix_bug_13_frame_rate_change)
A->set_video_frame_rate(film, 24);
B->set_video_frame_rate(film, 24);
film->set_video_frame_rate(25);
+ film->set_audio_channels(16);
make_and_verify_dcp(film, { dcp::VerificationNote::Code::MISSING_CPL_METADATA });
check_mxf_audio_file("test/data/trimmed_sound_mix_bug_13_frame_rate_change.mxf", dcp_file(film, "pcm_"));
diff --git a/test/reels_test.cc b/test/reels_test.cc
index de3f56d2e..3d4dd0e6e 100644
--- a/test/reels_test.cc
+++ b/test/reels_test.cc
@@ -134,6 +134,8 @@ BOOST_AUTO_TEST_CASE (reels_test2)
BOOST_CHECK_EQUAL (film->reels().size(), 3U);
BOOST_REQUIRE (!wait_for_jobs());
+ film->set_audio_channels(16);
+
make_and_verify_dcp (film);
check_dcp ("test/data/reels_test2", film->dir (film->dcp_name()));
@@ -141,6 +143,7 @@ BOOST_AUTO_TEST_CASE (reels_test2)
auto c = make_shared<DCPContent>(film->dir(film->dcp_name()));
auto film2 = new_test_film2 ("reels_test2b", {c});
film2->set_reel_type (ReelType::BY_VIDEO_CONTENT);
+ film2->set_audio_channels(16);
auto r = film2->reels ();
BOOST_CHECK_EQUAL (r.size(), 3U);
@@ -210,6 +213,8 @@ BOOST_AUTO_TEST_CASE (reels_test4)
film->examine_and_add_content (subs);
BOOST_REQUIRE (!wait_for_jobs());
+ film->set_audio_channels(16);
+
auto reels = film->reels();
BOOST_REQUIRE_EQUAL (reels.size(), 4U);
auto i = reels.begin ();
diff --git a/test/srt_subtitle_test.cc b/test/srt_subtitle_test.cc
index 3863ebf9f..c9aab59d9 100644
--- a/test/srt_subtitle_test.cc
+++ b/test/srt_subtitle_test.cc
@@ -55,6 +55,7 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test)
film->set_name ("frobozz");
film->set_audio_channels (6);
film->set_interop (false);
+ film->set_audio_channels(16);
auto content = make_shared<StringTextFileContent>("test/data/subrip2.srt");
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
diff --git a/test/threed_test.cc b/test/threed_test.cc
index 87ddd25ae..a53b4d10e 100644
--- a/test/threed_test.cc
+++ b/test/threed_test.cc
@@ -168,6 +168,7 @@ BOOST_AUTO_TEST_CASE (threed_test6)
film->examine_and_add_content (L);
auto R = make_shared<FFmpegContent>("test/data/3dR.mp4");
film->examine_and_add_content (R);
+ film->set_audio_channels(16);
BOOST_REQUIRE (!wait_for_jobs());
L->video->set_frame_type (VideoFrameType::THREE_D_LEFT);