pitivi r1261 - in trunk: . pitivi pitivi/ui
- From: edwardrv svn gnome org
- To: svn-commits-list gnome org
- Subject: pitivi r1261 - in trunk: . pitivi pitivi/ui
- Date: Fri, 26 Sep 2008 17:11:46 +0000 (UTC)
Author: edwardrv
Date: Fri Sep 26 17:11:46 2008
New Revision: 1261
URL: http://svn.gnome.org/viewvc/pitivi?rev=1261&view=rev
Log:
SmartCaptureBin, record()
Modified:
trunk/ChangeLog
trunk/pitivi/bin.py
trunk/pitivi/ui/webcam_managerdialog.py
Modified: trunk/pitivi/bin.py
==============================================================================
--- trunk/pitivi/bin.py (original)
+++ trunk/pitivi/bin.py Fri Sep 26 17:11:46 2008
@@ -521,6 +521,8 @@
self.debug("finished connecting sources")
+
+
class SmartCaptureBin(SmartBin):
"""
SmartBin derivative for capturing streams.
@@ -545,3 +547,115 @@
self.debug("finished connecting sources")
+ def record(self, uri, settings=None):
+ """
+ Render the SmartBin to the given uri.
+ Returns : True if the encoding process could be started properly, False otherwise."""
+
+ # Created a no of tee and queues and added to self bin
+ self.vrec_tee = gst.element_factory_make("tee","vrec_tee")
+ self.arec_tee = gst.element_factory_make("tee","arec_tee")
+ self.v_q1 = gst.element_factory_make("queue","vq1")
+ self.v_q2 = gst.element_factory_make("queue","vq2")
+ self.a_q1 = gst.element_factory_make("queue","aq1")
+ self.a_q2 = gst.element_factory_make("queue","aq2")
+
+ self.add(self.v_q1,self.v_q2,self.a_q1,self.a_q2)
+
+ self.debug("setting to READY")
+ if self.set_state(gst.STATE_READY) == gst.STATE_CHANGE_FAILURE:
+ self.warning("Couldn't switch to READY !")
+ return False
+
+ if self.recording:
+ self.error("This bin is already in in recording mode !")
+ return
+
+ # temporarily remove the audiosinkthread
+ self.debug("disconnecting audio sink thread")
+ self.tmpasink = self.asinkthread
+ if not self.removeAudioSinkThread():
+ return False
+
+ # FIXME : remove this once BaseTransform is fixed
+ # Also temporarily remove the videosinkthread
+ self.tmpvsink = self.vsinkthread
+ if not self.removeVideoSinkThread():
+ return False
+
+
+ self.setVideoSinkThread(self.vrec_tee)
+ self.setAudioSinkThread(self.arec_tee)
+
+
+ self.vrec_tee.get_request_pad("src%d").link(self.v_q1.get_pad("sink"))
+ self.vrec_tee.get_request_pad("src%d").link(self.v_q2.get_pad("sink"))
+ self.arec_tee.get_request_pad("src%d").link(self.a_q1.get_pad("sink"))
+ self.arec_tee.get_request_pad("src%d").link(self.a_q2.get_pad("sink"))
+
+ print self.v_q1
+
+ self.debug("creating and adding encoding thread")
+ self.encthread = self._makeEncThread(uri, settings)
+ if not self.encthread:
+ gst.warning("Couldn't create encoding thread")
+ return False
+ self.add(self.encthread)
+ self.debug("encoding thread added")
+
+ # set sync=false on the videosink
+ #self.getRealVideoSink().set_property("sync", False)
+
+ self.debug("linking vtee to encthread:vsink")
+ try:
+ self.v_q1.get_pad("src").link(self.encthread.get_pad("vsink"))
+ self.v_q2.get_pad("src").link(self.tmpvsink.get_pad("sink"))
+
+ except:
+ print " \n\n\n Problem lies here \n\n\n"
+ return False
+
+ self.debug("linking atee to encthread:asink")
+ try:
+ self.a_q1.get_pad("src").link(self.encthread.get_pad("asink"))
+ self.a_q2.get_pad("src").link(self.tmpasink.get_pad("sink"))
+
+ except:
+ return False
+
+ self.debug("going back to PLAYING")
+ changeret = self.set_state(gst.STATE_PLAYING)
+ self.debug("now in PLAYING, set_state() returned %r" % changeret)
+ if changeret == gst.STATE_CHANGE_FAILURE:
+ return False
+
+ self.recording = True
+ return True
+
+ def stopRecording(self):
+ """ stop the recording, removing the encoding thread """
+ if self.recording == False:
+ self.warning("This bin is not in recording mode !")
+ return False
+
+ self.set_state(gst.STATE_PAUSED)
+
+ if self.encthread:
+ apad = self.encthread.get_pad("vsink")
+ apad.get_peer().unlink(apad)
+ apad = self.encthread.get_pad("asink")
+ apad.get_peer().unlink(apad)
+ self.remove(self.encthread)
+ self.encthread.set_state(gst.STATE_NULL)
+ del self.encthread
+ self.encthread = None
+ self.setAudioSinkThread(self.tmpasink)
+ self.setVideoSinkThread(self.tmpvsink)
+ self.tmpasink = None
+ self.tmpvsink = None
+
+ self.getRealVideoSink().set_property("sync", True)
+
+ self.recording = False
+ return True
+
Modified: trunk/pitivi/ui/webcam_managerdialog.py
==============================================================================
--- trunk/pitivi/ui/webcam_managerdialog.py (original)
+++ trunk/pitivi/ui/webcam_managerdialog.py Fri Sep 26 17:11:46 2008
@@ -32,13 +32,13 @@
import tempfile
from gettext import gettext as _
import plumber
+from pitivi.settings import ExportSettings
from sourcefactories import SourceFactoriesWidget
from pitivi.bin import SmartCaptureBin
from pitivi.playground import PlayGround
-
class WebcamManagerDialog(object):
def __init__(self):
@@ -101,12 +101,9 @@
def do_recording(self, w):
- global timeElapsed
-
-
-
+
if self.record_btn.get_label() == "Start Recording":
- self.player.record("/home/slynux/cool.ogg")
+ self.player.record("file:///home/slynux/cool.ogg",ExportSettings())
self.record_btn.set_label("Stop Recording")
self.player.set_state(gst.STATE_PLAYING)
@@ -114,7 +111,7 @@
else:
self.player.stopRecording()
- self.sourcefactories.sourcelist.addFiles(["/home/slynux/cool.ogg"])
+ self.sourcefactories.sourcelist.addFiles(["file:///home/slynux/cool.ogg"])
self.record_btn.set_label("Start Recording")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]