From: Carl Hetherington Date: Tue, 3 Nov 2020 23:17:53 +0000 (+0100) Subject: Move video frame rate override into advanced prefs (#1852). X-Git-Tag: v2.15.107~5 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=4b91800c7de893ec1bbc5a00ab245fd6c01b8b25;p=dcpomatic.git Move video frame rate override into advanced prefs (#1852). --- diff --git a/src/wx/content_advanced_dialog.cc b/src/wx/content_advanced_dialog.cc index 8ab2e8dc0..9f2a45106 100644 --- a/src/wx/content_advanced_dialog.cc +++ b/src/wx/content_advanced_dialog.cc @@ -25,8 +25,10 @@ #include "static_text.h" #include "wx_util.h" #include "lib/content.h" +#include "lib/dcp_content.h" #include "lib/filter.h" #include "lib/ffmpeg_content.h" +#include "lib/image_content.h" #include "lib/video_content.h" #include #include @@ -36,10 +38,12 @@ using std::string; using std::vector; using boost::bind; using boost::dynamic_pointer_cast; +using boost::optional; using boost::shared_ptr; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif +using dcp::locale_convert; @@ -64,11 +68,24 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrAdd (_filters, 1, wxALL | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_GAP); filters->Add (_filters_button, 0, wxALL, DCPOMATIC_SIZER_GAP); - sizer->Add (filters, wxGBPosition(r, 1)); + sizer->Add (filters, wxGBPosition(r, 1), wxGBSpan(1, 2)); + ++r; + + wxStaticText* video_frame_rate_label; + if (_content->video) { + video_frame_rate_label = add_label_to_sizer (sizer, this, _("Override detected video frame rate"), true, wxGBPosition(r, 0)); + } else { + video_frame_rate_label = add_label_to_sizer (sizer, this, _("Video frame rate that content was prepared for"), true, wxGBPosition(r, 0)); + } + _video_frame_rate = new wxTextCtrl (this, wxID_ANY); + sizer->Add (_video_frame_rate, wxGBPosition(r, 1)); + _set_video_frame_rate = new Button (this, _("Set")); + _set_video_frame_rate->Enable (false); + sizer->Add (_set_video_frame_rate, wxGBPosition(r, 2)); ++r; wxCheckBox* ignore_video = new wxCheckBox (this, wxID_ANY, _("Ignore this content's video and use only audio, subtitles and closed captions")); - sizer->Add (ignore_video, wxGBPosition(r, 0), wxGBSpan(1, 2)); + sizer->Add (ignore_video, wxGBPosition(r, 0), wxGBSpan(1, 3)); ++r; wxSizer* overall = new wxBoxSizer (wxVERTICAL); @@ -84,8 +101,19 @@ ContentAdvancedDialog::ContentAdvancedDialog (wxWindow* parent, shared_ptrSetValue (_content->video ? !content->video->use() : false); setup_filters (); + bool const single_frame_image_content = dynamic_pointer_cast(_content) && _content->number_of_paths() == 1; + video_frame_rate_label->Enable (!single_frame_image_content); + _video_frame_rate->Enable (!single_frame_image_content); + + optional vfr = _content->video_frame_rate (); + if (vfr) { + _video_frame_rate->SetValue (std_to_wx(locale_convert(*vfr))); + } + ignore_video->Bind (wxEVT_CHECKBOX, bind(&ContentAdvancedDialog::ignore_video_changed, this, _1)); _filters_button->Bind (wxEVT_BUTTON, bind(&ContentAdvancedDialog::edit_filters, this)); + _set_video_frame_rate->Bind (wxEVT_BUTTON, bind(&ContentAdvancedDialog::set_video_frame_rate, this)); + _video_frame_rate->Bind (wxEVT_TEXT, boost::bind(&ContentAdvancedDialog::video_frame_rate_changed, this)); } @@ -148,3 +176,31 @@ ContentAdvancedDialog::filters_changed (vector filters) setup_filters (); } + +void +ContentAdvancedDialog::set_video_frame_rate () +{ + if (_video_frame_rate->GetValue() != wxT("")) { + _content->set_video_frame_rate (locale_convert(wx_to_std(_video_frame_rate->GetValue()))); + } else { + _content->unset_video_frame_rate (); + } + + _set_video_frame_rate->Enable (false); +} + + +void +ContentAdvancedDialog::video_frame_rate_changed () +{ + bool enable = true; + /* If the user clicks "set" now, with no frame rate entered, it would unset the video + frame rate in the selected content. This can't be allowed for some content types. + */ + if (_video_frame_rate->GetValue() == wxT("") && (dynamic_pointer_cast(_content) || dynamic_pointer_cast(_content))) { + enable = false; + } + + _set_video_frame_rate->Enable (enable); +} + diff --git a/src/wx/content_advanced_dialog.h b/src/wx/content_advanced_dialog.h index b8c12d7b2..b01669bac 100644 --- a/src/wx/content_advanced_dialog.h +++ b/src/wx/content_advanced_dialog.h @@ -41,10 +41,14 @@ private: void edit_filters (); void filters_changed (std::vector filters); void setup_filters (); + void set_video_frame_rate (); + void video_frame_rate_changed (); boost::shared_ptr _content; wxStaticText* _filters; wxButton* _filters_button; + wxTextCtrl* _video_frame_rate; + wxButton* _set_video_frame_rate; }; diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc index 9bf4cacf7..c643d2080 100644 --- a/src/wx/timing_panel.cc +++ b/src/wx/timing_panel.cc @@ -109,36 +109,6 @@ TimingPanel::TimingPanel (ContentPanel* p, weak_ptr viewer) _play_length_label = create_label (this, _("Play length"), true); _play_length = new Timecode (this); - _video_frame_rate_label = create_label (this, _("Video frame rate"), true); - _video_frame_rate = new wxTextCtrl (this, wxID_ANY); - _set_video_frame_rate = new Button (this, _("Set")); - _set_video_frame_rate->Enable (false); - - /* We can't use Wrap() here as it doesn't work with markup: - * http://trac.wxwidgets.org/ticket/13389 - */ - - wxString in = _("Only change this if the content's frame rate has been read incorrectly."); - wxString out; - int const width = 20; - int current = 0; - for (size_t i = 0; i < in.Length(); ++i) { - if (in[i] == ' ' && current >= width) { - out += '\n'; - current = 0; - } else { - out += in[i]; - ++current; - } - } - - _tip = new StaticText (this, wxT ("")); - _tip->SetLabelMarkup (out); -#ifdef DCPOMATIC_OSX - /* Hack to stop hidden text on some versions of OS X */ - _tip->SetMinSize (wxSize (-1, 256)); -#endif - _position->Changed.connect (boost::bind (&TimingPanel::position_changed, this)); _move_to_start_of_reel->Bind (wxEVT_BUTTON, boost::bind (&TimingPanel::move_to_start_of_reel_clicked, this)); _full_length->Changed.connect (boost::bind (&TimingPanel::full_length_changed, this)); @@ -147,8 +117,6 @@ TimingPanel::TimingPanel (ContentPanel* p, weak_ptr viewer) _trim_end->Changed.connect (boost::bind (&TimingPanel::trim_end_changed, this)); _trim_end_to_playhead->Bind (wxEVT_BUTTON, boost::bind (&TimingPanel::trim_end_to_playhead_clicked, this)); _play_length->Changed.connect (boost::bind (&TimingPanel::play_length_changed, this)); - _video_frame_rate->Bind (wxEVT_TEXT, boost::bind (&TimingPanel::video_frame_rate_changed, this)); - _set_video_frame_rate->Bind (wxEVT_BUTTON, boost::bind (&TimingPanel::set_video_frame_rate, this)); shared_ptr fv = _viewer.lock (); DCPOMATIC_ASSERT (fv); @@ -185,10 +153,6 @@ TimingPanel::add_to_grid () _full_length->Show (full); _play_length_label->Show (full); _play_length->Show (full); - _video_frame_rate_label->Show (full); - _video_frame_rate->Show (full); - _set_video_frame_rate->Show (full); - _tip->Show (full); if (full) { _grid->Add (_move_to_start_of_reel, wxGBPosition(r, 1)); @@ -217,17 +181,6 @@ TimingPanel::add_to_grid () add_label_to_sizer (_grid, _play_length_label, true, wxGBPosition(r, 0)); _grid->Add (_play_length, wxGBPosition(r, 1)); ++r; - - { - add_label_to_sizer (_grid, _video_frame_rate_label, true, wxGBPosition(r, 0)); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - s->Add (_video_frame_rate, 1, wxEXPAND); - s->Add (_set_video_frame_rate, 0, wxLEFT | wxRIGHT, 8); - _grid->Add (s, wxGBPosition(r, 1), wxGBSpan(1, 2)); - } - ++r; - - _grid->Add (_tip, wxGBPosition(r, 1), wxGBSpan(1, 2)); } /* Completely speculative fix for #891 */ @@ -356,16 +309,6 @@ TimingPanel::film_content_changed (int property) } } - - bool const single_frame_image_content = content && dynamic_pointer_cast (content) && content->number_of_paths() == 1; - - if ((check_vc.size() == 1 || count_ac == 1 || count_sc == 1) && !single_frame_image_content) { - checked_set (_video_frame_rate, locale_convert (content->video_frame_rate().get(), 5)); - _video_frame_rate->Enable (true); - } else { - checked_set (_video_frame_rate, wxT ("")); - _video_frame_rate->Enable (false); - } } bool have_still = false; @@ -378,7 +321,6 @@ TimingPanel::film_content_changed (int property) _full_length->set_editable (have_still); _play_length->set_editable (!have_still); - _set_video_frame_rate->Enable (false); setup_sensitivity (); } @@ -480,45 +422,6 @@ TimingPanel::play_length_changed () } } -void -TimingPanel::video_frame_rate_changed () -{ - bool enable = true; - if (_video_frame_rate->GetValue() == wxT("")) { - /* No frame rate has been entered; if the user clicks "set" now it would unset the video - frame rate in the selected content. This can't be allowed for some content types. - */ - BOOST_FOREACH (shared_ptr i, _parent->selected()) { - if ( - dynamic_pointer_cast(i) || - dynamic_pointer_cast(i) - ) { - enable = false; - } - } - } - - _set_video_frame_rate->Enable (enable); -} - -void -TimingPanel::set_video_frame_rate () -{ - optional fr; - if (_video_frame_rate->GetValue() != wxT("")) { - fr = locale_convert (wx_to_std (_video_frame_rate->GetValue ())); - } - Suspender::Block bl = _film_content_changed_suspender.block (); - BOOST_FOREACH (shared_ptr i, _parent->selected ()) { - if (fr) { - i->set_video_frame_rate (*fr); - } else { - i->unset_video_frame_rate (); - } - } - - _set_video_frame_rate->Enable (false); -} void TimingPanel::content_selection_changed () @@ -599,7 +502,6 @@ TimingPanel::setup_sensitivity () _trim_start->Enable (e); _trim_end->Enable (e); _play_length->Enable (e); - _video_frame_rate->Enable (e); shared_ptr fv = _viewer.lock (); DCPOMATIC_ASSERT (fv); diff --git a/src/wx/timing_panel.h b/src/wx/timing_panel.h index e0be2d74b..d413361d4 100644 --- a/src/wx/timing_panel.h +++ b/src/wx/timing_panel.h @@ -42,8 +42,6 @@ private: void trim_end_changed (); void trim_end_to_playhead_clicked (); void play_length_changed (); - void video_frame_rate_changed (); - void set_video_frame_rate (); void update_full_length (); void update_play_length (); void setup_sensitivity (); @@ -56,7 +54,6 @@ private: wxStaticText* _s_label; wxStaticText* _f_label; wxStaticText* _colon[3]; - wxStaticText* _tip; wxStaticText* _position_label; Timecode* _position; wxButton* _move_to_start_of_reel; @@ -70,9 +67,6 @@ private: Timecode* _trim_end; wxStaticText* _play_length_label; Timecode* _play_length; - wxStaticText* _video_frame_rate_label; - wxTextCtrl* _video_frame_rate; - wxButton* _set_video_frame_rate; Suspender _film_content_changed_suspender; };