aboutsummaryrefslogtreecommitdiff
path: root/voctocore/lib/videomix.py
blob: d32dd904564bfd1d104ad7cdc6f9add7faf6250c (plain)
  1. #!/usr/bin/python3
  2. import time, logging
  3. from gi.repository import GLib, Gst
  4. from lib.config import Config
  5. class VideoMix(Gst.Bin):
  6. log = logging.getLogger('VideoMix')
  7. sinkpads = []
  8. def __init__(self):
  9. super().__init__()
  10. self.mixer = Gst.ElementFactory.make('videomixer', 'mixer')
  11. self.scale = Gst.ElementFactory.make('videoscale', 'scale')
  12. self.conv = Gst.ElementFactory.make('videoconvert', 'conv')
  13. self.add(self.mixer)
  14. self.add(self.scale)
  15. self.add(self.conv)
  16. caps = Gst.Caps.from_string(Config.get('mix', 'outputcaps'))
  17. self.mixer.link_filtered(self.scale, caps)
  18. self.scale.link(self.conv)
  19. self.add_pad(
  20. Gst.GhostPad.new('src', self.conv.get_static_pad('src'))
  21. )
  22. # I don't know how to create a on-request ghost-pad
  23. def add_source(self, src):
  24. self.log.info('adding source %s', src.get_name())
  25. sinkpad = self.mixer.get_request_pad('sink_%u')
  26. sinkpad.set_property('alpha', 1)
  27. self.sinkpads.append(sinkpad)
  28. #srcpad = src.get_compatible_pad(sinkpad, None)
  29. #srcpad.link(sinkpad)
  30. src.link(self.mixer) # linking ghost pads
  31. def set_active(self, target):
  32. self.log.info('setting source #%u active', target)
  33. for idx, sinkpad in enumerate(self.sinkpads):
  34. sinkpad.set_property('alpha', int(target == idx))