diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-05-12 23:29:21 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-05-12 23:29:21 +0100 |
| commit | 93facb40ea1d2bf88053230afdc80af2737d7b99 (patch) | |
| tree | 9dec85dd42776e859ce3a0830011a82c155a3260 /src | |
| parent | 1a944e0bd39abf49bbe863b23c3b4b84eb7459fc (diff) | |
Add option to use any DCP frame rate, rather than just the
"allowed" set.
Requested-by: Noah Orozco
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/config.cc | 5 | ||||
| -rw-r--r-- | src/lib/config.h | 11 | ||||
| -rw-r--r-- | src/wx/config_dialog.cc | 12 | ||||
| -rw-r--r-- | src/wx/film_editor.cc | 63 | ||||
| -rw-r--r-- | src/wx/film_editor.h | 8 |
5 files changed, 81 insertions, 18 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc index d7503b848..40ae3971b 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -61,6 +61,7 @@ Config::Config () , _use_any_servers (true) , _tms_path (".") , _sound_processor (SoundProcessor::from_id (N_("dolby_cp750"))) + , _allow_any_dcp_frame_rate (false) , _default_still_length (10) , _default_container (Ratio::from_id ("185")) , _default_dcp_content_type (DCPContentType::from_dci_name ("TST")) @@ -187,6 +188,7 @@ Config::read () _check_for_test_updates = f.optional_bool_child("CheckForTestUpdates").get_value_or (false); _maximum_j2k_bandwidth = f.optional_number_child<int> ("MaximumJ2KBandwidth").get_value_or (250000000); + _allow_any_dcp_frame_rate = f.optional_bool_child ("AllowAnyDCPFrameRate"); } void @@ -363,7 +365,8 @@ Config::write () const root->add_child("CheckForTestUpdates")->add_child_text (_check_for_test_updates ? "1" : "0"); root->add_child("MaximumJ2KBandwidth")->add_child_text (raw_convert<string> (_maximum_j2k_bandwidth)); - + root->add_child("AllowAnyDCPFrameRate")->add_child_text (_allow_any_dcp_frame_rate ? "1" : "0"); + doc.write_to_file_formatted (file(false).string ()); } diff --git a/src/lib/config.h b/src/lib/config.h index a40e3680a..87b7038de 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -116,6 +116,10 @@ public: std::list<int> allowed_dcp_frame_rates () const { return _allowed_dcp_frame_rates; } + + bool allow_any_dcp_frame_rate () const { + return _allow_any_dcp_frame_rate; + } DCIMetadata default_dci_metadata () const { return _default_dci_metadata; @@ -241,6 +245,11 @@ public: changed (); } + void set_allow_any_dcp_frame_rate (bool a) { + _allow_any_dcp_frame_rate = a; + changed (); + } + void set_default_dci_metadata (DCIMetadata d) { _default_dci_metadata = d; changed (); @@ -369,6 +378,8 @@ private: /** Our sound processor */ SoundProcessor const * _sound_processor; std::list<int> _allowed_dcp_frame_rates; + /** Allow any video frame rate for the DCP; if true, overrides _allowed_dcp_frame_rates */ + bool _allow_any_dcp_frame_rate; /** Default DCI metadata for newly-created Films */ DCIMetadata _default_dci_metadata; boost::optional<std::string> _language; diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index e7133a534..e27b79172 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -109,6 +109,10 @@ public: add_label_to_sizer (table, panel, _("Maximum JPEG2000 bandwidth"), true); _maximum_j2k_bandwidth = new wxSpinCtrl (panel); table->Add (_maximum_j2k_bandwidth, 1); + + _allow_any_dcp_frame_rate = new wxCheckBox (panel, wxID_ANY, _("Allow any DCP frame rate")); + table->Add (_allow_any_dcp_frame_rate, 1, wxEXPAND | wxALL); + table->AddSpacer (0); add_label_to_sizer (table, panel, _("Outgoing mail server"), true); _mail_server = new wxTextCtrl (panel, wxID_ANY); @@ -183,6 +187,8 @@ public: _check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_updates_changed, this)); _check_for_test_updates->SetValue (config->check_for_test_updates ()); _check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_test_updates_changed, this)); + _allow_any_dcp_frame_rate->SetValue (config->allow_any_dcp_frame_rate ()); + _allow_any_dcp_frame_rate->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::allow_any_dcp_frame_rate_changed, this)); return panel; } @@ -269,11 +275,17 @@ private: { Config::instance()->set_maximum_j2k_bandwidth (_maximum_j2k_bandwidth->GetValue() * 1000000); } + + void allow_any_dcp_frame_rate_changed () + { + Config::instance()->set_allow_any_dcp_frame_rate (_allow_any_dcp_frame_rate->GetValue ()); + } wxCheckBox* _set_language; wxChoice* _language; wxSpinCtrl* _num_local_encoding_threads; wxSpinCtrl* _maximum_j2k_bandwidth; + wxCheckBox* _allow_any_dcp_frame_rate; wxTextCtrl* _mail_server; wxTextCtrl* _mail_user; wxTextCtrl* _mail_password; diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc index 17198e8b3..51bb1f534 100644 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@ -143,12 +143,15 @@ FilmEditor::make_dcp_panel () { add_label_to_grid_bag_sizer (grid, _dcp_panel, _("Frame Rate"), true, wxGBPosition (r, 0)); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _frame_rate = new wxChoice (_dcp_panel, wxID_ANY); - s->Add (_frame_rate, 1, wxALIGN_CENTER_VERTICAL); + _frame_rate_sizer = new wxBoxSizer (wxHORIZONTAL); + _frame_rate_choice = new wxChoice (_dcp_panel, wxID_ANY); + _frame_rate_sizer->Add (_frame_rate_choice, 1, wxALIGN_CENTER_VERTICAL); + _frame_rate_spin = new wxSpinCtrl (_dcp_panel, wxID_ANY); + _frame_rate_sizer->Add (_frame_rate_spin, 1, wxALIGN_CENTER_VERTICAL); + setup_frame_rate_widget (); _best_frame_rate = new wxButton (_dcp_panel, wxID_ANY, _("Use best")); - s->Add (_best_frame_rate, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND); - grid->Add (s, wxGBPosition (r, 1)); + _frame_rate_sizer->Add (_best_frame_rate, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND); + grid->Add (_frame_rate_sizer, wxGBPosition (r, 1)); } ++r; @@ -211,7 +214,7 @@ FilmEditor::make_dcp_panel () list<int> const dfr = Config::instance()->allowed_dcp_frame_rates (); for (list<int>::const_iterator i = dfr.begin(); i != dfr.end(); ++i) { - _frame_rate->Append (std_to_wx (boost::lexical_cast<string> (*i))); + _frame_rate_choice->Append (std_to_wx (boost::lexical_cast<string> (*i))); } _audio_channels->SetRange (0, MAX_DCP_AUDIO_CHANNELS); @@ -242,7 +245,8 @@ FilmEditor::connect_to_widgets () _content_timeline->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FilmEditor::content_timeline_clicked, this)); _scaler->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&FilmEditor::scaler_changed, this)); _dcp_content_type->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&FilmEditor::dcp_content_type_changed, this)); - _frame_rate->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&FilmEditor::frame_rate_changed, this)); + _frame_rate_choice->Bind(wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&FilmEditor::frame_rate_choice_changed, this)); + _frame_rate_spin->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&FilmEditor::frame_rate_spin_changed, this)); _best_frame_rate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&FilmEditor::best_frame_rate_clicked, this)); _signed->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&FilmEditor::signed_toggled, this)); _encrypted->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&FilmEditor::encrypted_toggled, this)); @@ -352,9 +356,9 @@ FilmEditor::encrypted_toggled () _film->set_encrypted (_encrypted->GetValue ()); } -/** Called when the name widget has been changed */ +/** Called when the frame rate choice widget has been changed */ void -FilmEditor::frame_rate_changed () +FilmEditor::frame_rate_choice_changed () { if (!_film) { return; @@ -362,11 +366,22 @@ FilmEditor::frame_rate_changed () _film->set_video_frame_rate ( boost::lexical_cast<int> ( - wx_to_std (_frame_rate->GetString (_frame_rate->GetSelection ())) + wx_to_std (_frame_rate_choice->GetString (_frame_rate_choice->GetSelection ())) ) ); } +/** Called when the frame rate spin widget has been changed */ +void +FilmEditor::frame_rate_spin_changed () +{ + if (!_film) { + return; + } + + _film->set_video_frame_rate (_frame_rate_spin->GetValue ()); +} + void FilmEditor::audio_channels_changed () { @@ -468,18 +483,20 @@ FilmEditor::film_changed (Film::Property p) case Film::VIDEO_FRAME_RATE: { bool done = false; - for (unsigned int i = 0; i < _frame_rate->GetCount(); ++i) { - if (wx_to_std (_frame_rate->GetString(i)) == boost::lexical_cast<string> (_film->video_frame_rate())) { - checked_set (_frame_rate, i); + for (unsigned int i = 0; i < _frame_rate_choice->GetCount(); ++i) { + if (wx_to_std (_frame_rate_choice->GetString(i)) == boost::lexical_cast<string> (_film->video_frame_rate())) { + checked_set (_frame_rate_choice, i); done = true; break; } } if (!done) { - checked_set (_frame_rate, -1); + checked_set (_frame_rate_choice, -1); } + _frame_rate_spin->SetValue (_film->video_frame_rate ()); + _best_frame_rate->Enable (_film->best_video_frame_rate () != _film->video_frame_rate ()); break; } @@ -646,7 +663,8 @@ FilmEditor::set_general_sensitivity (bool s) _signed->Enable (si); _encrypted->Enable (s); - _frame_rate->Enable (s); + _frame_rate_choice->Enable (s); + _frame_rate_spin->Enable (s); _audio_channels->Enable (s); _j2k_bandwidth->Enable (s); _container->Enable (s); @@ -1016,4 +1034,19 @@ void FilmEditor::config_changed () { _j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000); + setup_frame_rate_widget (); +} + +void +FilmEditor::setup_frame_rate_widget () +{ + if (Config::instance()->allow_any_dcp_frame_rate ()) { + _frame_rate_choice->Hide (); + _frame_rate_spin->Show (); + } else { + _frame_rate_choice->Show (); + _frame_rate_spin->Hide (); + } + + _frame_rate_sizer->Layout (); } diff --git a/src/wx/film_editor.h b/src/wx/film_editor.h index a1336ec90..56e54734b 100644 --- a/src/wx/film_editor.h +++ b/src/wx/film_editor.h @@ -87,7 +87,8 @@ private: void dcp_content_type_changed (); void scaler_changed (); void j2k_bandwidth_changed (); - void frame_rate_changed (); + void frame_rate_choice_changed (); + void frame_rate_spin_changed (); void best_frame_rate_clicked (); void content_timeline_clicked (); void audio_channels_changed (); @@ -108,6 +109,7 @@ private: void setup_content (); void setup_container (); void setup_content_sensitivity (); + void setup_frame_rate_widget (); void active_jobs_changed (bool); void config_changed (); @@ -143,7 +145,9 @@ private: wxChoice* _scaler; wxSpinCtrl* _j2k_bandwidth; wxChoice* _dcp_content_type; - wxChoice* _frame_rate; + wxChoice* _frame_rate_choice; + wxSpinCtrl* _frame_rate_spin; + wxSizer* _frame_rate_sizer; wxSpinCtrl* _audio_channels; wxButton* _best_frame_rate; wxCheckBox* _three_d; |
