import gobject gobject.threads_init() import pygst pygst.require('0.10') import gst import sys import time last_time = None # time of last inputted buffer diff_sum = 0 # sum of time diff nbbuffers = 0 # outputted buffers ml = 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 True def 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 True def 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 " % 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:", nbbuffers print "Average time : %0.10f seconds" % (diff_sum / nbbuffers)