All pastes #2127608 Raw Edit

Mine

public text v1 · immutable
#2127608 ·published 2012-03-13 09:33 UTC
rendered paste body
import sys, os, time, thread
import glib, gobject
import pygst
pygst.require("0.10")
import gst

class CLI_Main:
	
	def __init__(self):

		self.player= gst.Pipeline("player")
		self.filesrc = gst.element_factory_make("filesrc","filesource")
		self.decoder = gst.element_factory_make("decodebin2", "decoder")
		self.decoder.connect("new-decoded-pad",self.decoder_callback)
		self.jpegenc = gst.element_factory_make("jpegenc", "jpegenc")
		self.jpegenc.connect("frame-encoded",self.encoder_callback)
		self.filesink = gst.element_factory_make("multifilesink", "filesink")
		self.filesink.set_property("location","frame%d.jpg")
		self.filesink.set_property("index",0)
		self.filesink.set_property("next-file",2)
		self.frame_count=0

		self.player.add(self.filesrc, self.decoder,self.jpegenc,self.filesink)
		gst.element_link_many(self.filesrc, self.decoder)
		gst.element_link_many(self.jpegenc,self.filesink)
		bus = self.player.get_bus()
		bus.add_signal_watch()
		bus.connect("message", self.on_message)

	def on_message(self, bus, message):
		t = message.type
		print t

		if t == gst.MESSAGE_EOS:
			self.player.set_state(gst.STATE_NULL)
			self.playmode = False
		elif t == gst.MESSAGE_ERROR:
			self.player.set_state(gst.STATE_NULL)
			err, debug = message.parse_error()
			print "Error: %s" % err, debug
			self.playmode = False

	def start(self):
		for filepath in sys.argv[1:]:
			if os.path.isfile(filepath):
				print filepath
				self.filesrc.set_property("location",filepath)
				self.playmode=True
				self.player.set_state(gst.STATE_PLAYING)

				while self.playmode:
					time.sleep(1)
		
		time.sleep(1)
		loop.quit()

	def decoder_callback(self,decoder,pad,data):
		print "Callback!"

		name= pad.get_caps()[0].get_name()
		
		print "Got pad!: %s" % name
		
		if name.startswith("video"):
			jpad= self.jpegenc.get_pad("sink")
			pad.link(jpad)
	
	def encoder_callback(self,decoder):
		self.frame_count+=1
		print "Frame encoded %s" % self.frame_count
	 
			

mainclass = CLI_Main()
thread.start_new_thread(mainclass.start, ())
gobject.threads_init()
loop = glib.MainLoop()
loop.run()