diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-06-26 14:35:33 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-06-26 14:35:33 +0100 |
| commit | d1125d09c7741d05b57b1520531a0451663ad66c (patch) | |
| tree | 3a4dd044fdaf676d13c08e4b9fc207d3900b3251 /src | |
| parent | 02f028d271677b3b3669b5cdfda1597108a34b80 (diff) | |
Allow user to set video frame rate of video sources (to override the detected one).
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/video_content.cc | 15 | ||||
| -rw-r--r-- | src/lib/video_content.h | 1 | ||||
| -rw-r--r-- | src/wx/timing_panel.cc | 14 |
3 files changed, 24 insertions, 6 deletions
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index 6f6b2c441..676a694da 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -405,6 +405,21 @@ VideoContent::scale_and_crop_to_fit_height () set_right_crop (crop / 2); } +void +VideoContent::set_video_frame_rate (float r) +{ + { + boost::mutex::scoped_lock lm (_mutex); + if (_video_frame_rate == r) { + return; + } + + _video_frame_rate = r; + } + + signal_changed (VideoContentProperty::VIDEO_FRAME_RATE); +} + VideoContentScale::VideoContentScale (Ratio const * r) : _ratio (r) , _scale (true) diff --git a/src/lib/video_content.h b/src/lib/video_content.h index f23bf0abe..d0b907cb8 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -116,6 +116,7 @@ public: } void set_video_frame_type (VideoFrameType); + void set_video_frame_rate (float); void set_left_crop (int); void set_right_crop (int); diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc index 5d21d0a02..ef963bbfc 100644 --- a/src/wx/timing_panel.cc +++ b/src/wx/timing_panel.cc @@ -17,6 +17,7 @@ */ +#include <libdcp/raw_convert.h> #include "lib/content.h" #include "lib/image_content.h" #include "timing_panel.h" @@ -28,7 +29,7 @@ using std::cout; using std::string; using boost::shared_ptr; using boost::dynamic_pointer_cast; -using boost::lexical_cast; +using libdcp::raw_convert; TimingPanel::TimingPanel (FilmEditor* e) /* horrid hack for apparent lack of context support with wxWidgets i18n code */ @@ -124,7 +125,7 @@ TimingPanel::film_content_changed (int property) if (content) { shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (content); if (vc) { - _video_frame_rate->SetValue (std_to_wx (lexical_cast<string> (vc->video_frame_rate ()))); + _video_frame_rate->SetValue (std_to_wx (raw_convert<string> (vc->video_frame_rate (), 5))); } else { _video_frame_rate->SetValue ("24"); } @@ -133,10 +134,11 @@ TimingPanel::film_content_changed (int property) } } + shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (content); shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (content); _full_length->set_editable (ic && ic->still ()); _play_length->set_editable (!ic || !ic->still ()); - _video_frame_rate->Enable (ic && !ic->still ()); + _video_frame_rate->Enable (vc); _set_video_frame_rate->Enable (false); } @@ -200,9 +202,9 @@ TimingPanel::set_video_frame_rate () { ContentList c = _editor->selected_content (); if (c.size() == 1) { - shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (c.front ()); - if (ic) { - ic->set_video_frame_rate (lexical_cast<float> (wx_to_std (_video_frame_rate->GetValue ()))); + shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (c.front ()); + if (vc) { + vc->set_video_frame_rate (raw_convert<float> (wx_to_std (_video_frame_rate->GetValue ()))); } _set_video_frame_rate->Enable (false); } |
