[pitivi] Add video mixing support, needs some more loving though
- From: Edward Hervey <edwardrv src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pitivi] Add video mixing support, needs some more loving though
- Date: Thu, 19 Nov 2009 18:35:13 +0000 (UTC)
commit 38397c0c90019c884cfadfeb3e8b2e2c47a59e58
Author: Edward Hervey <bilboed bilboed com>
Date: Mon Jun 29 19:18:15 2009 +0200
Add video mixing support, needs some more loving though
pitivi/elements/mixer.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++
pitivi/timeline/track.py | 9 +++++-
2 files changed, 75 insertions(+), 1 deletions(-)
---
diff --git a/pitivi/elements/mixer.py b/pitivi/elements/mixer.py
index c8908a3..75c4da9 100644
--- a/pitivi/elements/mixer.py
+++ b/pitivi/elements/mixer.py
@@ -107,3 +107,70 @@ class SmartAdderBin(gst.Bin):
gobject.type_register(SmartAdderBin)
gst.element_register(SmartAdderBin, 'smart-adder-bin')
+
+class SmartVideomixerBin(gst.Bin):
+
+ __gstdetails__ = (
+ "Smart Videomixer",
+ "Generic/Video",
+ "Convenience wrapper around videomixer, accepts anything",
+ "Edward Hervey <bilboed bilboed com>"
+ )
+
+ __gsttemplates__ = (
+ gst.PadTemplate("src", gst.PAD_SRC, gst.PAD_ALWAYS,
+ gst.Caps("video/x-raw-yuv;video/x-raw-rgb")),
+ gst.PadTemplate("sink_%u", gst.PAD_SINK, gst.PAD_REQUEST,
+ gst.Caps("video/x-raw-yuv;video/x-raw-rgb"))
+
+ )
+
+ def __init__(self):
+ gst.Bin.__init__(self)
+ self.videomixer = gst.element_factory_make("videomixer", "real-videomixer")
+ # FIXME : USE THE PROJECT SETTINGS FOR THESE CAPS !
+ csp = gst.element_factory_make("ffmpegcolorspace")
+ self.add(self.videomixer, csp)
+ self.videomixer.link(csp)
+ srcpad = gst.GhostPad("src", csp.get_pad("src"))
+ srcpad.set_active(True)
+ self.add_pad(srcpad)
+ self.pad_count = 0
+ self.inputs = {} # key:pad_name, value:(sinkpad, ffmpegcolorspace, videomixerpad)
+
+ def do_request_new_pad(self, template, name=None):
+ self.debug("template:%r, name:%r" % (template, name))
+ if name == None:
+ name = "sink_%u" % self.pad_count
+ if name in self.inputs.keys():
+ return None
+
+ csp = gst.element_factory_make("ffmpegcolorspace", "csp-%d" % self.pad_count)
+
+ self.add(csp)
+ csp.sync_state_with_parent()
+ videomixerpad = self.videomixer.get_request_pad("sink_%d")
+ csp.get_pad("src").link(videomixerpad)
+
+ pad = gst.GhostPad(name, csp.get_pad("sink"))
+ pad.set_active(True)
+ self.add_pad(pad)
+ self.inputs[name] = (pad, csp, videomixerpad)
+ self.pad_count += 1
+ return pad
+
+ def do_release_pad(self, pad):
+ self.debug("pad:%r" % pad)
+ name = pad.get_name()
+ if name in self.inputs.keys():
+ sinkpad, csp, videomixerpad = self.inputs.pop(name)
+ self.remove_pad(sinkpad)
+ csp.get_pad("src").unlink(videomixerpad)
+ self.videomixer.release_request_pad(videomixerpad)
+ csp.set_state(gst.STATE_NULL)
+ self.remove(csp)
+ self.debug("done")
+
+
+gobject.type_register(SmartVideomixerBin)
+gst.element_register(SmartVideomixerBin, 'smart-videomixer-bin')
diff --git a/pitivi/timeline/track.py b/pitivi/timeline/track.py
index 4c338ae..aaf5a49 100644
--- a/pitivi/timeline/track.py
+++ b/pitivi/timeline/track.py
@@ -28,7 +28,7 @@ from pitivi.log.loggable import Loggable
from pitivi.stream import VideoStream, AudioStream
from pitivi.factories.test import VideoTestSourceFactory, \
AudioTestSourceFactory
-from pitivi.elements.mixer import SmartAdderBin
+from pitivi.elements.mixer import SmartAdderBin, SmartVideomixerBin
class TrackError(Exception):
pass
@@ -653,6 +653,13 @@ class Track(Signallable):
gnl.props.expandable = True
gnl.props.priority = 0
return gnl
+ elif isinstance(stream, VideoStream):
+ gnl = gst.element_factory_make("gnloperation", "top-level-video-mixer")
+ m = SmartVideomixerBin()
+ gnl.add(m)
+ gnl.props.expandable = True
+ gnl.props.priority = 0
+ return gnl
return None
def _getStart(self):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]