summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-26 14:35:33 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-26 14:35:33 +0100
commitd1125d09c7741d05b57b1520531a0451663ad66c (patch)
tree3a4dd044fdaf676d13c08e4b9fc207d3900b3251 /src
parent02f028d271677b3b3669b5cdfda1597108a34b80 (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.cc15
-rw-r--r--src/lib/video_content.h1
-rw-r--r--src/wx/timing_panel.cc14
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);
}