pitivi r1263 - in trunk/pitivi: . ui
- From: edwardrv svn gnome org
- To: svn-commits-list gnome org
- Subject: pitivi r1263 - in trunk/pitivi: . ui
- Date: Fri, 26 Sep 2008 17:12:00 +0000 (UTC)
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]