diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-04 00:17:53 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-04 00:17:53 +0100 |
| commit | 4b91800c7de893ec1bbc5a00ab245fd6c01b8b25 (patch) | |
| tree | 73e9b21610e33a84d31329f60635d327304c4cef /src/wx/content_advanced_dialog.cc | |
| parent | cfba7e0f9f20e68397e41d8f979e7723425ec51b (diff) | |
Move video frame rate override into advanced prefs (#1852).
Diffstat (limited to 'src/wx/content_advanced_dialog.cc')
| -rw-r--r-- | src/wx/content_advanced_dialog.cc | 60 |
1 files changed, 58 insertions, 2 deletions
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 <wx/gbsizer.h> #include <boost/bind.hpp> @@ -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_ptr<Conte wxBoxSizer* filters = new wxBoxSizer (wxHORIZONTAL); filters->Add (_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_ptr<Conte ignore_video->SetValue (_content->video ? !content->video->use() : false); setup_filters (); + bool const single_frame_image_content = dynamic_pointer_cast<const ImageContent>(_content) && _content->number_of_paths() == 1; + video_frame_rate_label->Enable (!single_frame_image_content); + _video_frame_rate->Enable (!single_frame_image_content); + + optional<double> vfr = _content->video_frame_rate (); + if (vfr) { + _video_frame_rate->SetValue (std_to_wx(locale_convert<string>(*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<Filter const *> filters) setup_filters (); } + +void +ContentAdvancedDialog::set_video_frame_rate () +{ + if (_video_frame_rate->GetValue() != wxT("")) { + _content->set_video_frame_rate (locale_convert<double>(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<DCPContent>(_content) || dynamic_pointer_cast<FFmpegContent>(_content))) { + enable = false; + } + + _set_video_frame_rate->Enable (enable); +} + |
