<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div dir="ltr" id="yui_3_16_0_1_1427448243038_2473"><span>Hi,</span></div><div id="yui_3_16_0_1_1427448243038_2574" dir="ltr"><br><span></span></div><div id="yui_3_16_0_1_1427448243038_2576" dir="ltr"><span id="yui_3_16_0_1_1427448243038_2575">I can't answer you about your freezing problem (sorry). But I can tell you how to combine gst-launch with callbacks:</span></div><div id="yui_3_16_0_1_1427448243038_2577" dir="ltr"><br><span></span></div><div id="yui_3_16_0_1_1427448243038_2583" dir="ltr"></div><pre id="yui_3_16_0_1_1427448243038_2579" style="" class="">        <span style="" class="">self</span><span style="" class="">.</span><span style="" class="">_pipeline</span> <span style="" class="">=</span> <span style="" class="">gst</span><span style="" class="">.</span><span id="yui_3_16_0_1_1427448243038_2578" style="" class="">parse_launch</span><span style="" class="">(</span><span style="" class="">'''</span>
<a href="" style="" class="" name="cl-44"></a><span id="yui_3_16_0_1_1427448243038_2584" style="" class="">                                    appsrc name=appsrc !</span>
<a href="" style="" class="" name="cl-45"></a><span id="yui_3_16_0_1_1427448243038_2580" style="" class="">                                    audio/x-raw-float, rate=</span><span style="" class="">%i</span><span style="" class="">, width=64, depth=64, channels=</span><span style="" class="">%i</span><span id="yui_3_16_0_1_1427448243038_2581" style="" class="">, signed=true, endianness=BYTE_ORDER ! </span>
<a href="" style="" class="" name="cl-46"></a><span id="yui_3_16_0_1_1427448243038_2582" style="" class="">                                    audioconvert !</span>
<a href="" style="" class="" name="cl-47"></a><span style="" class="">                                    autoaudiosink name =as</span>
<a href="" style="" class="" name="cl-48"></a><span style="" class="">                                    '''</span> <span style="" class="">%</span> <span style="" class="">(</span><span style="" class="">self</span><span style="" class="">.</span><span style="" class="">sr</span><span style="" class="">,</span> <span style="" class="">self</span><span style="" class="">.</span><span style="" class="">data</span><span style="" class="">.</span><span style="" class="">shape</span><span style="" class="">[</span><span style="" class="">1</span><span style="" class="">]))</span>
<a href="" style="" class="" name="cl-49"></a>        <span style="" class="">appsrc</span> <span style="" class="">=</span> <span style="" class="">self</span><span style="" class="">.</span><span style="" class="">_pipeline</span><span style="" class="">.</span><span style="" class="">get_by_name</span><span style="" class="">(</span><span style="" class="">'appsrc'</span><span style="" class="">)</span>
<a href="" style="" class="" name="cl-50"></a>        <span style="" class="">appsrc</span><span style="" class="">.</span><span style="" class="">connect</span><span style="" class="">(</span><span style="" class="">'need-data'</span><span style="" class="">,</span> <span style="" class="">self</span><span style="" class="">.</span><span style="" class="">_send_buf</span><span style="" class="">)<br><br><br></span></pre><br> <blockquote id="yui_3_16_0_1_1427448243038_2425" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;">  <div id="yui_3_16_0_1_1427448243038_2424" style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div id="yui_3_16_0_1_1427448243038_2423" style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div id="yui_3_16_0_1_1427448243038_2586" dir="ltr"> <hr size="1">  <font id="yui_3_16_0_1_1427448243038_2585" size="2" face="Arial"> <b><span style="font-weight:bold;">De :</span></b> Hjalmar Turesson <hturesson@gmail.com><br> <b><span style="font-weight: bold;">À :</span></b> Discussion of the development of and with GStreamer <gstreamer-devel@lists.freedesktop.org> <br> <b><span style="font-weight: bold;">Envoyé le :</span></b> Jeudi 26 mars 2015 20h29<br> <b><span style="font-weight: bold;">Objet :</span></b> Appsink stops (pauses/freezes) after 2 frames.<br> </font> </div> <div id="yui_3_16_0_1_1427448243038_2422" class="y_msg_container"><br><div id="yiv1818041738"><div id="yui_3_16_0_1_1427448243038_2421" dir="ltr"><div id="yui_3_16_0_1_1427448243038_2420"><div id="yui_3_16_0_1_1427448243038_2419"><div id="yui_3_16_0_1_1427448243038_2418"><div id="yui_3_16_0_1_1427448243038_2587">Hi,<br><br></div>I'm trying to write the buffer timestamps (buf.pts) of a webcam steam to a text file. I use appsink and a little callable function. This works fine when I stream h.264 (apart from non-monotonical timestamps). But, it fails if I stream raw or mpeg. I see no errors or warnings, but the stream freezes/pauses after two frames (i.e. 2 timestamps written to file). When streaming h.264 h264parse is necessary otherwise it too freezes after 2 frames. I tried using videoparse, but this crashes python, and jpegparse does not make any difference. <br><br></div>Does anyone have advice?<br><br></div>Scripts (unfortunately not gst-launch since I do not know how to combine that with the callback)<br>- - - - - - - - - - - - - - - - - -<br><br></div>Streaming h.264 (WORKS):<br><br>

<div id="yui_3_16_0_1_1427448243038_2464" style="margin:0px;text-indent:0px;"><span style="font-family:monospace, monospace;">class Webcam_ts_h264:</span></div><span style="font-family:monospace, monospace;">
</span><div id="yui_3_16_0_1_1427448243038_2462" style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def __init__(self, video_dev='/dev/video0', fps=15):</span></div><div style="margin-left:40px;"><span style="font-family:monospace, monospace;">
</span></div><div id="yui_3_16_0_1_1427448243038_2463" style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        """</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        """</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        ts_log_fname = 'ts_test.log'</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;">                 </div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log = open(ts_log_fname, 'w')</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log.write('n_buf, buf.pts\n')</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.n_frames = 0</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline = Gst.Pipeline()</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;">        </div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        def on_new_sample(appsink):</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            """</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            Function called from the pipeline by appsink.</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            Writes the timestampes of frame capture to a log file.</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            """</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            # Get the buffer</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            smp = appsink.emit('pull-sample')</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            buf = smp.get_buffer()</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            self.n_frames += 1</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            self.ts_log.write('%d,%0.9f\n' % </span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">                              (self.n_frames, np.float64(1e-9) * buf.pts))</span></div><div style="margin-left:120px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            return Gst.FlowReturn.OK</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Video source:</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src = Gst.ElementFactory.make('v4l2src', None)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.set_property('device', video_dev)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.set_property('do-timestamp', 'true')</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Formats available from C920 camera: </span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #   'image/jpeg', 'video/x-h264', 'video/x-raw'</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        vid_caps = Gst.Caps.from_string('video/x-h264,'</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">                                        'width=%d,height=%d,'</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">                                        'framerate=%d/1' % (640, 480, fps))</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter = Gst.ElementFactory.make('capsfilter', None)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter.set_property('caps', vid_caps)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_parse = Gst.ElementFactory.make('h264parse', None)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink = Gst.ElementFactory.make('appsink', None)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Setting properties of appsink</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Tell sink to emit signals</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.set_property('emit-signals', True)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.set_property('sync', False)  # No sync</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Connect appsink to my function (writing timestamps)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.connect('new-sample', on_new_sample)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Add elements to the pipeline</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.v4l2src)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.vid_filter)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.vid_parse)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.ts_sink)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # link</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.link(self.vid_filter)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter.link(self.vid_parse)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_parse.link(self.ts_sink)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;">                      </div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def run(self):</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.set_state(Gst.State.PLAYING)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def quit(self):</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.set_state(Gst.State.NULL)</span></div><div style="margin-left:80px;"><span style="font-family:monospace, monospace;">
</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log.close()</span></div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><br><span style="font-family:monospace, monospace;"></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;text-indent:0px;"><span style="font-family:arial, helvetica, sans-serif;">Streaming raw (FAILS):</span><span style="font-family:monospace, monospace;"></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;text-indent:0px;"><br>

</div><div style="margin:0px;text-indent:0px;"><span style="font-family:monospace, monospace;">class Webcam_ts_raw:</span></div><span style="font-family:monospace, monospace;">
</span><div style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def __init__(self, video_dev='/dev/video0', fps=15):</span></div><div style="margin-left:40px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        """</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        """</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        ts_log_fname = 'ts_test.log'</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;">                 </div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log = open(ts_log_fname, 'w')</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log.write('n_buf, buf.pts\n')</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.n_frames = 0</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline = Gst.Pipeline()</span></div><div style="margin-left:80px;">
</div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;">        </div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        def on_new_sample(appsink):</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            """</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            Function called from the pipeline by appsink.</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            Writes the timestampes of frame capture to a log file.</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            """</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            # Get the buffer</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            smp = appsink.emit('pull-sample')</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            buf = smp.get_buffer()</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            self.n_frames += 1</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            self.ts_log.write('%d,%0.9f\n' % </span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">                              (self.n_frames, np.float64(1e-9) * buf.pts))</span></div><div style="margin-left:120px;">
</div><div style="margin:0px 0px 0px 120px;text-indent:0px;"><span style="font-family:monospace, monospace;">            return Gst.FlowReturn.OK</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Video source:</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src = Gst.ElementFactory.make('v4l2src', None)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.set_property('device', video_dev)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.set_property('do-timestamp', 'true')</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Formats available from C920 camera: </span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #   'image/jpeg', 'video/x-h264', 'video/x-raw'</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        vid_caps = Gst.Caps.from_string('video/x-raw,'</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">                                        'width=%d,height=%d,'</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">                                        'framerate=%d/1' % (640, 480, fps))</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter = Gst.ElementFactory.make('capsfilter', None)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter.set_property('caps', vid_caps)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #self.vid_parse = Gst.ElementFactory.make('jpegparse', None)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink = Gst.ElementFactory.make('appsink', None)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Setting properties of appsink</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Tell sink to emit signals</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.set_property('emit-signals', True)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.set_property('sync', False)  # No sync</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Connect appsink to my function (writing timestamps)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_sink.connect('new-sample', on_new_sample)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # Add elements to the pipeline</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.v4l2src)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.vid_filter)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #self.pipeline.add(self.vid_parse)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.add(self.ts_sink)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        # link</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.v4l2src.link(self.vid_filter)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.vid_filter.link(self.ts_sink)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #self.vid_filter.link(self.vid_parse)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        #self.vid_parse.link(self.ts_sink)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;">                      </div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def run(self):</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.set_state(Gst.State.PLAYING)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;"><br></span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 40px;text-indent:0px;"><span style="font-family:monospace, monospace;">    def quit(self):</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.pipeline.set_state(Gst.State.NULL)</span></div><div style="margin-left:80px;">
</div><div style="margin:0px 0px 0px 80px;text-indent:0px;"><span style="font-family:monospace, monospace;">        self.ts_log.close()      </span></div><br><div><div><div><div>Best regards,<br></div><div>Hjalmar<br></div></div></div></div></div></div><br>_______________________________________________<br>gstreamer-devel mailing list<br><a ymailto="mailto:gstreamer-devel@lists.freedesktop.org" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br><a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br><br><br></div> </div> </div> </blockquote>  </div></body></html>