pitivi r1261 - in trunk: . pitivi pitivi/ui



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]