Created
January 22, 2012 20:44
-
-
Save dtolj/1658711 to your computer and use it in GitHub Desktop.
Gstreamer sample mosaic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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