pitivi r1263 - in trunk/pitivi: . ui



Author: edwardrv
Date: Fri Sep 26 17:11:59 2008
New Revision: 1263
URL: http://svn.gnome.org/viewvc/pitivi?rev=1263&view=rev

Log:
SmartBin: changed vtee from identity to tee

Modified:
   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:59 2008
@@ -521,8 +521,8 @@
 
     def __init__(self):
         gst.log("Creating new smartcapturebin")
-        self.videosrc = gst.element_factory_make("videotestsrc", "vsrc")
-        self.audiosrc = gst.element_factory_make("audiotestsrc", "asrc")
+        self.videosrc = gst.element_factory_make("v4l2src", "vsrc")
+        self.audiosrc = gst.element_factory_make("alsasrc", "asrc")
 
         SmartBin.__init__(self, "smartcapturebin", has_video=True, has_audio=True,
                           width=720, height=576)
@@ -537,4 +537,76 @@
 	self.audiosrc.get_pad("src").link(self.atee.get_pad("sink"))
 
         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."""
+        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
+
+        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 ecnthread:vsink")
+        try:
+            self.vtee.get_request_pad("src%d").link(self.encthread.get_pad("vsink"))
+        except:
+            return False
+
+        self.debug("linking atee to encthread:asink")
+        try:
+            self.atee.get_request_pad("src%d").link(self.encthread.get_pad("asink"))
+        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.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:59 2008
@@ -19,13 +19,10 @@
 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-import os
 import gtk
+import os
 import gtk.glade
-import pango
-import gobject
 import pygst
-import time
 from pitivi import instance
 pygst.require("0.10")
 import gst
@@ -42,7 +39,7 @@
 class WebcamManagerDialog(object):
 
 	def __init__(self):
-	
+		gst.log("Creating new WebcamManager Dialog")
 
 		# Create gtk widget using glade model 
 		glade_dir = os.path.dirname(os.path.abspath(__file__))
@@ -62,10 +59,38 @@
 	
 		self.sourcefactories = SourceFactoriesWidget()
 
+		gst.debug("SmartCaptureBin player created")
 		self.player = SmartCaptureBin()		
+		self.setSinks()
+	
+		self.player.set_state(gst.STATE_PLAYING)
+
+
+	# Record button action callback
+	def do_recording(self, w):
+	
+		if self.record_btn.get_label() == "Start Recording":
+			gst.debug("recording started")
+			self.filepath = 'file://'+tempfile.mktemp()+'ogg'
+			self.player.record(self.filepath,ExportSettings())
+			self.record_btn.set_label("Stop Recording")
+			self.player.set_state(gst.STATE_PLAYING)
+
+
+
+		else:
+			gst.debug("recording stopped")
+			self.player.stopRecording()
+			self.sourcefactories.sourcelist.addFiles([self.filepath])
+
+
+			self.record_btn.set_label("Start Recording")
 
+	# For Setting up audio,video sinks
+	def setSinks(self):
 
 		self.videosink = plumber.get_video_sink()
+
 		vsinkthread = gst.Bin('vsinkthread')
 		vqueue = gst.element_factory_make('queue')
 		cspace = gst.element_factory_make('ffmpegcolorspace')
@@ -96,32 +121,13 @@
 		bus.enable_sync_message_emission()
 		bus.connect('sync-message::element', self.on_sync_message)
 
-		self.player.set_state(gst.STATE_PLAYING)
-
-
-
-	def do_recording(self, w):
-	
-		if self.record_btn.get_label() == "Start Recording":
-			self.player.record("file:///home/slynux/cool.ogg",ExportSettings())
-			self.record_btn.set_label("Stop Recording")
-			self.player.set_state(gst.STATE_PLAYING)
-
-
-
-		else:
-			self.player.stopRecording()
-			self.sourcefactories.sourcelist.addFiles(["file:///home/slynux/cool.ogg"])
-
-
-			self.record_btn.set_label("Start Recording")
-
 
+	# Close the Webcamdialog
 	def close(self,w):
 		self.cam_window.destroy()
 		self.player.set_state(gst.STATE_NULL)
 		
-
+	# For draw_window syncs
 	def on_sync_message(self, bus, message):
 		if message.structure is None:
 			return



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]