- cpl->set_chain (film()->chain());
- cpl->set_distributor (film()->distributor());
- cpl->set_facility (film()->facility());
- cpl->set_luminance (film()->luminance());
-
- auto ac = film()->mapped_audio_channels();
- dcp::MCASoundField field = (
- find(ac.begin(), ac.end(), static_cast<int>(dcp::Channel::BSL)) != ac.end() ||
- find(ac.begin(), ac.end(), static_cast<int>(dcp::Channel::BSR)) != ac.end()
- ) ? dcp::MCASoundField::SEVEN_POINT_ONE : dcp::MCASoundField::FIVE_POINT_ONE;
-
- dcp::MainSoundConfiguration msc (field, film()->audio_channels());
- for (auto i: ac) {
- if (static_cast<int>(i) < film()->audio_channels()) {
- msc.set_mapping (i, static_cast<dcp::Channel>(i));
+ if (film()->chain()) {
+ cpl->set_chain (*film()->chain());
+ }
+ if (film()->distributor()) {
+ cpl->set_distributor (*film()->distributor());
+ }
+ if (film()->facility()) {
+ cpl->set_facility (*film()->facility());
+ }
+ if (film()->luminance()) {
+ cpl->set_luminance (*film()->luminance());
+ }
+ if (film()->sign_language_video_language()) {
+ cpl->set_sign_language_video_language (*film()->sign_language_video_language());
+ }
+
+ dcp::MCASoundField field;
+ if (channel_is_mapped(film(), dcp::Channel::BSL) || channel_is_mapped(film(), dcp::Channel::BSR)) {
+ field = dcp::MCASoundField::SEVEN_POINT_ONE;
+ } else {
+ field = dcp::MCASoundField::FIVE_POINT_ONE;
+ }
+
+ auto const audio_channels = film()->audio_channels();
+ dcp::MainSoundConfiguration msc(field, audio_channels);
+ for (auto i: film()->mapped_audio_channels()) {
+ if (i < audio_channels) {
+ msc.set_mapping(i, static_cast<dcp::Channel>(i));