Skip to content

Instantly share code, notes, and snippets.

@dtolj
Created January 22, 2012 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dtolj/1658711 to your computer and use it in GitHub Desktop.
Save dtolj/1658711 to your computer and use it in GitHub Desktop.
Gstreamer sample mosaic
#!/usr/bin/python
import pygst
pygst.require("0.10")
import gst
import pygtk
import gtk
'''
gst-launch -e videomixer name=mix \
sink_0::xpos=0 sink_0::ypos=0 sink_0::alpha=0 \
sink_1::xpos=100 sink_1::ypos=50 \
! xvimagesink \
videotestsrc \
! video/x-raw-yuv,width=600,height=200 \
! mix.sink_0 \
videotestsrc pattern=0 \
! video/x-raw-yuv,width=100,height=100 \
! mix.sink_1
'''
class Main:
def __init__(self):
self.pipeline = gst.Pipeline("mypipeline")
#self.videotestsrc = gst.element_factory_make("videotestsrc", "videoin")
source = gst.element_factory_make("videotestsrc", "video-source-bg")
source1 = gst.element_factory_make("videotestsrc", "video-source1")
source1.set_property("pattern",0)
source2 = gst.element_factory_make("videotestsrc", "video-source2")
source2.set_property("pattern",4)
sink = gst.element_factory_make("xvimagesink", "video-output")
caps_bg = gst.Caps("video/x-raw-yuv, width=600, height=200")
filter = gst.element_factory_make("capsfilter", "filter-bg")
filter.set_property("caps", caps_bg)
filter_src_pad=filter.get_pad("src")
caps1 = gst.Caps("video/x-raw-yuv, width=100, height=100")
filter1 = gst.element_factory_make("capsfilter", "filter1")
filter1.set_property("caps", caps1)
filter1_src_pad=filter1.get_pad("src")
caps2 = gst.Caps("video/x-raw-yuv, width=100, height=100")
filter2 = gst.element_factory_make("capsfilter", "filter2")
filter2.set_property("caps", caps2)
filter2_src_pad=filter2.get_pad("src")
mixer = gst.element_factory_make("videomixer", "mixer")
#mixer.set_property("background",3)
#self.bin = gst.Bin("my-bin")
pad0 = mixer.get_pad("sink_0")
#pad0 = gst.Element.get_pad("sink_0")
pad1 = mixer.get_pad("sink_1")
pad2 = mixer.get_pad("sink_2")
#sink_0
pad0.set_property("xpos",0)
pad0.set_property("ypos",0)
pad0.set_property("alpha",0)
#sink_1
pad1.set_property("xpos",0)
pad1.set_property("ypos",0)
#sink_2
pad2.set_property("xpos",200)
pad2.set_property("ypos",0)
#get src pad of stream1, attach it to sink_%d of videomixer
#we add all elements into the pipeline
self.pipeline.add(source,filter,mixer,sink)
self.pipeline.add(source1,filter1)
self.pipeline.add(source2,filter2)
#we link the elements together
gst.element_link_many(source,filter)
gst.element_link_many(source1,filter1)
gst.element_link_many(source2,filter2)
#link pad manually
filter_src_pad.link(pad0)
#filter.link_pads(filter_src_pad,mixer,pad0)
filter1_src_pad.link(pad1)
filter2_src_pad.link(pad2)
#mixer.link(sink)
gst.element_link_many(mixer,sink)
self.pipeline.set_state(gst.STATE_PLAYING)
start=Main()
gtk.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment