rendered paste bodyimport gobjectgobject.threads_init()import pygstpygst.require('0.10')import gstimport sysimport timelast_time = None # time of last inputted bufferdiff_sum = 0 # sum of time diffnbbuffers = 0 # outputted buffersml = gobject.MainLoop()def bus_cb(bus, message): if message.type in [gst.MESSAGE_ERROR, gst.MESSAGE_EOS]: ml.quit()def inprobe(pad, buffer): global last_time last_time = time.time() return Truedef outprobe(pad, buffer): now = time.time() global last_time, nbbuffers, diff_sum if last_time: diff_sum += now - last_time nbbuffers += 1 last_time = 0 return Truedef padadded(demuxer, pad, decoder): if pad.get_caps().to_string().startswith("video"): pad.link(decoder.get_pad("sink"))if len(sys.argv) < 4: print "Usage: %s <demuxername> <decodername> <filename>" % sys.argv[0] sys.exit()p = gst.Pipeline()src = gst.element_factory_make("filesrc")src.props.location = sys.argv[3]demuxer = gst.parse_launch(sys.argv[1])decoder = gst.parse_launch(sys.argv[2])sink = gst.element_factory_make("fakesink")p.add(src, demuxer, decoder, sink)src.link(demuxer)decoder.link(sink)demuxer.connect("pad-added", padadded, decoder)decoder.get_pad("src").add_data_probe(inprobe)decoder.get_pad("sink").add_data_probe(outprobe)bus = p.get_bus()bus.add_signal_watch()bus.connect("message", bus_cb)p.set_state(gst.STATE_PLAYING)print "running"ml.run()print "Number of buffers:", nbbuffersprint "Average time : %0.10f seconds" % (diff_sum / nbbuffers)