diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-04-22 21:39:03 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-04-22 21:39:03 +0200 |
| commit | 764c35279cf79e96a9d738ad86625bc3137fc8d7 (patch) | |
| tree | 0f778d72bc5c8bb74dfbacd07ea570b15eaf28d7 /src/wx | |
| parent | a046e7fedb6d6e6703e36999fc6b6183252f0438 (diff) | |
| parent | b74f594ce1dee47fdb5cbeebdc3d6577cdd1cab8 (diff) | |
Merge branch 'mpeg2' into v2.17.xv2.17.16
Diffstat (limited to 'src/wx')
| -rw-r--r-- | src/wx/config_dialog.cc | 1 | ||||
| -rw-r--r-- | src/wx/dcp_panel.cc | 111 | ||||
| -rw-r--r-- | src/wx/dcp_panel.h | 6 | ||||
| -rw-r--r-- | src/wx/dcp_timeline.cc | 8 | ||||
| -rw-r--r-- | src/wx/dcp_timeline.h | 2 | ||||
| -rw-r--r-- | src/wx/dcpomatic_choice.cc | 22 | ||||
| -rw-r--r-- | src/wx/dcpomatic_choice.h | 10 | ||||
| -rw-r--r-- | src/wx/export_video_file_dialog.h | 2 | ||||
| -rw-r--r-- | src/wx/film_viewer.h | 2 | ||||
| -rw-r--r-- | src/wx/full_config_dialog.cc | 87 | ||||
| -rw-r--r-- | src/wx/kdm_cpl_panel.cc | 1 | ||||
| -rw-r--r-- | src/wx/kdm_timing_panel.cc | 2 | ||||
| -rw-r--r-- | src/wx/metadata_dialog.cc | 10 | ||||
| -rw-r--r-- | src/wx/timeline_content_view.cc | 1 |
14 files changed, 170 insertions, 95 deletions
diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 04bb26c2e..05c3f281c 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -27,6 +27,7 @@ #include "static_text.h" #include "wx_variant.h" #include "lib/constants.h" +#include "lib/util.h" #include <dcp/file.h> #include <dcp/filesystem.h> #include <dcp/raw_convert.h> diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 781c95de7..bc8ac859c 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -131,7 +131,7 @@ DCPPanel::DCPPanel(wxNotebook* n, shared_ptr<Film> film, FilmViewer& viewer) _reels->Bind(wxEVT_BUTTON, boost::bind(&DCPPanel::reels_clicked, this)); for (auto i: DCPContentType::all()) { - _dcp_content_type->add(i->pretty_name()); + _dcp_content_type->add_entry(i->pretty_name()); } add_standards(); @@ -146,11 +146,12 @@ DCPPanel::DCPPanel(wxNotebook* n, shared_ptr<Film> film, FilmViewer& viewer) void DCPPanel::add_standards() { - _standard->add(_("SMPTE"), N_("smpte")); + _standard->add_entry(_("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_entry(_("SMPTE (Bv2.0 only)"), N_("smpte-bv20")); } - _standard->add(_("Interop"), N_("interop")); + _standard->add_entry(_("Interop"), N_("interop")); + _standard->add_entry(_("MPEG2 Interop"), N_("mpeg2-interop")); _sizer->Layout(); } @@ -162,7 +163,11 @@ DCPPanel::set_standard() DCPOMATIC_ASSERT(!_film->limit_to_smpte_bv20() || _standard->GetCount() == 3); if (_film->interop()) { - checked_set(_standard, "interop"); + if (_film->video_encoding() == VideoEncoding::JPEG2000) { + checked_set(_standard, "interop"); + } else { + checked_set(_standard, "mpeg2-interop"); + } } else { checked_set(_standard, _film->limit_to_smpte_bv20() ? "smpte-bv20" : "smpte"); } @@ -184,12 +189,18 @@ DCPPanel::standard_changed () if (*data == N_("interop")) { _film->set_interop(true); _film->set_limit_to_smpte_bv20(false); + _film->set_video_encoding(VideoEncoding::JPEG2000); } else if (*data == N_("smpte")) { _film->set_interop(false); _film->set_limit_to_smpte_bv20(false); + _film->set_video_encoding(VideoEncoding::JPEG2000); } else if (*data == N_("smpte-bv20")) { _film->set_interop(false); _film->set_limit_to_smpte_bv20(true); + _film->set_video_encoding(VideoEncoding::JPEG2000); + } else if (*data == N_("mpeg2-interop")) { + _film->set_interop(true); + _film->set_video_encoding(VideoEncoding::MPEG2); } } @@ -253,13 +264,13 @@ DCPPanel::name_changed () void -DCPPanel::j2k_bandwidth_changed () +DCPPanel::video_bit_rate_changed() { if (!_film) { return; } - _film->set_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1000000); + _film->set_video_bit_rate(_film->video_encoding(), _video_bit_rate->GetValue() * 1000000); } @@ -385,8 +396,8 @@ DCPPanel::film_changed(FilmProperty p) setup_container (); setup_dcp_name (); break; - case FilmProperty::J2K_BANDWIDTH: - checked_set (_j2k_bandwidth, _film->j2k_bandwidth() / 1000000); + case FilmProperty::VIDEO_BIT_RATE: + checked_set(_video_bit_rate, _film->video_bit_rate(_film->video_encoding()) / 1000000); break; case FilmProperty::USE_ISDCF_NAME: { @@ -445,6 +456,12 @@ DCPPanel::film_changed(FilmProperty p) setup_dcp_name (); _markers->Enable (!_film->interop()); break; + case FilmProperty::VIDEO_ENCODING: + set_standard(); + setup_container(); + setup_sensitivity(); + film_changed(FilmProperty::VIDEO_BIT_RATE); + break; case FilmProperty::LIMIT_TO_SMPTE_BV20: set_standard(); break; @@ -526,24 +543,28 @@ DCPPanel::film_content_changed (int property) void DCPPanel::setup_container () { - int n = 0; - auto ratios = Ratio::containers (); - auto i = ratios.begin (); - while (i != ratios.end() && *i != _film->container()) { - ++i; - ++n; + auto ratios = Ratio::containers(); + if (std::find(ratios.begin(), ratios.end(), _film->container()) == ratios.end()) { + ratios.push_back(_film->container()); } - if (i == ratios.end()) { - checked_set (_container, -1); - checked_set (_container_size, wxT("")); - } else { - checked_set (_container, n); - auto const size = fit_ratio_within (_film->container()->ratio(), _film->full_frame ()); - checked_set (_container_size, wxString::Format("%dx%d", size.width, size.height)); + wxArrayString new_ratios; + for (auto ratio: ratios) { + new_ratios.Add(std_to_wx(ratio->container_nickname())); } + _container->set_entries(new_ratios); + + auto iter = std::find_if(ratios.begin(), ratios.end(), [this](Ratio const* ratio) { return ratio == _film->container(); }); + DCPOMATIC_ASSERT(iter != ratios.end()); + + checked_set(_container, iter - ratios.begin()); + auto const size = fit_ratio_within(_film->container()->ratio(), _film->full_frame ()); + checked_set(_container_size, wxString::Format("%dx%d", size.width, size.height)); + setup_dcp_name (); + + _video_grid->Layout(); } @@ -605,7 +626,7 @@ DCPPanel::set_film (shared_ptr<Film> film) film_changed(FilmProperty::CONTAINER); film_changed(FilmProperty::RESOLUTION); film_changed(FilmProperty::ENCRYPTED); - film_changed(FilmProperty::J2K_BANDWIDTH); + film_changed(FilmProperty::VIDEO_BIT_RATE); film_changed(FilmProperty::VIDEO_FRAME_RATE); film_changed(FilmProperty::AUDIO_CHANNELS); film_changed(FilmProperty::SEQUENCE); @@ -634,6 +655,8 @@ DCPPanel::set_general_sensitivity (bool s) void DCPPanel::setup_sensitivity () { + auto const mpeg2 = _film && _film->video_encoding() == VideoEncoding::MPEG2; + _name->Enable (_generally_sensitive); _use_isdcf_name->Enable (_generally_sensitive); _dcp_content_type->Enable (_generally_sensitive); @@ -649,8 +672,8 @@ DCPPanel::setup_sensitivity () _frame_rate_spin->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->contains_atmos_content()); _audio_channels->Enable (_generally_sensitive && _film && !_film->references_dcp_audio()); _audio_processor->Enable (_generally_sensitive && _film && !_film->references_dcp_audio()); - _j2k_bandwidth->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); - _container->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); + _video_bit_rate->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); + _container->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !mpeg2); _best_frame_rate->Enable ( _generally_sensitive && _film && @@ -658,8 +681,8 @@ DCPPanel::setup_sensitivity () !_film->references_dcp_video() && !_film->contains_atmos_content() ); - _resolution->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); - _three_d->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); + _resolution->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !mpeg2); + _three_d->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !mpeg2); _standard->Enable ( _generally_sensitive && @@ -732,7 +755,8 @@ DCPPanel::reencode_j2k_changed () void DCPPanel::config_changed (Config::Property p) { - _j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000); + VideoEncoding const encoding = _film ? _film->video_encoding() : VideoEncoding::JPEG2000; + _video_bit_rate->SetRange(1, Config::instance()->maximum_video_bit_rate(encoding) / 1000000); setup_frame_rate_widget (); if (p == Config::SHOW_EXPERIMENTAL_AUDIO_PROCESSORS) { @@ -750,6 +774,8 @@ DCPPanel::config_changed (Config::Property p) } } else if (p == Config::ISDCF_NAME_PART_LENGTH) { setup_dcp_name(); + } else if (p == Config::ALLOW_ANY_CONTAINER) { + setup_container(); } } @@ -791,8 +817,8 @@ DCPPanel::make_video_panel () _three_d = new CheckBox (panel, _("3D")); - _j2k_bandwidth_label = create_label (panel, _("JPEG2000 bandwidth\nfor newly-encoded data"), true); - _j2k_bandwidth = new SpinCtrl (panel, DCPOMATIC_SPIN_CTRL_WIDTH); + _video_bit_rate_label = create_label(panel, _("Video bit rate\nfor newly-encoded data"), true); + _video_bit_rate = new SpinCtrl(panel, DCPOMATIC_SPIN_CTRL_WIDTH); _mbits_label = create_label (panel, _("Mbit/s"), false); _reencode_j2k = new CheckBox (panel, _("Re-encode JPEG2000 data from input")); @@ -801,26 +827,23 @@ DCPPanel::make_video_panel () _frame_rate_choice->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::frame_rate_choice_changed, this)); _frame_rate_spin->Bind (wxEVT_SPINCTRL, boost::bind(&DCPPanel::frame_rate_spin_changed, this)); _best_frame_rate->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::best_frame_rate_clicked, this)); - _j2k_bandwidth->Bind (wxEVT_SPINCTRL, boost::bind(&DCPPanel::j2k_bandwidth_changed, this)); + _video_bit_rate->Bind (wxEVT_SPINCTRL, boost::bind(&DCPPanel::video_bit_rate_changed, this)); /* Also listen to wxEVT_TEXT so that typing numbers directly in is always noticed */ - _j2k_bandwidth->Bind (wxEVT_TEXT, boost::bind(&DCPPanel::j2k_bandwidth_changed, this)); + _video_bit_rate->Bind (wxEVT_TEXT, boost::bind(&DCPPanel::video_bit_rate_changed, this)); _resolution->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::resolution_changed, this)); _three_d->bind(&DCPPanel::three_d_changed, this); _reencode_j2k->bind(&DCPPanel::reencode_j2k_changed, this); - for (auto i: Ratio::containers()) { - _container->add(i->container_nickname()); - } - for (auto i: Config::instance()->allowed_dcp_frame_rates()) { - _frame_rate_choice->add(boost::lexical_cast<string>(i)); + _frame_rate_choice->add_entry(boost::lexical_cast<string>(i)); } - _j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000); + VideoEncoding const encoding = _film ? _film->video_encoding() : VideoEncoding::JPEG2000; + _video_bit_rate->SetRange(1, Config::instance()->maximum_video_bit_rate(encoding) / 1000000); _frame_rate_spin->SetRange (1, 480); - _resolution->add(_("2K")); - _resolution->add(_("4K")); + _resolution->add_entry(_("2K")); + _resolution->add_entry(_("4K")); add_video_panel_to_grid (); setup_frame_rate_widget(); @@ -860,9 +883,9 @@ DCPPanel::add_video_panel_to_grid () _video_grid->Add (_three_d, wxGBPosition (r, 0), wxGBSpan (1, 2)); ++r; - add_label_to_sizer (_video_grid, _j2k_bandwidth_label, true, wxGBPosition (r, 0)); + add_label_to_sizer(_video_grid, _video_bit_rate_label, true, wxGBPosition (r, 0)); auto s = new wxBoxSizer (wxHORIZONTAL); - s->Add (_j2k_bandwidth, 0, wxALIGN_CENTER_VERTICAL); + s->Add(_video_bit_rate, 0, wxALIGN_CENTER_VERTICAL); add_label_to_sizer (s, _mbits_label, false, 0, wxLEFT | wxALIGN_CENTER_VERTICAL); _video_grid->Add (s, wxGBPosition(r, 1), wxDefaultSpan); ++r; @@ -1010,9 +1033,9 @@ DCPPanel::show_audio_clicked () void DCPPanel::add_audio_processors () { - _audio_processor->add(_("None"), new wxStringClientData(N_("none"))); + _audio_processor->add_entry(_("None"), new wxStringClientData(N_("none"))); for (auto ap: AudioProcessor::visible()) { - _audio_processor->add(std_to_wx(ap->name()), new wxStringClientData(std_to_wx(ap->id()))); + _audio_processor->add_entry(std_to_wx(ap->name()), new wxStringClientData(std_to_wx(ap->id()))); } _audio_panel_sizer->Layout(); } diff --git a/src/wx/dcp_panel.h b/src/wx/dcp_panel.h index 6c97a41c3..c686a9c55 100644 --- a/src/wx/dcp_panel.h +++ b/src/wx/dcp_panel.h @@ -71,7 +71,7 @@ private: void copy_isdcf_name_button_clicked (); void container_changed (); void dcp_content_type_changed (); - void j2k_bandwidth_changed (); + void video_bit_rate_changed(); void frame_rate_choice_changed (); void frame_rate_spin_changed (); void best_frame_rate_clicked (); @@ -129,9 +129,9 @@ private: Choice* _container; wxStaticText* _container_size; wxButton* _copy_isdcf_name_button; - wxStaticText* _j2k_bandwidth_label; + wxStaticText* _video_bit_rate_label; wxStaticText* _mbits_label; - wxSpinCtrl* _j2k_bandwidth; + wxSpinCtrl* _video_bit_rate; wxStaticText* _dcp_content_type_label; Choice* _dcp_content_type; wxStaticText* _frame_rate_label; diff --git a/src/wx/dcp_timeline.cc b/src/wx/dcp_timeline.cc index 6474a8428..7b8e93325 100644 --- a/src/wx/dcp_timeline.cc +++ b/src/wx/dcp_timeline.cc @@ -230,10 +230,10 @@ DCPTimeline::setup_reel_settings() int r = 0; add_label_to_sizer(sizer, _reel_settings, _("Reel mode"), true, wxGBPosition(r, 0)); _reel_type = new Choice(_reel_settings); - _reel_type->add(_("Single reel")); - _reel_type->add(_("Split by video content")); - _reel_type->add(_("Split by maximum reel size")); - _reel_type->add(_("Custom")); + _reel_type->add_entry(_("Single reel")); + _reel_type->add_entry(_("Split by video content")); + _reel_type->add_entry(_("Split by maximum reel size")); + _reel_type->add_entry(_("Custom")); sizer->Add(_reel_type, wxGBPosition(r, 1)); ++r; diff --git a/src/wx/dcp_timeline.h b/src/wx/dcp_timeline.h index 3413c2814..23644c03f 100644 --- a/src/wx/dcp_timeline.h +++ b/src/wx/dcp_timeline.h @@ -25,6 +25,8 @@ #include "timecode.h" #include "timeline.h" +#include "lib/change_signaller.h" +#include "lib/film_property.h" #include "lib/rect.h" #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS diff --git a/src/wx/dcpomatic_choice.cc b/src/wx/dcpomatic_choice.cc index 2f1a6f0e9..f2e215439 100644 --- a/src/wx/dcpomatic_choice.cc +++ b/src/wx/dcpomatic_choice.cc @@ -40,14 +40,14 @@ Choice::Choice(wxWindow* parent) void -Choice::add(string const& entry) +Choice::add_entry(string const& entry) { - add(std_to_wx(entry)); + add_entry(std_to_wx(entry)); } void -Choice::add(wxString const& entry) +Choice::add_entry(wxString const& entry) { if (_needs_clearing) { Clear(); @@ -59,7 +59,7 @@ Choice::add(wxString const& entry) void -Choice::add(wxString const& entry, wxClientData* data) +Choice::add_entry(wxString const& entry, wxClientData* data) { if (_needs_clearing) { Clear(); @@ -71,7 +71,7 @@ Choice::add(wxString const& entry, wxClientData* data) void -Choice::add(wxString const& entry, wxString const& data) +Choice::add_entry(wxString const& entry, wxString const& data) { if (_needs_clearing) { Clear(); @@ -83,6 +83,18 @@ Choice::add(wxString const& entry, wxString const& data) void +Choice::set_entries(wxArrayString const& entries) +{ + if (GetStrings() == entries) { + return; + } + + Clear(); + Set(entries); +} + + +void Choice::set(int index) { SetSelection(index); diff --git a/src/wx/dcpomatic_choice.h b/src/wx/dcpomatic_choice.h index dec0a3701..cc8115d20 100644 --- a/src/wx/dcpomatic_choice.h +++ b/src/wx/dcpomatic_choice.h @@ -32,10 +32,12 @@ class Choice : public wxChoice public: Choice(wxWindow* parent); - void add(wxString const& entry); - void add(wxString const& entry, wxClientData* data); - void add(wxString const& entry, wxString const& data); - void add(std::string const& entry); + void add_entry(wxString const& entry); + void add_entry(wxString const& entry, wxClientData* data); + void add_entry(wxString const& entry, wxString const& data); + void add_entry(std::string const& entry); + void set_entries(wxArrayString const& entries); + void set(int index); void set_by_data(wxString const& data); boost::optional<int> get() const; diff --git a/src/wx/export_video_file_dialog.h b/src/wx/export_video_file_dialog.h index beb33610b..4e626be6b 100644 --- a/src/wx/export_video_file_dialog.h +++ b/src/wx/export_video_file_dialog.h @@ -20,7 +20,7 @@ #include "table_dialog.h" -#include "lib/ffmpeg_encoder.h" +#include "lib/ffmpeg_file_encoder.h" #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS #include <wx/wx.h> diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index 5824f8baa..63aa113d1 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -25,8 +25,10 @@ #include "video_view.h" +#include "lib/change_signaller.h" #include "lib/config.h" #include "lib/film_property.h" +#include "lib/player.h" #include "lib/player_text.h" #include "lib/signaller.h" #include "lib/timer.h" diff --git a/src/wx/full_config_dialog.cc b/src/wx/full_config_dialog.cc index 193392f29..00e5575b1 100644 --- a/src/wx/full_config_dialog.cc +++ b/src/wx/full_config_dialog.cc @@ -147,8 +147,8 @@ private: add_update_controls (table, r); - _default_add_file_location->add(_("Same place as last time")); - _default_add_file_location->add(_("Same place as project")); + _default_add_file_location->add_entry(_("Same place as last time")); + _default_add_file_location->add_entry(_("Same place as project")); _default_add_file_location->bind(&FullGeneralPage::default_add_file_location_changed, this); _config_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind(&FullGeneralPage::config_file_changed, this)); @@ -320,10 +320,19 @@ private: table->Add (_dcp_audio_channels); { - add_label_to_sizer (table, _panel, _("Default JPEG2000 bandwidth"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); + add_label_to_sizer(table, _panel, _("Default JPEG2000 bit rate"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); auto s = new wxBoxSizer (wxHORIZONTAL); - _j2k_bandwidth = new wxSpinCtrl (_panel); - s->Add (_j2k_bandwidth); + _j2k_video_bit_rate = new wxSpinCtrl(_panel); + s->Add(_j2k_video_bit_rate); + add_label_to_sizer (s, _panel, _("Mbit/s"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); + table->Add (s, 1); + } + + { + add_label_to_sizer(table, _panel, _("Default MPEG2 bit rate"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); + auto s = new wxBoxSizer (wxHORIZONTAL); + _mpeg2_video_bit_rate = new wxSpinCtrl(_panel); + s->Add(_mpeg2_video_bit_rate); add_label_to_sizer (s, _panel, _("Mbit/s"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); table->Add (s, 1); } @@ -410,8 +419,10 @@ private: _dcp_content_type->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::dcp_content_type_changed, this)); _dcp_audio_channels->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::dcp_audio_channels_changed, this)); - _j2k_bandwidth->SetRange (50, 250); - _j2k_bandwidth->Bind (wxEVT_SPINCTRL, boost::bind (&DefaultsPage::j2k_bandwidth_changed, this)); + _j2k_video_bit_rate->SetRange(50, 250); + _j2k_video_bit_rate->Bind(wxEVT_SPINCTRL, boost::bind(&DefaultsPage::j2k_video_bit_rate_changed, this)); + _mpeg2_video_bit_rate->SetRange(1, 50); + _mpeg2_video_bit_rate->Bind(wxEVT_SPINCTRL, boost::bind(&DefaultsPage::mpeg2_video_bit_rate_changed, this)); _audio_delay->SetRange (-1000, 1000); _audio_delay->Bind (wxEVT_SPINCTRL, boost::bind (&DefaultsPage::audio_delay_changed, this)); @@ -451,8 +462,10 @@ private: _kdm_directory->SetPath (std_to_wx (config->default_kdm_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())).string ())); _kdm_type->set (config->default_kdm_type()); checked_set (_use_isdcf_name_by_default, config->use_isdcf_name_by_default()); - checked_set (_j2k_bandwidth, config->default_j2k_bandwidth() / 1000000); - _j2k_bandwidth->SetRange (50, config->maximum_j2k_bandwidth() / 1000000); + checked_set(_j2k_video_bit_rate, config->default_video_bit_rate(VideoEncoding::JPEG2000) / 1000000); + _j2k_video_bit_rate->SetRange(50, config->maximum_video_bit_rate(VideoEncoding::JPEG2000) / 1000000); + checked_set(_mpeg2_video_bit_rate, config->default_video_bit_rate(VideoEncoding::MPEG2) / 1000000); + _mpeg2_video_bit_rate->SetRange(1, config->maximum_video_bit_rate(VideoEncoding::MPEG2) / 1000000); checked_set (_dcp_audio_channels, locale_convert<string> (config->default_dcp_audio_channels())); checked_set (_audio_delay, config->default_audio_delay ()); checked_set (_standard, config->default_interop() ? 1 : 0); @@ -527,9 +540,14 @@ private: config->set_default_kdm_duration (RoughDuration(duration, unit)); } - void j2k_bandwidth_changed () + void j2k_video_bit_rate_changed() { - Config::instance()->set_default_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1000000); + Config::instance()->set_default_video_bit_rate(VideoEncoding::JPEG2000, _j2k_video_bit_rate->GetValue() * 1000000); + } + + void mpeg2_video_bit_rate_changed() + { + Config::instance()->set_default_video_bit_rate(VideoEncoding::MPEG2, _mpeg2_video_bit_rate->GetValue() * 1000000); } void audio_delay_changed () @@ -634,7 +652,8 @@ private: } } - wxSpinCtrl* _j2k_bandwidth; + wxSpinCtrl* _j2k_video_bit_rate; + wxSpinCtrl* _mpeg2_video_bit_rate; wxSpinCtrl* _audio_delay; wxSpinCtrl* _still_length; #ifdef DCPOMATIC_USE_OWN_PICKER @@ -1541,10 +1560,19 @@ private: _panel->GetSizer()->Add(table, 1, wxALL | wxEXPAND, _border); { - add_label_to_sizer(table, _panel, _("Maximum JPEG2000 bandwidth"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); + add_label_to_sizer(table, _panel, _("Maximum JPEG2000 bit rate"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); + auto s = new wxBoxSizer(wxHORIZONTAL); + _maximum_j2k_video_bit_rate = new wxSpinCtrl(_panel); + s->Add(_maximum_j2k_video_bit_rate, 1); + add_label_to_sizer(s, _panel, _("Mbit/s"), false, 0, wxLEFT | wxALIGN_CENTRE_VERTICAL); + table->Add(s, 1); + } + + { + add_label_to_sizer(table, _panel, _("Maximum MPEG2 bit rate"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTRE_VERTICAL); auto s = new wxBoxSizer(wxHORIZONTAL); - _maximum_j2k_bandwidth = new wxSpinCtrl(_panel); - s->Add(_maximum_j2k_bandwidth, 1); + _maximum_mpeg2_video_bit_rate = new wxSpinCtrl(_panel); + s->Add(_maximum_mpeg2_video_bit_rate, 1); add_label_to_sizer(s, _panel, _("Mbit/s"), false, 0, wxLEFT | wxALIGN_CENTRE_VERTICAL); table->Add(s, 1); } @@ -1559,13 +1587,7 @@ private: _allow_any_container = new CheckBox(_panel, _("Allow full-frame and non-standard container ratios")); table->Add(_allow_any_container, 1, wxEXPAND | wxLEFT, DCPOMATIC_SIZER_GAP); - auto restart = new StaticText(_panel, variant::wx::insert_dcpomatic(_("(restart %s to see all ratios)"))); - auto font = restart->GetFont(); - font.SetStyle(wxFONTSTYLE_ITALIC); - font.SetPointSize(font.GetPointSize() - 1); - restart->SetFont(font); - table->Add(restart, 1, wxALIGN_CENTRE_VERTICAL | wxBOTTOM, DCPOMATIC_CHECKBOX_BOTTOM_PAD); - restart->SetFont(font); + table->AddSpacer(0); checkbox(_("Allow creation of DCPs with 96kHz audio"), _allow_96khz_audio); checkbox(_("Allow mapping to all audio channels"), _use_all_audio_channels); @@ -1579,8 +1601,10 @@ private: table->Add(s, 1); } - _maximum_j2k_bandwidth->SetRange(1, 1000); - _maximum_j2k_bandwidth->Bind(wxEVT_SPINCTRL, boost::bind(&NonStandardPage::maximum_j2k_bandwidth_changed, this)); + _maximum_j2k_video_bit_rate->SetRange(1, 1000); + _maximum_j2k_video_bit_rate->Bind(wxEVT_SPINCTRL, boost::bind(&NonStandardPage::maximum_j2k_video_bit_rate_changed, this)); + _maximum_mpeg2_video_bit_rate->SetRange(1, 100); + _maximum_mpeg2_video_bit_rate->Bind(wxEVT_SPINCTRL, boost::bind(&NonStandardPage::maximum_mpeg2_video_bit_rate_changed, this)); _allow_any_dcp_frame_rate->bind(&NonStandardPage::allow_any_dcp_frame_rate_changed, this); _allow_any_container->bind(&NonStandardPage::allow_any_container_changed, this); _allow_96khz_audio->bind(&NonStandardPage::allow_96khz_audio_changed, this); @@ -1594,7 +1618,8 @@ private: { auto config = Config::instance(); - checked_set(_maximum_j2k_bandwidth, config->maximum_j2k_bandwidth() / 1000000); + checked_set(_maximum_j2k_video_bit_rate, config->maximum_video_bit_rate(VideoEncoding::JPEG2000) / 1000000); + checked_set(_maximum_mpeg2_video_bit_rate, config->maximum_video_bit_rate(VideoEncoding::MPEG2) / 1000000); checked_set(_allow_any_dcp_frame_rate, config->allow_any_dcp_frame_rate()); checked_set(_allow_any_container, config->allow_any_container()); checked_set(_allow_96khz_audio, config->allow_96khz_audio()); @@ -1603,9 +1628,14 @@ private: checked_set(_isdcf_name_part_length, config->isdcf_name_part_length()); } - void maximum_j2k_bandwidth_changed() + void maximum_j2k_video_bit_rate_changed() + { + Config::instance()->set_maximum_video_bit_rate(VideoEncoding::JPEG2000, _maximum_j2k_video_bit_rate->GetValue() * 1000000); + } + + void maximum_mpeg2_video_bit_rate_changed() { - Config::instance()->set_maximum_j2k_bandwidth(_maximum_j2k_bandwidth->GetValue() * 1000000); + Config::instance()->set_maximum_video_bit_rate(VideoEncoding::MPEG2, _maximum_mpeg2_video_bit_rate->GetValue() * 1000000); } void allow_any_dcp_frame_rate_changed() @@ -1638,7 +1668,8 @@ private: Config::instance()->set_isdcf_name_part_length(_isdcf_name_part_length->GetValue()); } - wxSpinCtrl* _maximum_j2k_bandwidth = nullptr; + wxSpinCtrl* _maximum_j2k_video_bit_rate = nullptr; + wxSpinCtrl* _maximum_mpeg2_video_bit_rate = nullptr; CheckBox* _allow_any_dcp_frame_rate = nullptr; CheckBox* _allow_any_container = nullptr; CheckBox* _allow_96khz_audio = nullptr; diff --git a/src/wx/kdm_cpl_panel.cc b/src/wx/kdm_cpl_panel.cc index 4e1eb8f34..523d0c369 100644 --- a/src/wx/kdm_cpl_panel.cc +++ b/src/wx/kdm_cpl_panel.cc @@ -23,6 +23,7 @@ #include "kdm_cpl_panel.h" #include "static_text.h" #include "wx_util.h" +#include <dcp/filesystem.h> #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS #include <libxml++/libxml++.h> diff --git a/src/wx/kdm_timing_panel.cc b/src/wx/kdm_timing_panel.cc index f4112cb08..6e362a3b2 100644 --- a/src/wx/kdm_timing_panel.cc +++ b/src/wx/kdm_timing_panel.cc @@ -124,7 +124,7 @@ KDMTimingPanel::KDMTimingPanel (wxWindow* parent) /* Default to UTC */ size_t sel = get_offsets(_offsets); for (size_t i = 0; i < _offsets.size(); ++i) { - _utc_offset->add(_offsets[i].name); + _utc_offset->add_entry(_offsets[i].name); if (_offsets[i].hour == 0 && _offsets[i].minute == 0) { sel = i; } diff --git a/src/wx/metadata_dialog.cc b/src/wx/metadata_dialog.cc index 347f2fffd..1d0758175 100644 --- a/src/wx/metadata_dialog.cc +++ b/src/wx/metadata_dialog.cc @@ -204,9 +204,9 @@ MetadataDialog::setup_standard (wxPanel* panel, wxSizer* sizer) { add_label_to_sizer(sizer, panel, _("Territory type"), true, 0, wxALIGN_CENTER_VERTICAL); _territory_type = new Choice(panel); - _territory_type->add(_("Specific"), wx_to_std(territory_type_to_string(TerritoryType::SPECIFIC))); - _territory_type->add(_("International texted"), wx_to_std(territory_type_to_string(TerritoryType::INTERNATIONAL_TEXTED))); - _territory_type->add(_("International textless"), wx_to_std(territory_type_to_string(TerritoryType::INTERNATIONAL_TEXTLESS))); + _territory_type->add_entry(_("Specific"), wx_to_std(territory_type_to_string(TerritoryType::SPECIFIC))); + _territory_type->add_entry(_("International texted"), wx_to_std(territory_type_to_string(TerritoryType::INTERNATIONAL_TEXTED))); + _territory_type->add_entry(_("International textless"), wx_to_std(territory_type_to_string(TerritoryType::INTERNATIONAL_TEXTLESS))); sizer->Add(_territory_type); _enable_release_territory = new CheckBox(panel, _("Release territory")); @@ -330,8 +330,8 @@ MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer) sizer->Add (s, 1, wxEXPAND); } - _luminance_unit->add(_("candela per m²")); - _luminance_unit->add(_("foot lambert")); + _luminance_unit->add_entry(_("candela per m²")); + _luminance_unit->add_entry(_("foot lambert")); } diff --git a/src/wx/timeline_content_view.cc b/src/wx/timeline_content_view.cc index cb0d10240..69a675c42 100644 --- a/src/wx/timeline_content_view.cc +++ b/src/wx/timeline_content_view.cc @@ -23,6 +23,7 @@ #include "timeline_content_view.h" #include "wx_util.h" #include "lib/content.h" +#include "lib/util.h" #include <dcp/warnings.h> LIBDCP_DISABLE_WARNINGS #include <wx/graphics.h> |
