_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
);
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);
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"));
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);
&cl
);
+ film->set_audio_channels(16);
+
make_and_verify_dcp (film);
check_dcp (TestPaths::private_data() / "fha", film);
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");
}
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");
}
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);
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;
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 */
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);
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);
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);
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 });
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);
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_"));
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()));
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);
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 ();
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());
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);