diff options
author | Daniel Drake <dsd@laptop.org> | 2010-04-29 00:18:25 (GMT) |
---|---|---|
committer | Daniel Drake <dan@reactivated.net> | 2010-04-29 14:52:00 (GMT) |
commit | cf7fb15d94b335402e4ddd4cfad2e9e80c517ddd (patch) | |
tree | 4a055386bff67875a86fcd7224007243856d003b /glive.py | |
parent | e41dbf9b0a4df7fcdb1b7e7996ad185b648158bc (diff) |
Place framerate limit directly on v4l2src
But we also maintain the gstreamer-level videorate framerate filter.
This is because the XO-1.5 camera delivers a lot more frames than you
ask for, and this throws off gstreamer's timings.
http://dev.laptop.org/ticket/10137
Diffstat (limited to 'glive.py')
-rw-r--r-- | glive.py | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -181,7 +181,14 @@ class Glive: except: pass - rate = gst.element_factory_make("videorate", "vbrate") + # important to place the framerate limit directly on the v4l2src + # so that it gets communicated all the way down to the camera level + srccaps = gst.Caps('video/x-raw-yuv,framerate='+str(self.VIDEO_FRAMERATE_SMALL)+'/1') + + # the XO-1.5 camera framerate limit increases image quality but + # still delivers way too many frames. add a gstreamer-level filter + # to keep the frame rate sensible. + rate = gst.element_factory_make("videorate") ratecaps = gst.Caps('video/x-raw-yuv,framerate='+str(self.VIDEO_FRAMERATE_SMALL)+'/1') tee = gst.element_factory_make("tee", "tee") @@ -192,9 +199,9 @@ class Glive: queue.set_property("max-size-buffers", 2) self.pipeline.add(src, rate, tee, queue) - src.link(rate) + src.link(rate, srccaps) rate.link(tee, ratecaps) - gst.element_link_many(tee, queue) + tee.link(queue) xvsink = gst.element_factory_make("xvimagesink", "xvsink") xv_available = xvsink.set_state(gst.STATE_PAUSED) != gst.STATE_CHANGE_FAILURE |