diff options
Diffstat (limited to 'src/wx')
| -rw-r--r-- | src/wx/dcp_panel.cc | 81 | ||||
| -rw-r--r-- | src/wx/dcp_panel.h | 2 | ||||
| -rw-r--r-- | src/wx/full_config_dialog.cc | 9 |
3 files changed, 78 insertions, 14 deletions
diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 19f26d9d0..3e1210543 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -154,8 +154,7 @@ DCPPanel::DCPPanel(wxNotebook* n, shared_ptr<Film> film, FilmViewer& viewer) _reel_length->SetRange (1, 64); - _standard->add(_("SMPTE")); - _standard->add(_("Interop")); + add_standards(); _standard->SetToolTip(_("Which standard the DCP should use. Interop is older and SMPTE is the modern standard. If in doubt, choose 'SMPTE'")); Config::instance()->Changed.connect (boost::bind(&DCPPanel::config_changed, this, _1)); @@ -163,6 +162,57 @@ DCPPanel::DCPPanel(wxNotebook* n, shared_ptr<Film> film, FilmViewer& viewer) add_to_grid (); } + +void +DCPPanel::add_standards() +{ + _standard->add(_("SMPTE"), N_("smpte")); + if (Config::instance()->allow_smpte_bv20() || (_film && _film->limit_to_smpte_bv20())) { + _standard->add(_("SMPTE (Bv2.0 only)"), N_("smpte-bv20")); + } + _standard->add(_("Interop"), N_("interop")); +} + + +void +DCPPanel::set_standard() +{ + DCPOMATIC_ASSERT(_film); + DCPOMATIC_ASSERT(!_film->limit_to_smpte_bv20() || _standard->GetCount() == 3); + + if (_film->interop()) { + checked_set(_standard, "interop"); + } else { + checked_set(_standard, _film->limit_to_smpte_bv20() ? "smpte-bv20" : "smpte"); + } +} + + +void +DCPPanel::standard_changed () +{ + if (!_film || !_standard->get()) { + return; + } + + auto const data = _standard->get_data(); + if (!data) { + return; + } + + if (*data == N_("interop")) { + _film->set_interop(true); + _film->set_limit_to_smpte_bv20(false); + } else if (*data == N_("smpte")) { + _film->set_interop(false); + _film->set_limit_to_smpte_bv20(false); + } else if (*data == N_("smpte-bv20")) { + _film->set_interop(false); + _film->set_limit_to_smpte_bv20(true); + } +} + + void DCPPanel::add_to_grid () { @@ -316,17 +366,6 @@ DCPPanel::resolution_changed () void -DCPPanel::standard_changed () -{ - if (!_film || !_standard->get()) { - return; - } - - _film->set_interop(*_standard->get() == 1); - -} - -void DCPPanel::markers_clicked () { _markers_dialog.reset(_panel, _film, _viewer); @@ -434,10 +473,13 @@ DCPPanel::film_changed (Film::Property p) checked_set (_reencode_j2k, _film->reencode_j2k()); break; case Film::Property::INTEROP: - checked_set (_standard, _film->interop() ? 1 : 0); + set_standard(); setup_dcp_name (); _markers->Enable (!_film->interop()); break; + case Film::Property::LIMIT_TO_SMPTE_BV20: + set_standard(); + break; case Film::Property::AUDIO_PROCESSOR: if (_film->audio_processor()) { checked_set (_audio_processor, _film->audio_processor()->id()); @@ -587,6 +629,9 @@ DCPPanel::set_film (shared_ptr<Film> film) return; } + _standard->Clear(); + add_standards(); + film_changed (Film::Property::NAME); film_changed (Film::Property::USE_ISDCF_NAME); film_changed (Film::Property::CONTENT); @@ -606,6 +651,7 @@ DCPPanel::set_film (shared_ptr<Film> film) film_changed (Film::Property::REENCODE_J2K); film_changed (Film::Property::AUDIO_LANGUAGE); film_changed (Film::Property::AUDIO_FRAME_RATE); + film_changed (Film::Property::LIMIT_TO_SMPTE_BV20); set_general_sensitivity(static_cast<bool>(_film)); } @@ -726,6 +772,13 @@ DCPPanel::config_changed (Config::Property p) if (_film) { film_changed (Film::Property::AUDIO_PROCESSOR); } + } else if (p == Config::ALLOW_SMPTE_BV20) { + _standard->Clear(); + add_standards(); + if (_film) { + film_changed(Film::Property::INTEROP); + film_changed(Film::Property::LIMIT_TO_SMPTE_BV20); + } } } diff --git a/src/wx/dcp_panel.h b/src/wx/dcp_panel.h index cd39f2d1e..6635d4a29 100644 --- a/src/wx/dcp_panel.h +++ b/src/wx/dcp_panel.h @@ -98,6 +98,8 @@ private: void add_video_panel_to_grid (); void add_audio_panel_to_grid (); void add_audio_processors (); + void add_standards(); + void set_standard(); int minimum_allowed_audio_channels () const; diff --git a/src/wx/full_config_dialog.cc b/src/wx/full_config_dialog.cc index 59c1d4c9f..ec098ad32 100644 --- a/src/wx/full_config_dialog.cc +++ b/src/wx/full_config_dialog.cc @@ -1544,6 +1544,7 @@ private: checkbox(_("Allow creation of DCPs with 96kHz audio"), _allow_96khz_audio); checkbox(_("Allow mapping to all audio channels"), _use_all_audio_channels); + checkbox(_("Allow use of SMPTE Bv2.0"), _allow_smpte_bv20); _maximum_j2k_bandwidth->SetRange(1, 1000); _maximum_j2k_bandwidth->Bind(wxEVT_SPINCTRL, boost::bind(&NonStandardPage::maximum_j2k_bandwidth_changed, this)); @@ -1551,6 +1552,7 @@ private: _allow_any_container->bind(&NonStandardPage::allow_any_container_changed, this); _allow_96khz_audio->bind(&NonStandardPage::allow_96khz_audio_changed, this); _use_all_audio_channels->bind(&NonStandardPage::use_all_channels_changed, this); + _allow_smpte_bv20->bind(&NonStandardPage::allow_smpte_bv20_changed, this); } void config_changed() override @@ -1562,6 +1564,7 @@ private: checked_set(_allow_any_container, config->allow_any_container()); checked_set(_allow_96khz_audio, config->allow_96khz_audio()); checked_set(_use_all_audio_channels, config->use_all_audio_channels()); + checked_set(_allow_smpte_bv20, config->allow_smpte_bv20()); } void maximum_j2k_bandwidth_changed() @@ -1589,11 +1592,17 @@ private: Config::instance()->set_use_all_audio_channels(_use_all_audio_channels->GetValue()); } + void allow_smpte_bv20_changed() + { + Config::instance()->set_allow_smpte_bv20(_allow_smpte_bv20->GetValue()); + } + wxSpinCtrl* _maximum_j2k_bandwidth = nullptr; CheckBox* _allow_any_dcp_frame_rate = nullptr; CheckBox* _allow_any_container = nullptr; CheckBox* _allow_96khz_audio = nullptr; CheckBox* _use_all_audio_channels = nullptr; + CheckBox* _allow_smpte_bv20 = nullptr; }; |
