Allow user to set video frame rate of video sources (to override the detected one).
authorCarl Hetherington <cth@carlh.net>
Thu, 26 Jun 2014 13:35:33 +0000 (14:35 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 26 Jun 2014 13:35:33 +0000 (14:35 +0100)
ChangeLog
cscript
src/lib/video_content.cc
src/lib/video_content.h
src/wx/timing_panel.cc
wscript

index 6b004770ca8e28513717b18a34cd48329c9e3c1c..39acb863e6fa664d833c1709e4c3403fb7d686bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2014-06-26  Carl Hetherington  <cth@carlh.net>
 
+       * Allow override of detected video frame rates.
+
        * Optimisation of uncertain effect to encoder and server
        thread handling.
 
diff --git a/cscript b/cscript
index fd8d36d1ed726cde6caf61979bad2512d9078f48..9080a1e09e9416c2bf197b4ceab60796604cb429 100644 (file)
--- a/cscript
+++ b/cscript
@@ -157,7 +157,7 @@ def make_control(debian_version, bits, filename, debug):
 
 def dependencies(target):
     return (('ffmpeg-cdist', '67dc770'),
-            ('libdcp', 'v0.95.0'))
+            ('libdcp', '2224998'))
 
 def build(target, options):
     cmd = './waf configure --prefix=%s' % target.work_dir_cscript()
index 6f6b2c4415cdfe9ae6440b21853b82bc9baffed6..676a694da6412bc1ba4625d23e4d533e76e88d33 100644 (file)
@@ -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)
index f23bf0abe87980746b892def1244ff7241f38c0d..d0b907cb8bceb036ffbc02cf0a83190ce7cf4c1b 100644 (file)
@@ -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);
index 5d21d0a02bbe4b5ddadf4ee43ee992d06f08380b..ef963bbfcce89751a70b5f979e3d83dcccec0aa0 100644 (file)
@@ -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);
        }
diff --git a/wscript b/wscript
index 82a56e237689c3a29992b7fd02d6c512c3ca89f5..866b230c56c825d02a5392dc8675f1c894b007dc 100644 (file)
--- a/wscript
+++ b/wscript
@@ -56,7 +56,7 @@ def dynamic_openjpeg(conf):
     conf.check_cfg(package='libopenjpeg', args='--cflags --libs', max_version='1.5.2', mandatory=True)
 
 def static_dcp(conf, static_boost, static_xmlpp, static_xmlsec, static_ssh):
-    conf.check_cfg(package='libdcp', atleast_version='0.92', args='--cflags', uselib_store='DCP', mandatory=True)
+    conf.check_cfg(package='libdcp', atleast_version='0.95', args='--cflags', uselib_store='DCP', mandatory=True)
     conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
     conf.env.STLIB_DCP = ['dcp', 'asdcp-libdcp', 'kumu-libdcp']
     conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt']