Hello community, here is the log from the commit of package istanbul checked in at Sun Apr 9 12:16:34 CEST 2006. -------- --- GNOME/istanbul/istanbul.changes 2006-03-29 14:13:32.000000000 +0200 +++ istanbul/istanbul.changes 2006-04-08 16:14:22.000000000 +0200 @@ -1,0 +2,5 @@ +Sat Apr 8 16:14:07 CEST 2006 - jpr@suse.de + +- Move to gstreamer 0.10 + +------------------------------------------------------------------- New: ---- istanbul-gstreamer-0-10.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ istanbul.spec ++++++ --- /var/tmp/diff_new_pack.KPqXaT/_old 2006-04-09 12:16:29.000000000 +0200 +++ /var/tmp/diff_new_pack.KPqXaT/_new 2006-04-09 12:16:29.000000000 +0200 @@ -11,18 +11,19 @@ # norootforbuild Name: istanbul -BuildRequires: gnutls-devel gstreamer-plugins-devel gstreamer-plugins-excess intltool krb5 libglade2-devel libgnomeprintui-devel libgnomeui-devel libwnck-devel mDNSResponder-devel perl-XML-Parser python-devel python-gstreamer update-desktop-files +BuildRequires: gnutls-devel gstreamer010-plugins-bad gstreamer010-plugins-base-devel gstreamer010-plugins-good intltool krb5 libglade2-devel libgnomeprintui-devel libgnomeui-devel libwnck-devel mDNSResponder-devel perl-XML-Parser python-devel python-gstreamer010 update-desktop-files Version: 0.1.1 -Release: 13 +Release: 15 License: GPL Group: Productivity/Other Autoreqprov: on -Requires: python-gnome python-gnome-extras python-gstreamer +Requires: python-gnome python-gnome-extras python-gstreamer010 # For theora codec: -Requires: gstreamer-plugins-extra +Requires: gstreamer-plugins-good Summary: Istanbul desktop session recorder URL: http://live.gnome.org/Istanbul Source: %{name}-%{version}.tar.bz2 +Patch1: %{name}-gstreamer-0-10.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %py_requires @@ -43,8 +44,10 @@ %prep %setup +%patch1 %build +autoreconf -fi %configure make %{?jobs:-j%jobs} @@ -65,6 +68,8 @@ %{_datadir}/pixmaps/istanbul.png %changelog -n istanbul +* Sat Apr 08 2006 - jpr@suse.de +- Move to gstreamer 0.10 * Wed Mar 29 2006 - sbrabec@suse.cz - Fixed dependencies. * Tue Mar 07 2006 - gekker@suse.de ++++++ istanbul-gstreamer-0-10.patch ++++++ Index: configure.ac ================================================================================ --- common/as-python.m4 +++ common/as-python.m4 @@ -6,7 +6,7 @@ dnl Updated by Andy Wingo to loop through possible pythons dnl Updated by Thomas Vander Stichele to check for presence of packages/modules -dnl $Id: as-python.m4,v 1.1.1.1 2005/06/12 11:03:23 zaheerm Exp $ +dnl $Id: as-python.m4,v 1.2 2006/03/06 12:50:30 zaheerm Exp $ # AS_PATH_PYTHON([MINIMUM-VERSION]) @@ -151,7 +151,7 @@ AC_MSG_RESULT([looks good]) ]) -dnl AS_PYTHON_IMPORT(PACKAGE/MODULE, [ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]]) +dnl AS_PYTHON_IMPORT(PACKAGE/MODULE, [ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND, [PREAMBLE, [POSTAMBLE]]]]) dnl Try to import the given PACKAGE/MODULE AC_DEFUN([AS_PYTHON_IMPORT], @@ -165,10 +165,17 @@ import sys try: + $4 import $1 + $5 sys.exit(0) - print 'yes' except ImportError: + sys.exit(1) +except SystemExit: + raise +except Exception, e: + print ' Error while trying to import $1:' + print ' %r: %s' % (e, e) sys.exit(1)" if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC --- configure.ac +++ configure.ac @@ -2,9 +2,12 @@ AS_VERSION(istanbul, ISTANBUL, 0, 1, 1, 0) AC_SUBST(RELEASE, $ISTANBUL_RELEASE) -AC_SUBST(PYGTK_REQ, 2.6.0) -AC_SUBST(PYGST_REQ, 0.8.0) -AC_SUBST(GST_REQ, 0.8.10) +AC_SUBST(PYGTK_08_REQ, 2.6.0) +AC_SUBST(PYGTK_010_REQ, 2.6.3) +AC_SUBST(PYGST_08_REQ, 0.8.0) +AC_SUBST(GST08_REQ, 0.8.10) +AC_SUBST(PYGST_010_REQ, 0.10.0) +AC_SUBST(GST010_REQ, 0.10.0) AM_INIT_AUTOMAKE($PACKAGE, $VERSION) AC_SUBST(ACLOCAL_AMFLAGS, "-I m4") @@ -35,10 +38,18 @@ dnl check for GStreamer -PKG_CHECK_MODULES(GST, gstreamer-0.8 >= $GST_REQ) +PKG_CHECK_MODULES(GST_08, gstreamer-0.8 >= $GST08_REQ, + [GST_08_SUPPORTED=yes], [AC_MSG_RESULT([$GST_08_PKG_ERRORS]); GST_08_SUPPORTED=no]) +PKG_CHECK_MODULES(GST_010, gstreamer-0.10 >= $GST010_REQ, + [GST_010_SUPPORTED=yes], [AC_MSG_RESULT([$GST_010_PKG_ERRORS]); GST_010_SUPPORTED=no]) + +if test $GST_08_SUPPORTED = "no" -a $GST_010_SUPPORTED = "no"; then + AC_MSG_ERROR([No GStreamer development packages found. +Please install GStreamer development packages for version 0.8 or 0.10 (or both).Also, check your PKG_CONFIG_PATH.]) +fi dnl check for pygtk -PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= $PYGTK_REQ) +PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= $PYGTK_08_REQ) PYGTK_DIR="`$PKG_CONFIG --variable=pyexecdir pygtk-2.0`" AC_SUBST(PYGTK_DIR) AC_MSG_NOTICE(Using pygtk installed in $PYGTK_DIR) @@ -47,6 +58,22 @@ then AC_MSG_ERROR([PyGTK 2.5.2 contains known bugs, please install other version]) fi + +dnl check if pygtk version suitable for 0.10 +if test $GST_010_SUPPORTED = "yes"; then + AC_MSG_CHECKING([if found PyGTK version is new enough to support GStreamer 0.10]) + if test "$PYGTK_VERSION" \< $PYGTK_010_REQ; then + AC_MSG_RESULT([no, $PYGTK_VERSION < $PYGTK_010_REQ]) + GST_010_SUPPORTED=no + else + AC_MSG_RESULT([yes, $PYGTK_VERSION >= $PYGTK_010_REQ]) + fi +fi +if test $GST_08_SUPPORTED = "no" -a $GST_010_SUPPORTED = "no"; then + AC_MSG_ERROR([No appropriate version of PyGTK installed. Correct the above errors and try again.]) +fi + + export PYTHONPATH=$PYGTK_DIR:$PYTHONPATH dnl check stuff we can generate the tray icon with @@ -94,17 +121,64 @@ fi dnl checks for gst-python -PKG_CHECK_MODULES(PYGST, gst-python-0.8 >= $PYGST_REQ) -PYGST_DIR="`$PKG_CONFIG --variable=pyexecdir gst-python-0.8`" -AC_SUBST(PYGST_DIR) -AC_MSG_NOTICE(Using gstreamer-python installed in $PYGST_DIR) - -export PYTHONPATH=$PYGST_DIR:$PYTHONPATH -AS_PYTHON_IMPORT([gst],, - AC_MSG_ERROR([Maybe you forgot to set your PYTHONPATH?])) +if test $GST_08_SUPPORTED = "yes"; then + PKG_CHECK_MODULES(PYGST_08, gst-python-0.8 >= $PYGST_08_REQ, + [PYGST_08_DIR="`$PKG_CONFIG --variable=pyexecdir gst-python-0.8`" + AC_SUBST(PYGST_08_DIR) + AC_MSG_NOTICE(Using gstreamer-python 0.8 installed in $PYGST_08_DIR)], + [AC_MSG_RESULT([$PYGST_08_PKG_ERRORS]) + GST_08_SUPPORTED=no]) + + if test $GST_08_SUPPORTED = "yes"; then + saved_PYTHONPATH=$PYTHONPATH + export PYTHONPATH=$PYGST_08_DIR:$PYTHONPATH + AS_PYTHON_IMPORT([gst],, + [AC_MSG_NOTICE([Unable to import gst-python 0.8 -- check your PYTHONPATH?]) + GST_08_SUPPORTED=no],, + [assert gst.pygst_version[[1]] == 8]) + + if test $GST_08_SUPPORTED = "yes"; then + AS_PYTHON_IMPORT([gst, gst.interfaces],, + [AC_MSG_NOTICE([You need to recompile gst-python 0.8 with gst.interfaces support]) + GST_08_SUPPORTED=no]) + export PYTHONPATH=$saved_PYTHONPATH + fi + fi +fi +if test $GST_010_SUPPORTED = "yes"; then + PKG_CHECK_MODULES(PYGST_010, gst-python-0.10 >= $PYGST_010_REQ, + [PYGST_010_DIR="`$PKG_CONFIG --variable=pyexecdir gst-python-0.10`" + AC_SUBST(PYGST_010_DIR) + AC_MSG_NOTICE(Using gstreamer-python 0.10 installed in $PYGST_010_DIR)], + [AC_MSG_RESULT([$PYGST_010_PKG_ERRORS]) + GST_010_SUPPORTED=no]) + + if test $GST_010_SUPPORTED = "yes"; then + saved_PYTHONPATH=$PYTHONPATH + export PYTHONPATH=$PYGST_010_DIR:$PYTHONPATH + AS_PYTHON_IMPORT([gst],, + [AC_MSG_NOTICE([Unable to import gst-python 0.10 -- check your PYTHONPATH?]) + GST_010_SUPPORTED=no], + [import pygst; pygst.require('0.10')], + [assert gst.pygst_version[[1]] == 10 or (gst.pygst_version[[1]] == 9 and gst.pygst_version[[2]] >= 7)]) + + if test $GST_08_SUPPORTED = "yes"; then + AS_PYTHON_IMPORT([gst, gst.interfaces],, + [AC_MSG_NOTICE([You need to recompile gst-python 0.10 with gst.interfaces support]) + GST_010_SUPPORTED=no], + [import pygst; pygst.require('0.10')]) + export PYTHONPATH=$saved_PYTHONPATH + fi + fi +fi + +if test $GST_08_SUPPORTED = "no" -a $GST_010_SUPPORTED = "no"; then + AC_MSG_ERROR([No suitably gstreamer-python versions found. Correct the above +errors and try again.]) +fi -AS_PYTHON_IMPORT([gst, gst.interfaces],, - AC_MSG_ERROR([You need to recompile gst-python with gst.interfaces support])) +AC_SUBST(GST_08_SUPPORTED) +AC_SUBST(GST_010_SUPPORTED) dnl output stuff AC_OUTPUT( --- istanbul/main/main.py +++ istanbul/main/main.py @@ -17,6 +17,9 @@ import optparse import sys +import locale, gettext + +from istanbul.configure import config import gobject import gtk @@ -24,7 +27,8 @@ from istanbul.extern import pytrayicon from istanbul.main import prefs -from istanbul.configure import config + +_ = gettext.gettext class Istanbul: # self.state = 0 if stopped @@ -91,10 +95,10 @@ def _about(self, button): aboutdialog = gtk.AboutDialog() - aboutdialog.set_name('istanbul') + aboutdialog.set_name(_('istanbul')) aboutdialog.set_version(config.version) - aboutdialog.set_comments('Records a video of your desktop session') - aboutdialog.set_copyright('Copyright (c) 2005 Zaheer Abbas Merali\nPortions Copyright (C) Fluendo S.L.') + aboutdialog.set_comments(_('Records a video of your desktop session')) + aboutdialog.set_copyright(_('Copyright (c) 2005 Zaheer Abbas Merali\nPortions Copyright (C) Fluendo S.L.')) aboutdialog.set_authors(['Zaheer Abbas Merali']) aboutdialog.set_website('http://live.gnome.org/Istanbul') aboutdialog.show_all() @@ -111,18 +115,26 @@ width = self.settingsdialog.xml.get_widget('widthSpin').get_value_as_int() height = self.settingsdialog.xml.get_widget('heightSpin').get_value_as_int() framerate = self.settingsdialog.xml.get_widget('framerateSpin').get_value() - mainpipeline = 'ximagesrc ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=%d,height=%d,framerate=%f' % (width, height, framerate) - + videoscale_method = 1 + if gst.gst_version >= (0,9): + framerate = '%f/1' % (framerate) + else: + framerate = '%f' % (framerate) + videoscale_method=2 + + mainpipeline = 'ximagesrc ! ffmpegcolorspace ! videoscale method=%d' % (videoscale_method) save_pipeline = '' - encode_pipeline = '' + encode_pipeline = 'video/x-raw-yuv,width=%d,height=%d,framerate=%s ! theoraenc ! oggmux' % (width, height, framerate) icecast_pipeline = '' if self.settingsdialog.xml.get_widget('save').get_active(): if self.settingsdialog.xml.get_widget('encode_later').get_active(): - encode_pipeline = 'smokeenc ! multipartmux' + if gst.gst_version < (0,9): + encode_pipeline = 'video/x-raw-yuv,width=%d,height=%d,framerate=%s ! smokeenc ! multipartmux' % (width, height, framerate) + else: + encode_pipeline = 'video/x-raw-yuv,width=%d,height=%d,framerate=%s ! jpegenc' % (width, height, framerate) filename = '%s.tmp' % self.settingsdialog.xml.get_widget('filenameEntry').get_text() else: - encode_pipeline = 'theoraenc ! oggmux' filename = self.settingsdialog.xml.get_widget('filenameEntry').get_text() save_pipeline = 'filesink location=%s' % filename @@ -130,6 +142,7 @@ ip = self.settingsdialog.xml.get_widget('shout_ip').get_text() port = self.settingsdialog.xml.get_widget('shout_port').get_value_as_int() mountpoint = self.settingsdialog.xml.get_widget('shout_mount').get_text() + password = self.settingsdialog.xml.get_widget('shout_password').get_text() icecast_pipeline = 'shout2send ip=%s port=%s mount=%s password=%s' % (ip, port, mountpoint, password) if save_pipeline != '' and icecast_pipeline != '': final_pipeline = '%s ! %s ! tee name=t ! %s t. ! { queue ! %s }' % (mainpipeline, encode_pipeline, save_pipeline, icecast_pipeline) @@ -138,12 +151,21 @@ self._pipeline = gst.parse_launch(final_pipeline) self._pipeline.set_state(gst.STATE_PLAYING) - gobject.idle_add(self._pipeline.iterate) - - def _encode_eos_cb(self, element, pipeline): - pipeline.set_state(gst.STATE_NULL) - self.state = 0 - self.tray_image.set_from_stock(gtk.STOCK_MEDIA_RECORD, gtk.ICON_SIZE_SMALL_TOOLBAR) + # if 0.8 then iterate, 0.10 uses an internal thread + if gst.gst_version < (0, 9): + gobject.idle_add(self._pipeline.iterate) + + def _encode_eos_cb(self, element_or_bus, message = ""): + finished = 0 + if gst.gst_version >= (0,9): + if message.type == gst.MESSAGE_EOS: + finished = 1 + else: + finished = 1 + if finished == 1: + self.encode_pipeline.set_state(gst.STATE_NULL) + self.state = 0 + self.tray_image.set_from_stock(gtk.STOCK_MEDIA_RECORD, gtk.ICON_SIZE_SMALL_TOOLBAR) def _stop_recording(self): @@ -158,16 +180,28 @@ width = self.settingsdialog.xml.get_widget('widthSpin').get_value_as_int() height = self.settingsdialog.xml.get_widget('heightSpin').get_value_as_int() framerate = self.settingsdialog.xml.get_widget('framerateSpin').get_value() + pipeline_str = "" + if gst.gst_version >= (0,9): + framerate = '%s/1' % (framerate) + pipeline_str = 'filesrc location=%s ! image/jpeg,framerate=%s ! jpegdec ! video/x-raw-yuv,width=%d,height=%d,framerate=%s ! theoraenc ! oggmux ! filesink location=%s name=fsink' % (temp_filename, framerate, width, height, framerate, final_filename) - pipeline_str = 'filesrc location=%s ! multipartdemux ! video/x-smoke,width=%d,height=%d,framerate=%f ! smokedec ! theoraenc quick=0 ! oggmux ! filesink location=%s name=fsink' % (temp_filename, width, height, framerate, final_filename) - - pipeline = gst.parse_launch(pipeline_str) + else: + framerate = '%s' % (framerate) + pipeline_str = 'filesrc location=%s ! multipartdemux ! video/x-smoke,width=%d,height=%d,framerate=%s ! smokedec ! theoraenc ! oggmux ! filesink location=%s name=fsink' % (temp_filename, width, height, framerate, final_filename) - # connect to eos on the sink - filesink = pipeline.get_by_name('fsink') - filesink.connect('eos', self._encode_eos_cb, pipeline) - pipeline.set_state(gst.STATE_PLAYING) - gobject.idle_add(pipeline.iterate) + self.encode_pipeline = gst.parse_launch(pipeline_str) + if gst.gst_version < (0,9): + # connect to eos on the sink + filesink = self.encode_pipeline.get_by_name('fsink') + filesink.connect('eos', self._encode_eos_cb) + else: + bus = self.encode_pipeline.get_bus() + bus.add_signal_watch() + bus.connect('message', self._encode_eos_cb) + + self.encode_pipeline.set_state(gst.STATE_PLAYING) + if gst.gst_version < (0,9): + gobject.idle_add(self.encode_pipeline.iterate) @@ -186,7 +220,14 @@ return 0 + locale.setlocale(locale.LC_ALL,"") + gettext.bindtextdomain(config.domain, config.localedir) + gettext.textdomain(config.domain) + deskrec = Istanbul() gtk.main() +if __name__ == "__main__": + import sys + main(sys.argv) --- istanbul/main/prefs.py +++ istanbul/main/prefs.py @@ -21,10 +21,12 @@ from istanbul.configure import config + class IstanbulPrefs: def __init__(self, main): self.main = main - self.xml = gtk.glade.XML(os.path.join(config.gladedir, 'prefs.glade')) + gtk.glade.bindtextdomain(config.domain, config.localedir) + self.xml = gtk.glade.XML(os.path.join(config.gladedir, 'prefs.glade'), domain = config.domain) self.prefs = self.xml.get_widget('prefs') self.prefs.hide_all() @@ -43,8 +45,13 @@ # check for shout2send plugin #if it doesnt exist desensitise the checkbox - if gst.element_factory_make('shout2send') == None: + if (gst.gst_version < (0,9) and gst.element_factory_make('shout2send') == None): self.xml.get_widget('stream_icecast2').set_sensitive(False) + else: + try: + gst.element_factory_make('shout2send') + except: + self.xml.get_widget('stream_icecast2').set_sensitive(False) # handle checkbox yes/no self.xml.get_widget('save').connect('toggled', self.save_toggled_cb) @@ -61,7 +68,7 @@ state = button.get_active() self.xml.get_widget('filenameLabel').set_sensitive(state) self.xml.get_widget('filenameEntry').set_sensitive(state) - self.xml.get_widget('encode_later').set_senisitive(state) + self.xml.get_widget('encode_later').set_sensitive(state) def icecast_toggled_cb(self, button): state = button.get_active() ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...