"allowed" set.
Requested-by: Noah Orozco
2014-05-12 Carl Hetherington <cth@carlh.net>
2014-05-12 Carl Hetherington <cth@carlh.net>
+ * Add option to use any DCP frame rate, rather than just
+ the "allowed" set.
+
* Version 1.69.4 released.
2014-05-12 Carl Hetherington <cth@carlh.net>
* Version 1.69.4 released.
2014-05-12 Carl Hetherington <cth@carlh.net>
, _use_any_servers (true)
, _tms_path (".")
, _sound_processor (SoundProcessor::from_id (N_("dolby_cp750")))
, _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"))
, _default_still_length (10)
, _default_container (Ratio::from_id ("185"))
, _default_dcp_content_type (DCPContentType::from_dci_name ("TST"))
_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);
_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");
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("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 ());
}
doc.write_to_file_formatted (file(false).string ());
}
std::list<int> allowed_dcp_frame_rates () const {
return _allowed_dcp_frame_rates;
}
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;
DCIMetadata default_dci_metadata () const {
return _default_dci_metadata;
+ 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 ();
void set_default_dci_metadata (DCIMetadata d) {
_default_dci_metadata = d;
changed ();
/** Our sound processor */
SoundProcessor const * _sound_processor;
std::list<int> _allowed_dcp_frame_rates;
/** 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;
/** Default DCI metadata for newly-created Films */
DCIMetadata _default_dci_metadata;
boost::optional<std::string> _language;
add_label_to_sizer (table, panel, _("Maximum JPEG2000 bandwidth"), true);
_maximum_j2k_bandwidth = new wxSpinCtrl (panel);
table->Add (_maximum_j2k_bandwidth, 1);
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);
add_label_to_sizer (table, panel, _("Outgoing mail server"), true);
_mail_server = new wxTextCtrl (panel, wxID_ANY);
_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));
_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));
{
Config::instance()->set_maximum_j2k_bandwidth (_maximum_j2k_bandwidth->GetValue() * 1000000);
}
{
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* _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;
wxTextCtrl* _mail_server;
wxTextCtrl* _mail_user;
wxTextCtrl* _mail_password;
{
add_label_to_grid_bag_sizer (grid, _dcp_panel, _("Frame Rate"), true, wxGBPosition (r, 0));
{
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"));
_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));
list<int> const dfr = Config::instance()->allowed_dcp_frame_rates ();
for (list<int>::const_iterator i = dfr.begin(); i != dfr.end(); ++i) {
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);
}
_audio_channels->SetRange (0, MAX_DCP_AUDIO_CHANNELS);
_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));
_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));
_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));
_film->set_encrypted (_encrypted->GetValue ());
}
_film->set_encrypted (_encrypted->GetValue ());
}
-/** Called when the name widget has been changed */
+/** Called when the frame rate choice widget has been changed */
-FilmEditor::frame_rate_changed ()
+FilmEditor::frame_rate_choice_changed ()
_film->set_video_frame_rate (
boost::lexical_cast<int> (
_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 ()
{
void
FilmEditor::audio_channels_changed ()
{
case Film::VIDEO_FRAME_RATE:
{
bool done = false;
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) {
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;
}
_best_frame_rate->Enable (_film->best_video_frame_rate () != _film->video_frame_rate ());
break;
}
_signed->Enable (si);
_encrypted->Enable (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);
_audio_channels->Enable (s);
_j2k_bandwidth->Enable (s);
_container->Enable (s);
FilmEditor::config_changed ()
{
_j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000);
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 ();
void dcp_content_type_changed ();
void scaler_changed ();
void j2k_bandwidth_changed ();
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 ();
void best_frame_rate_clicked ();
void content_timeline_clicked ();
void audio_channels_changed ();
void setup_content ();
void setup_container ();
void setup_content_sensitivity ();
void setup_content ();
void setup_container ();
void setup_content_sensitivity ();
+ void setup_frame_rate_widget ();
void active_jobs_changed (bool);
void config_changed ();
void active_jobs_changed (bool);
void config_changed ();
wxChoice* _scaler;
wxSpinCtrl* _j2k_bandwidth;
wxChoice* _dcp_content_type;
wxChoice* _scaler;
wxSpinCtrl* _j2k_bandwidth;
wxChoice* _dcp_content_type;
+ wxChoice* _frame_rate_choice;
+ wxSpinCtrl* _frame_rate_spin;
+ wxSizer* _frame_rate_sizer;
wxSpinCtrl* _audio_channels;
wxButton* _best_frame_rate;
wxCheckBox* _three_d;
wxSpinCtrl* _audio_channels;
wxButton* _best_frame_rate;
wxCheckBox* _three_d;