X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Fdcp_panel.cc;h=6574bcdb314397c14f388397fc218857b9200671;hp=1b97a023d263b327202ffb69d8a6e45446b024e0;hb=4ec9f7096050e9d1107628ffc28b785fba3020a0;hpb=fe851f2e6e57d3a8781ecc173089c19632c521e3 diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 1b97a023d..6574bcdb3 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -150,17 +150,70 @@ DCPPanel::DCPPanel(wxNotebook* n, shared_ptr film, FilmViewer& viewer) _reel_type->add(_("Split by video content")); /// TRANSLATORS: translate the word "Custom" here; do not include the "Reel|" prefix _reel_type->add(S_("Reel|Custom")); + _reel_type->SetToolTip(_("How the DCP should be split into parts internally. If in doubt, choose 'Single reel'")); _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)); 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")); + _sizer->Layout(); +} + + +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 () { @@ -313,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 () { @@ -432,10 +474,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()); @@ -585,6 +630,9 @@ DCPPanel::set_film (shared_ptr film) return; } + _standard->Clear(); + add_standards(); + film_changed (Film::Property::NAME); film_changed (Film::Property::USE_ISDCF_NAME); film_changed (Film::Property::CONTENT); @@ -604,6 +652,7 @@ DCPPanel::set_film (shared_ptr 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(_film)); } @@ -724,6 +773,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); + } } } @@ -738,6 +794,7 @@ DCPPanel::setup_frame_rate_widget () _frame_rate_choice->Show (); _frame_rate_spin->Hide (); } + _frame_rate_sizer->Layout(); } @@ -760,7 +817,6 @@ DCPPanel::make_video_panel () _frame_rate_label = create_label (panel, _("Frame Rate"), true); _frame_rate_choice = new Choice(panel); _frame_rate_spin = new SpinCtrl (panel, DCPOMATIC_SPIN_CTRL_WIDTH); - setup_frame_rate_widget (); _best_frame_rate = new Button (panel, _("Use best")); _three_d = new CheckBox (panel, _("3D")); @@ -797,6 +853,7 @@ DCPPanel::make_video_panel () _resolution->add(_("4K")); add_video_panel_to_grid (); + setup_frame_rate_widget(); return panel; }