aboutsummaryrefslogtreecommitdiff
path: root/voctocore/experiments/binlinktest.py
blob: 92d02ca5a5f598e6c1c9171e145414f5743c4c4e (plain)
  1. #!/usr/bin/python3
  2. import gi, time
  3. gi.require_version('Gst', '1.0')
  4. from gi.repository import GLib, Gst, GObject
  5. GObject.threads_init()
  6. Gst.init(None)
  7. class SrcBin(Gst.Bin):
  8. def __init__(self):
  9. super().__init__()
  10. self.src = Gst.ElementFactory.make('videotestsrc', 'src')
  11. self.add(self.src)
  12. self.add_pad(
  13. Gst.GhostPad.new('src', self.src.get_static_pad('src'))
  14. )
  15. class SinkBin(Gst.Bin):
  16. def __init__(self):
  17. super().__init__()
  18. self.sink = Gst.ElementFactory.make('autovideosink', 'sink')
  19. self.add(self.sink)
  20. self.add_pad(
  21. Gst.GhostPad.new('sink', self.sink.get_static_pad('sink'))
  22. )
  23. class MixBin(Gst.Bin):
  24. def __init__(self):
  25. super().__init__()
  26. self.mix = Gst.ElementFactory.make('videomixer', 'src')
  27. self.add(self.mix)
  28. self.add_pad(
  29. Gst.GhostPad.new('src', self.mix.get_static_pad('src'))
  30. )
  31. def add_src(self, src):
  32. sinkpad = self.mix.get_request_pad('sink_%u')
  33. sinkpad.set_property('alpha', 0.75)
  34. src = src.get_static_pad('src')
  35. print(src.link(sinkpad)) # Error => GST_PAD_LINK_WRONG_HIERARCHY
  36. class Example:
  37. def __init__(self):
  38. self.mainloop = GObject.MainLoop()
  39. self.pipeline = Gst.Pipeline()
  40. self.src = SrcBin()
  41. self.sink = SinkBin()
  42. self.mix = MixBin()
  43. # Add elements to pipeline
  44. self.pipeline.add(self.src)
  45. self.pipeline.add(self.sink)
  46. self.pipeline.add(self.mix)
  47. self.mix.add_src(self.src)
  48. self.mix.link(self.sink)
  49. def run(self):
  50. self.pipeline.set_state(Gst.State.PLAYING)
  51. self.mainloop.run()
  52. def kill(self):
  53. self.pipeline.set_state(Gst.State.NULL)
  54. self.mainloop.quit()
  55. example = Example()
  56. example.run()