summaryrefslogtreecommitdiff
path: root/src/wx
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-04-22 21:39:03 +0200
committerCarl Hetherington <cth@carlh.net>2024-04-22 21:39:03 +0200
commit764c35279cf79e96a9d738ad86625bc3137fc8d7 (patch)
tree0f778d72bc5c8bb74dfbacd07ea570b15eaf28d7 /src/wx
parenta046e7fedb6d6e6703e36999fc6b6183252f0438 (diff)
parentb74f594ce1dee47fdb5cbeebdc3d6577cdd1cab8 (diff)
Merge branch 'mpeg2' into v2.17.xv2.17.16
Diffstat (limited to 'src/wx')
-rw-r--r--src/wx/config_dialog.cc1
-rw-r--r--src/wx/dcp_panel.cc111
-rw-r--r--src/wx/dcp_panel.h6
-rw-r--r--src/wx/dcp_timeline.cc8
-rw-r--r--src/wx/dcp_timeline.h2
-rw-r--r--src/wx/dcpomatic_choice.cc22
-rw-r--r--src/wx/dcpomatic_choice.h10
-rw-r--r--src/wx/export_video_file_dialog.h2
-rw-r--r--src/wx/film_viewer.h2
-rw-r--r--src/wx/full_config_dialog.cc87
-rw-r--r--src/wx/kdm_cpl_panel.cc1
-rw-r--r--src/wx/kdm_timing_panel.cc2
-rw-r--r--src/wx/metadata_dialog.cc10
-rw-r--r--src/wx/timeline_content_view.cc1
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>