Hello community,
here is the log from the commit of package telepathy-stream-engine for openSUSE:Factory
checked in at Fri Aug 7 23:22:55 CEST 2009.
--------
--- GNOME/telepathy-stream-engine/telepathy-stream-engine.changes 2009-07-20 09:44:10.000000000 +0200
+++ telepathy-stream-engine/telepathy-stream-engine.changes 2009-08-05 11:25:01.000000000 +0200
@@ -1,0 +2,10 @@
+Wed Aug 5 11:24:05 CEST 2009 - vuntz@novell.com
+
+- Update to version 0.5.11:
+ + Make singleton preview window work again and not cause a crash
+ + Set the ToS per stream type
+- Changes from version 0.5.10:
+ + Set the audio processing threads as real-time
+ + Try to restart the pipeline on errors
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
Old:
----
telepathy-stream-engine-0.5.9.tar.bz2
New:
----
telepathy-stream-engine-0.5.11.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ telepathy-stream-engine.spec ++++++
--- /var/tmp/diff_new_pack.wRUKcB/_old 2009-08-07 23:22:31.000000000 +0200
+++ /var/tmp/diff_new_pack.wRUKcB/_new 2009-08-07 23:22:31.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package telepathy-stream-engine (Version 0.5.9)
+# spec file for package telepathy-stream-engine (Version 0.5.11)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -26,8 +26,8 @@
BuildRequires: gtk2-devel
BuildRequires: libxslt
BuildRequires: python-xml
-Version: 0.5.9
-Release: 2
+Version: 0.5.11
+Release: 1
License: LGPL v2.1 or later
# runtime dependency
Requires: gstreamer-0_10-plugins-farsight
++++++ telepathy-stream-engine-0.5.9.tar.bz2 -> telepathy-stream-engine-0.5.11.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/ChangeLog new/telepathy-stream-engine-0.5.11/ChangeLog
--- old/telepathy-stream-engine-0.5.9/ChangeLog 2009-06-03 18:50:10.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/ChangeLog 2009-08-04 00:32:56.000000000 +0200
@@ -1,3 +1,195 @@
+commit a461bb7ce9ec22447ad3ae5aff2105f3214e5315
+Author: Olivier Crête
+Date: Mon Aug 3 17:42:38 2009 -0400
+
+ Version 0.5.11
+
+commit b4c16f1ccc5b6f243b38100da241ef550b383c6c
+Author: Olivier Crête
+Date: Sat Jul 25 16:14:13 2009 -0400
+
+ Set the ToS according to the stream type
+
+commit ef94a21b0acfab8c3dd41efe1e0f7fbf54080e5c
+Author: Olivier Crête
+Date: Wed Jul 15 16:39:32 2009 -0400
+
+ Don't try to pass messages to the preview if it doesn't exist
+
+commit b140c1d56b5d1464f7858a9a0fe5ff3f7ff1f65a
+Author: Olivier Crête
+Date: Wed Jul 15 14:42:13 2009 -0400
+
+ Don't try to iterate further if the video sink matching the prepare-window-xid was found
+
+commit bbe8adffebe50cbe3661d3c83f9c1f27d05edbb0
+Author: Olivier Crête
+Date: Wed Jul 15 14:40:51 2009 -0400
+
+ Pass the bus sync message to the singleton preview too
+
+ Was broken by 8607cf2bfb8a2b
+
+commit 1b3054a60ab7654d7946189ce410df4c55f61131
+Author: Olivier Crête
+Date: Mon Jul 13 16:44:18 2009 -0400
+
+ Version 0.5.10.1
+
+commit 8aa2a5b041b63300a97fcb2006978a8f555a2bf2
+Author: Olivier Crête
+Date: Mon Jul 13 16:27:51 2009 -0400
+
+ Version 0.5.10
+
+commit 373974798a04a490514b45c3c4e536b65f828af4
+Author: Olivier Crête
+Date: Mon Jul 13 16:07:20 2009 -0400
+
+ Put a 30ms limit on time between blocking calls
+
+commit 4810389385cedf7d50654eee536e10234999ba5b
+Author: Olivier Crête
+Date: Mon Jul 13 15:40:04 2009 -0400
+
+ Require gstreamer core > 0.10.23 for stream-status changes
+
+commit 87eb3f9533b05ab7b9ac964a990f257d80fca4f3
+Author: Olivier Crête
+Date: Fri May 29 12:31:14 2009 -0400
+
+ Iterate on the audio sending pipeline too
+
+commit 4b47e28d1ca52d04c3753428b1bea7f63fc3599f
+Author: Olivier Crête
+Date: Thu May 21 17:55:34 2009 -0400
+
+ Iterate internal links inside sink
+
+commit 0cd0a6338c48f5997ac4825c7c6e7ce1d44da36e
+Author: Olivier Crête
+Date: Thu May 21 17:28:28 2009 -0400
+
+ Make iterator generic
+
+commit 7c9f24d39f82e295b458687e2a9ff76af3154f9f
+Author: Olivier Crête
+Date: Thu May 21 17:02:27 2009 -0400
+
+ Export audiostream src element
+
+commit 94c5f77969a1db7f3a15c1a2dff5a3aa7e104bf4
+Author: Olivier Crête
+Date: Thu May 21 16:21:16 2009 -0400
+
+ Print warning if thread couldn't be set to RT
+
+commit 18e99b793e79405ead8dafef58d9deb16fae466c
+Author: Olivier Crête
+Date: Thu May 21 13:10:36 2009 -0400
+
+ Message source is not always an element
+
+commit 4113e3edcb4a3052d1c4aed9fb9f37c1644356c5
+Author: Olivier Crête
+Date: Wed May 20 18:23:03 2009 -0400
+
+ Set as sched_rr if possible
+
+commit 312dad9a568ad9f36efc0ed7dbdd8dc2d84c5b0d
+Author: Olivier Crête
+Date: Wed May 20 18:29:31 2009 -0400
+
+ Set the rttime rlimit
+
+commit 5f63f432203f397d8c969d76763c936a61ecd44b
+Author: Olivier Crête
+Date: Wed May 20 17:53:20 2009 -0400
+
+ Keep a list of all objects linked to an audio sink
+
+commit 6ce310afd5115a5fd8a8e4125010edcaa47c27cc
+Author: Olivier Crête
+Date: Wed May 20 17:33:26 2009 -0400
+
+ Emit sink-added signal from audiostream
+
+commit dcd4d492a21ea43f3e96bbc8f153c8c0d377c374
+Author: Olivier Crête
+Date: Wed May 20 17:22:20 2009 -0400
+
+ Save threads when entering them
+
+commit b922018722c12dffa00538b3eaf8cab30c27601c
+Author: Olivier Crête
+Date: Wed May 20 17:08:41 2009 -0400
+
+ Intercept enter and leave status changes
+
+commit 8607cf2bfb8a2bc46ed15abdd34bba357d631dda
+Author: Olivier Crête
+Date: Wed May 20 17:02:49 2009 -0400
+
+ Use switch in sync handler
+
+commit bc9327d5cd91d118e6a79770be84d61fdfda5c36
+Author: Olivier Crête
+Date: Tue Apr 14 21:08:56 2009 -0400
+
+ Always enable rt mode if possible
+
+commit 9ddefef015140f41aa95be1fdecf87490258bf9a
+Author: Olivier Crête
+Date: Tue Apr 14 20:33:39 2009 -0400
+
+ Disable old rt
+
+commit 9142354f5b87cf281c5d6fd9a90e021694c0084e
+Author: Olivier Crête
+Date: Fri Jun 26 20:14:56 2009 -0400
+
+ Reset the pipeline on error
+
+commit 2f25b30900beef1f336159e3e03d5561e88346fd
+Author: Olivier Crête
+Date: Fri Jun 26 20:13:30 2009 -0400
+
+ Add method to stop the audio sources
+
+commit 976c1a7b2b7ce7b298e7106bfe0101e72dee91ff
+Author: Olivier Crête
+Date: Mon Jun 29 19:02:33 2009 -0400
+
+ TP_ERRORS is already registered in newer tp-glibs
+
+commit 065a7277a8995e69679553a16a46aeae0e116c4f
+Author: Olivier Crête
+Date: Mon Jun 29 18:56:07 2009 -0400
+
+ Message source can be any GstObject
+
+commit e2a5b6025899edd3b57bb40b0371bab9d5929cfa
+Author: Olivier Crête
+Date: Mon Jun 8 16:39:53 2009 -0400
+
+ Remove video src before stopping it to prevent the EOS from propagating
+
+commit a6fa6194377ac7e053d20a932feea5ab9b745086
+Author: Olivier Crête
+Date: Wed Jun 3 19:17:41 2009 -0400
+
+ Put audio src in ready instead of paused when not sending
+
+ If the audio src is paused, it will cause the pipeline to go no-preroll
+ while its playing, which will prevent other elements from doing
+ async state changes.
+
+commit 309b167cacd2547e32e6846190152c28616fd7bc
+Author: Olivier Crête
+Date: Wed Jun 3 12:50:57 2009 -0400
+
+ Version 0.5.9.1
+
commit cd4a1a7ae9b82997465bb79546f0e309b6a04dc8
Author: Olivier Crête
Date: Wed Jun 3 12:49:05 2009 -0400
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/NEWS new/telepathy-stream-engine-0.5.11/NEWS
--- old/telepathy-stream-engine-0.5.9/NEWS 2009-06-03 18:48:26.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/NEWS 2009-08-04 00:23:44.000000000 +0200
@@ -1,3 +1,15 @@
+telepathy-stream-engine 0.5.11 (2009-08-03)
+==========================================
+
+* Make singleton preview window work again and not cause a crash
+* Set the ToS per stream type
+
+telepathy-stream-engine 0.5.10 (2009-07-13)
+==========================================
+
+* Set the audio processing threads as real-time
+* Try to restart the pipeline on errors
+
telepathy-stream-engine 0.5.9 (2009-06-03)
==========================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/configure new/telepathy-stream-engine-0.5.11/configure
--- old/telepathy-stream-engine-0.5.9/configure 2009-06-03 18:49:17.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/configure 2009-08-04 00:32:49.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for Telepathy Stream Engine 0.5.9.
+# Generated by GNU Autoconf 2.63 for Telepathy Stream Engine 0.5.11.
#
# Report bugs to https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=stream-engine.
#
@@ -750,8 +750,8 @@
# Identity of this package.
PACKAGE_NAME='Telepathy Stream Engine'
PACKAGE_TARNAME='telepathy-stream-engine'
-PACKAGE_VERSION='0.5.9'
-PACKAGE_STRING='Telepathy Stream Engine 0.5.9'
+PACKAGE_VERSION='0.5.11'
+PACKAGE_STRING='Telepathy Stream Engine 0.5.11'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=stream-engine'
# Factoring default headers for most tests.
@@ -1533,7 +1533,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Telepathy Stream Engine 0.5.9 to adapt to many kinds of systems.
+\`configure' configures Telepathy Stream Engine 0.5.11 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1604,7 +1604,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Telepathy Stream Engine 0.5.9:";;
+ short | recursive ) echo "Configuration of Telepathy Stream Engine 0.5.11:";;
esac
cat <<\_ACEOF
@@ -1739,7 +1739,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Telepathy Stream Engine configure 0.5.9
+Telepathy Stream Engine configure 0.5.11
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1753,7 +1753,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Telepathy Stream Engine $as_me 0.5.9, which was
+It was created by Telepathy Stream Engine $as_me 0.5.11, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2472,7 +2472,7 @@
# Define the identity of the package.
PACKAGE='telepathy-stream-engine'
- VERSION='0.5.9'
+ VERSION='0.5.11'
cat >>confdefs.h <<_ACEOF
@@ -21506,12 +21506,12 @@
pkg_cv_TELEPATHY_CFLAGS="$TELEPATHY_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.7.8\"") >&5
- ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.7.8") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.7.20\"") >&5
+ ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.7.20") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_TELEPATHY_CFLAGS=`$PKG_CONFIG --cflags "telepathy-glib >= 0.7.8" 2>/dev/null`
+ pkg_cv_TELEPATHY_CFLAGS=`$PKG_CONFIG --cflags "telepathy-glib >= 0.7.20" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21522,12 +21522,12 @@
pkg_cv_TELEPATHY_LIBS="$TELEPATHY_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.7.8\"") >&5
- ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.7.8") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.7.20\"") >&5
+ ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.7.20") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_TELEPATHY_LIBS=`$PKG_CONFIG --libs "telepathy-glib >= 0.7.8" 2>/dev/null`
+ pkg_cv_TELEPATHY_LIBS=`$PKG_CONFIG --libs "telepathy-glib >= 0.7.20" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21545,14 +21545,14 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- TELEPATHY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "telepathy-glib >= 0.7.8" 2>&1`
+ TELEPATHY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "telepathy-glib >= 0.7.20" 2>&1`
else
- TELEPATHY_PKG_ERRORS=`$PKG_CONFIG --print-errors "telepathy-glib >= 0.7.8" 2>&1`
+ TELEPATHY_PKG_ERRORS=`$PKG_CONFIG --print-errors "telepathy-glib >= 0.7.20" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$TELEPATHY_PKG_ERRORS" >&5
- { { $as_echo "$as_me:$LINENO: error: Package requirements (telepathy-glib >= 0.7.8) were not met:
+ { { $as_echo "$as_me:$LINENO: error: Package requirements (telepathy-glib >= 0.7.20) were not met:
$TELEPATHY_PKG_ERRORS
@@ -21563,7 +21563,7 @@
and TELEPATHY_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
" >&5
-$as_echo "$as_me: error: Package requirements (telepathy-glib >= 0.7.8) were not met:
+$as_echo "$as_me: error: Package requirements (telepathy-glib >= 0.7.20) were not met:
$TELEPATHY_PKG_ERRORS
@@ -21619,12 +21619,15 @@
pkg_cv_FARSIGHT2_CFLAGS="$FARSIGHT2_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"farsight2-0.10 >= 0.0.3\"") >&5
- ($PKG_CONFIG --exists --print-errors "farsight2-0.10 >= 0.0.3") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 \"") >&5
+ ($PKG_CONFIG --exists --print-errors "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 ") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_FARSIGHT2_CFLAGS=`$PKG_CONFIG --cflags "farsight2-0.10 >= 0.0.3" 2>/dev/null`
+ pkg_cv_FARSIGHT2_CFLAGS=`$PKG_CONFIG --cflags "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 " 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21635,12 +21638,15 @@
pkg_cv_FARSIGHT2_LIBS="$FARSIGHT2_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"farsight2-0.10 >= 0.0.3\"") >&5
- ($PKG_CONFIG --exists --print-errors "farsight2-0.10 >= 0.0.3") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 \"") >&5
+ ($PKG_CONFIG --exists --print-errors "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 ") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_FARSIGHT2_LIBS=`$PKG_CONFIG --libs "farsight2-0.10 >= 0.0.3" 2>/dev/null`
+ pkg_cv_FARSIGHT2_LIBS=`$PKG_CONFIG --libs "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 " 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21658,14 +21664,17 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- FARSIGHT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "farsight2-0.10 >= 0.0.3" 2>&1`
+ FARSIGHT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 " 2>&1`
else
- FARSIGHT2_PKG_ERRORS=`$PKG_CONFIG --print-errors "farsight2-0.10 >= 0.0.3" 2>&1`
+ FARSIGHT2_PKG_ERRORS=`$PKG_CONFIG --print-errors "farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 " 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$FARSIGHT2_PKG_ERRORS" >&5
- { { $as_echo "$as_me:$LINENO: error: Package requirements (farsight2-0.10 >= 0.0.3) were not met:
+ { { $as_echo "$as_me:$LINENO: error: Package requirements (farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 ) were not met:
$FARSIGHT2_PKG_ERRORS
@@ -21676,7 +21685,8 @@
and FARSIGHT2_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
" >&5
-$as_echo "$as_me: error: Package requirements (farsight2-0.10 >= 0.0.3) were not met:
+$as_echo "$as_me: error: Package requirements (farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 ) were not met:
$FARSIGHT2_PKG_ERRORS
@@ -21733,12 +21743,12 @@
pkg_cv_TPFARSIGHT_CFLAGS="$TPFARSIGHT_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-farsight >= 0.0.3\"") >&5
- ($PKG_CONFIG --exists --print-errors "telepathy-farsight >= 0.0.3") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-farsight >= 0.0.8\"") >&5
+ ($PKG_CONFIG --exists --print-errors "telepathy-farsight >= 0.0.8") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_TPFARSIGHT_CFLAGS=`$PKG_CONFIG --cflags "telepathy-farsight >= 0.0.3" 2>/dev/null`
+ pkg_cv_TPFARSIGHT_CFLAGS=`$PKG_CONFIG --cflags "telepathy-farsight >= 0.0.8" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21749,12 +21759,12 @@
pkg_cv_TPFARSIGHT_LIBS="$TPFARSIGHT_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-farsight >= 0.0.3\"") >&5
- ($PKG_CONFIG --exists --print-errors "telepathy-farsight >= 0.0.3") 2>&5
+ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"telepathy-farsight >= 0.0.8\"") >&5
+ ($PKG_CONFIG --exists --print-errors "telepathy-farsight >= 0.0.8") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- pkg_cv_TPFARSIGHT_LIBS=`$PKG_CONFIG --libs "telepathy-farsight >= 0.0.3" 2>/dev/null`
+ pkg_cv_TPFARSIGHT_LIBS=`$PKG_CONFIG --libs "telepathy-farsight >= 0.0.8" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -21772,14 +21782,14 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- TPFARSIGHT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "telepathy-farsight >= 0.0.3" 2>&1`
+ TPFARSIGHT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "telepathy-farsight >= 0.0.8" 2>&1`
else
- TPFARSIGHT_PKG_ERRORS=`$PKG_CONFIG --print-errors "telepathy-farsight >= 0.0.3" 2>&1`
+ TPFARSIGHT_PKG_ERRORS=`$PKG_CONFIG --print-errors "telepathy-farsight >= 0.0.8" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$TPFARSIGHT_PKG_ERRORS" >&5
- { { $as_echo "$as_me:$LINENO: error: Package requirements (telepathy-farsight >= 0.0.3) were not met:
+ { { $as_echo "$as_me:$LINENO: error: Package requirements (telepathy-farsight >= 0.0.8) were not met:
$TPFARSIGHT_PKG_ERRORS
@@ -21790,7 +21800,7 @@
and TPFARSIGHT_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
" >&5
-$as_echo "$as_me: error: Package requirements (telepathy-farsight >= 0.0.3) were not met:
+$as_echo "$as_me: error: Package requirements (telepathy-farsight >= 0.0.8) were not met:
$TPFARSIGHT_PKG_ERRORS
@@ -22633,7 +22643,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Telepathy Stream Engine $as_me 0.5.9, which was
+This file was extended by Telepathy Stream Engine $as_me 0.5.11, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22696,7 +22706,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-Telepathy Stream Engine config.status 0.5.9
+Telepathy Stream Engine config.status 0.5.11
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/configure.ac new/telepathy-stream-engine-0.5.11/configure.ac
--- old/telepathy-stream-engine-0.5.9/configure.ac 2009-06-03 18:48:37.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/configure.ac 2009-08-04 00:32:33.000000000 +0200
@@ -9,7 +9,7 @@
m4_define([stream_engine_major_version], [0])
m4_define([stream_engine_minor_version], [5])
-m4_define([stream_engine_micro_version], [9])
+m4_define([stream_engine_micro_version], [11])
m4_define([stream_engine_nano_version], [0])
# Some magic
@@ -103,25 +103,26 @@
AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [DBus services directory])
dnl Check for Telepathy libraries
-PKG_CHECK_MODULES([TELEPATHY], [telepathy-glib >= 0.7.8])
+PKG_CHECK_MODULES([TELEPATHY], [telepathy-glib >= 0.7.20])
AC_SUBST(TELEPATHY_CFLAGS)
AC_SUBST(TELEPATHY_LIBS)
dnl Check for farsight
-PKG_CHECK_MODULES(FARSIGHT2, [farsight2-0.10 >= 0.0.3])
+PKG_CHECK_MODULES(FARSIGHT2, [farsight2-0.10 >= 0.0.14
+ gstreamer-0.10 > 0.10.23 ])
AC_SUBST(FARSIGHT2_CFLAGS)
AC_SUBST(FARSIGHT2_LIBS)
dnl Check for telepathy-farsight
-PKG_CHECK_MODULES(TPFARSIGHT, [telepathy-farsight >= 0.0.3])
+PKG_CHECK_MODULES(TPFARSIGHT, [telepathy-farsight >= 0.0.8])
AC_SUBST(TPFARSIGHT_CFLAGS)
AC_SUBST(TPFARSIGHT_LIBS)
-dnl Check for gst-interfaces or gst-plugins-base
+dnl Check for gst-interfaces
PKG_CHECK_MODULES(GST_INTERFACES, [gstreamer-interfaces-0.10 >= 0.10.18],[],
[AC_MSG_ERROR([gst-plugins-base-0.10.18. is required])])
AC_SUBST(GST_INTERFACES_CFLAGS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/src/audiostream.c new/telepathy-stream-engine-0.5.11/src/audiostream.c
--- old/telepathy-stream-engine-0.5.9/src/audiostream.c 2009-06-03 18:39:01.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/src/audiostream.c 2009-07-13 23:27:43.000000000 +0200
@@ -68,6 +68,9 @@
/* Everything below this line is protected by the mutex */
guint error_idle_id;
GList *sinkbins;
+
+ gboolean sending;
+ gboolean playing;
};
@@ -77,8 +80,19 @@
PROP_0,
PROP_STREAM,
PROP_BIN,
+ PROP_SRC
+};
+
+/* signal enum */
+enum
+{
+ SINK_ADDED_SIGNAL,
+ LAST_SIGNAL
};
+static guint signals[LAST_SIGNAL] = {0};
+
+
static GstElement *
tp_stream_engine_audio_stream_make_src_bin (TpStreamEngineAudioStream *self,
GError **error);
@@ -114,6 +128,7 @@
self->priv = priv;
+ self->priv->playing = TRUE;
self->priv->mutex = g_mutex_new ();
}
@@ -181,7 +196,7 @@
gst_object_unref (sink_pad);
gst_element_set_locked_state (self->priv->srcbin, TRUE);
- gst_element_set_state (self->priv->srcbin, GST_STATE_PAUSED);
+ gst_element_set_state (self->priv->srcbin, GST_STATE_READY);
self->priv->request_resource_handler_id = g_signal_connect (
self->priv->stream, "request-resource", G_CALLBACK (request_resource),
@@ -314,6 +329,21 @@
"The Bin to add the elements to",
GST_TYPE_BIN,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (object_class, PROP_SRC,
+ g_param_spec_object ("src",
+ "The audio src",
+ "The audio src element",
+ GST_TYPE_ELEMENT,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ signals[SINK_ADDED_SIGNAL] = g_signal_new ("sink-added",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
}
static void
@@ -354,6 +384,9 @@
case PROP_BIN:
g_value_set_object (value, self->priv->bin);
break;
+ case PROP_SRC:
+ g_value_set_object (value, self->priv->srcbin);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -475,6 +508,8 @@
gst_object_unref (sinkpad);
+ g_signal_emit (self, signals[SINK_ADDED_SIGNAL], 0, sink);
+
g_mutex_lock (self->priv->mutex);
self->priv->sinkbins = g_list_append (self->priv->sinkbins, sink);
g_mutex_unlock (self->priv->mutex);
@@ -509,12 +544,21 @@
if (!(dir & TP_MEDIA_STREAM_DIRECTION_SEND))
return TRUE;
+ if (!self->priv->playing)
+ {
+ self->priv->sending = TRUE;
+ return TRUE;
+ }
+
ret = gst_element_set_state (self->priv->srcbin, GST_STATE_PLAYING);
if (ret == GST_STATE_CHANGE_FAILURE)
return FALSE;
else
- return TRUE;
+ {
+ self->priv->sending = TRUE;
+ return TRUE;
+ }
}
static void
@@ -526,5 +570,39 @@
if (!(dir & TP_MEDIA_STREAM_DIRECTION_SEND))
return;
- gst_element_set_state (self->priv->srcbin, GST_STATE_PAUSED);
+ self->priv->sending = FALSE;
+
+ if (!self->priv->playing)
+ return;
+
+ gst_element_set_state (self->priv->srcbin, GST_STATE_READY);
+
+}
+
+gboolean
+tp_stream_engine_audio_stream_set_playing (TpStreamEngineAudioStream *self,
+ gboolean playing)
+{
+ GstStateChangeReturn ret;
+
+ if (playing)
+ {
+ if (self->priv->sending)
+ ret = gst_element_set_state (self->priv->srcbin, GST_STATE_PLAYING);
+ else
+ ret = gst_element_set_state (self->priv->srcbin, GST_STATE_READY);
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ tf_stream_error (self->priv->stream, 0,
+ "Error re-starting the audio srouce");
+ }
+ else
+ {
+ ret = gst_element_set_state (self->priv->srcbin, GST_STATE_NULL);
+ g_assert (ret != GST_STATE_CHANGE_FAILURE);
+ }
+
+ self->priv->playing = playing;
+
+ return (ret != GST_STATE_CHANGE_FAILURE);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/src/audiostream.h new/telepathy-stream-engine-0.5.11/src/audiostream.h
--- old/telepathy-stream-engine-0.5.9/src/audiostream.h 2009-01-13 00:08:07.000000000 +0100
+++ new/telepathy-stream-engine-0.5.11/src/audiostream.h 2009-07-13 21:32:46.000000000 +0200
@@ -51,6 +51,11 @@
GstBin *bin,
GError **error);
+gboolean tp_stream_engine_audio_stream_set_playing (
+ TpStreamEngineAudioStream *self,
+ gboolean playing);
+
+
G_END_DECLS
#endif /* __TP_STREAM_ENGINE_AUDIO_STREAM_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/src/stream-engine-main.c new/telepathy-stream-engine-0.5.11/src/stream-engine-main.c
--- old/telepathy-stream-engine-0.5.9/src/stream-engine-main.c 2009-06-03 18:39:07.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/src/stream-engine-main.c 2009-07-13 22:28:44.000000000 +0200
@@ -27,6 +27,10 @@
#include
#include
#include
+
+#ifndef RLIMIT_RTTIME
+# define RLIMIT_RTTIME 15
+#endif
#endif /* USE_REALTIME */
#include
@@ -68,7 +72,7 @@
#define WATCHDOG_BARK 5
#define WATCHDOG_BITE 30
-#ifdef USE_REALTIME
+#ifdef USE_REALTIME_DISABLED
#define DEF_PRIORITY_POLICY SCHED_RR
#define PRIORITY_DELTA 1
@@ -220,24 +224,25 @@
GError *error = NULL;
#ifdef USE_REALTIME
- if (getenv("STREAM_ENGINE_REALTIME"))
- {
- uid_t uid;
- struct rlimit rl;
-
- rl.rlim_max = 9;
- rl.rlim_cur = 9;
+ uid_t uid;
+ struct rlimit rl;
-
- if (setrlimit(RLIMIT_RTPRIO, &rl) < 0)
- g_error("setrlimit: %s", strerror (errno));
-
- uid = getuid();
- if (uid != 0 && geteuid() == 0) {
- g_assert(setresuid(uid, uid, uid) >= 0);
- g_assert(getuid() == uid);
- g_assert(geteuid() == uid);
- }
+ rl.rlim_max = 99;
+ rl.rlim_cur = 99;
+ if (setrlimit(RLIMIT_RTPRIO, &rl) < 0)
+ g_warning("setrlimit rtprio: %s", strerror (errno));
+
+ /* In nanoseconds */
+ rl.rlim_max = rl.rlim_cur = 30*1000*1000;
+
+ if (setrlimit(RLIMIT_RTTIME, &rl) < 0)
+ g_warning("setrlimit rttime: %s", strerror (errno));
+
+ uid = getuid();
+ if (uid != 0 && geteuid() == 0) {
+ g_assert(setresuid(uid, uid, uid) >= 0);
+ g_assert(getuid() == uid);
+ g_assert(geteuid() == uid);
}
#endif
@@ -269,7 +274,7 @@
signal (SIGUSR1, got_sigusr1);
-#ifdef USE_REALTIME
+#ifdef USE_REALTIME_DISABLED
{
int rt_mode;
char *rt_env;
@@ -307,8 +312,6 @@
mainloop = g_main_loop_new (NULL, FALSE);
- dbus_g_error_domain_register (TP_ERRORS, "org.freedesktop.Telepathy.Error", TP_TYPE_ERROR);
-
stream_engine = tp_stream_engine_get ();
g_signal_connect (stream_engine, "handling-channel",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/src/tp-stream-engine.c new/telepathy-stream-engine-0.5.11/src/tp-stream-engine.c
--- old/telepathy-stream-engine-0.5.9/src/tp-stream-engine.c 2009-06-03 18:46:11.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/src/tp-stream-engine.c 2009-08-04 00:23:44.000000000 +0200
@@ -26,6 +26,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -54,6 +56,9 @@
_create_pipeline (TpStreamEngine *self);
static void
+setup_realtime_thread (pthread_t thread);
+
+static void
register_dbus_signal_marshallers()
{
/*register a marshaller for the NewMediaStreamHandler signal*/
@@ -127,6 +132,7 @@
GstElement *pipeline;
+ GstElement *capsfilter;
GstElement *videosrc;
GstElement *videotee;
@@ -139,13 +145,23 @@
gint video_source_use_count;
+ gboolean failcount;
+ guint reset_failcount_id;
+ guint restart_pipeline_id;
+
/* Everything below this is protected by the mutex */
GList *output_sinks;
GList *preview_sinks;
+ GList *audio_streams;
+
TpStreamEngineVideoPreview *preview;
guint bus_async_source_id;
+
+ GPtrArray *audio_objects;
+
+ GHashTable *object_threads;
};
static void
@@ -222,6 +238,9 @@
priv->channels_by_path = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
+ priv->audio_objects = g_ptr_array_new ();
+ priv->object_threads = g_hash_table_new (g_direct_hash, g_direct_equal);
+
priv->mutex = g_mutex_new ();
priv->notifier = fs_element_added_notifier_new ();
@@ -331,6 +350,20 @@
if (priv->dispose_has_run)
return;
+
+ if (self->priv->reset_failcount_id)
+ {
+ g_source_remove (self->priv->reset_failcount_id);
+ self->priv->reset_failcount_id = 0;
+ }
+
+
+ if (self->priv->restart_pipeline_id)
+ {
+ g_source_remove (self->priv->restart_pipeline_id);
+ self->priv->restart_pipeline_id = 0;
+ }
+
if (priv->channels)
{
guint i;
@@ -365,7 +398,8 @@
*/
gst_element_set_state (priv->videosrc, GST_STATE_NULL);
gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- g_object_unref (priv->pipeline);
+ gst_object_unref (priv->videosrc);
+ gst_object_unref (priv->pipeline);
priv->pipeline = NULL;
priv->videosrc = NULL;
}
@@ -389,6 +423,9 @@
g_mutex_free (self->priv->mutex);
+ g_ptr_array_free (self->priv->audio_objects, TRUE);
+ g_hash_table_destroy (self->priv->object_threads);
+
G_OBJECT_CLASS (tp_stream_engine_parent_class)->finalize (object);
}
@@ -419,6 +456,18 @@
g_debug ("Starting video source");
+ if (!gst_bin_add (GST_BIN (self->priv->pipeline), self->priv->videosrc))
+ {
+ g_warning ("Could not add videosrc to pipeline");
+ return FALSE;
+ }
+
+ if (!gst_element_link (self->priv->videosrc, self->priv->capsfilter))
+ {
+ g_warning ("Could not link videosrc to capsfilter");
+ return FALSE;
+ }
+
self->priv->video_source_use_count++;
state_ret = gst_element_set_state (self->priv->videosrc, GST_STATE_PLAYING);
@@ -447,6 +496,9 @@
g_debug ("Stopping video source");
+ if (!gst_bin_remove (GST_BIN (self->priv->pipeline), self->priv->videosrc))
+ g_warning ("Could not remove video src from pipeline");
+
state_ret = gst_element_set_state (self->priv->videosrc, GST_STATE_NULL);
if (state_ret == GST_STATE_CHANGE_FAILURE)
@@ -559,6 +611,14 @@
gst_object_unref (pad);
}
+ else if (TP_STREAM_ENGINE_IS_AUDIO_STREAM (sestream))
+ {
+ g_mutex_lock (self->priv->mutex);
+ self->priv->audio_streams = g_list_remove (self->priv->audio_streams,
+ sestream);
+ g_mutex_unlock (self->priv->mutex);
+ }
+
g_object_unref (sestream);
g_object_set_data (G_OBJECT (stream), "se-stream", NULL);
}
@@ -586,6 +646,134 @@
g_free (channel_path);
}
+static void
+remove_audio_object (gpointer data, GObject *where_the_obj_was)
+{
+ TpStreamEngine *self = data;
+
+ g_mutex_lock (self->priv->mutex);
+ g_ptr_array_remove (self->priv->audio_objects, where_the_obj_was);
+ g_mutex_unlock (self->priv->mutex);
+}
+
+static void
+audio_pad_linked (GstPad *pad, GstPad *peer, TpStreamEngine *self);
+
+static gboolean
+insert_audio_object_locked (TpStreamEngine *self, gpointer object)
+{
+ guint i;
+ pthread_t thread;
+
+ for (i = 0; i < self->priv->audio_objects->len; i++)
+ if (g_ptr_array_index (self->priv->audio_objects, i) == object)
+ return FALSE;
+
+ g_ptr_array_add (self->priv->audio_objects, object);
+ g_object_weak_ref (G_OBJECT (object), remove_audio_object, self);
+
+ thread = GPOINTER_TO_UINT (g_hash_table_lookup (self->priv->object_threads,
+ object));
+ if (thread)
+ setup_realtime_thread (thread);
+
+ return TRUE;
+}
+
+static void
+add_audio_pad (TpStreamEngine *self, GstPad *pad)
+{
+ GstElement *el;
+
+ insert_audio_object_locked (self, pad);
+
+ el = gst_pad_get_parent_element (pad);
+
+ if (el)
+ {
+ insert_audio_object_locked (self, el);
+ gst_object_unref (el);
+ }
+
+ if (gst_pad_get_direction(pad) == GST_PAD_SINK)
+ g_signal_connect (pad, "linked", G_CALLBACK (audio_pad_linked), self);
+}
+
+static void
+audio_pad_iter (gpointer data, gpointer user_data)
+{
+ TpStreamEngine *self = user_data;
+ GstPad *pad = data;
+ GstPad *peerpad = gst_pad_get_peer (pad);
+
+ add_audio_pad (self, pad);
+
+ if (peerpad)
+ {
+ GstIterator *iter;
+ add_audio_pad (self, peerpad);
+
+ iter = gst_pad_iterate_internal_links (peerpad);
+ while (gst_iterator_foreach (iter, audio_pad_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+ gst_iterator_free (iter);
+
+ gst_object_unref (peerpad);
+ }
+}
+
+static void
+audio_pad_linked (GstPad *pad, GstPad *peer, TpStreamEngine *self)
+{
+ GstIterator *iter = gst_pad_iterate_internal_links (pad);
+
+ g_mutex_lock (self->priv->mutex);
+ add_audio_pad (self, peer);
+
+ while (gst_iterator_foreach (iter, audio_pad_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+
+ gst_iterator_free (iter);
+ g_mutex_unlock (self->priv->mutex);
+}
+
+static void
+audio_pad_internal_links_iter (gpointer data, gpointer user_data)
+{
+ TpStreamEngine *self = user_data;
+ GstPad *pad = data;
+ GstIterator *iter;
+
+ iter = gst_pad_iterate_internal_links (pad);
+ while (gst_iterator_foreach (iter, audio_pad_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+ gst_iterator_free (iter);
+}
+
+static void
+audio_sink_added_cb (TpStreamEngineAudioStream *audiostream,
+ GstElement *sink, TpStreamEngine *self)
+{
+ GstIterator *iter;
+
+ g_mutex_lock (self->priv->mutex);
+
+ iter = gst_element_iterate_sink_pads (sink);
+ while (gst_iterator_foreach (iter, audio_pad_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+
+ gst_iterator_resync (iter);
+ while (gst_iterator_foreach (iter, audio_pad_internal_links_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+ gst_iterator_free (iter);
+
+ g_mutex_unlock (self->priv->mutex);
+}
static void
channel_stream_created (TfChannel *chan G_GNUC_UNUSED,
@@ -600,6 +788,10 @@
if (media_type == TP_MEDIA_STREAM_TYPE_AUDIO)
{
TpStreamEngineAudioStream *audiostream;
+ GstIterator *iter;
+ GstElement *src;
+
+ g_object_set (stream, "tos", IPTOS_LOWDELAY, NULL);
audiostream = tp_stream_engine_audio_stream_new (stream,
GST_BIN (self->priv->pipeline), &error);
@@ -613,12 +805,39 @@
}
g_clear_error (&error);
g_object_set_data (G_OBJECT (stream), "se-stream", audiostream);
+
+ g_mutex_lock (self->priv->mutex);
+ self->priv->audio_streams = g_list_prepend (self->priv->audio_streams,
+ audiostream);
+ g_mutex_unlock (self->priv->mutex);
+
+ g_object_get (audiostream, "src", &src, NULL);
+
+ g_mutex_lock (self->priv->mutex);
+ iter = gst_element_iterate_src_pads (src);
+ while (gst_iterator_foreach (iter, audio_pad_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+
+ gst_iterator_resync (iter);
+ while (gst_iterator_foreach (iter, audio_pad_internal_links_iter, self) ==
+ GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+ gst_iterator_free (iter);
+ g_mutex_unlock (self->priv->mutex);
+
+ gst_object_unref (src);
+
+ g_signal_connect (audiostream, "sink-added",
+ G_CALLBACK (audio_sink_added_cb), self);
}
else if (media_type == TP_MEDIA_STREAM_TYPE_VIDEO)
{
TpStreamEngineVideoStream *videostream = NULL;
GstPad *pad;
+ g_object_set (stream, "tos", IPTOS_THROUGHPUT, NULL);
+
pad = gst_element_get_request_pad (self->priv->videotee, "src%d");
videostream = tp_stream_engine_video_stream_new (stream,
@@ -767,6 +986,97 @@
}
static gboolean
+reset_failcount (gpointer data)
+{
+ TpStreamEngine *self = TP_STREAM_ENGINE (data);
+
+ self->priv->failcount = 0;
+ self->priv->reset_failcount_id = 0;
+
+ return FALSE;
+}
+
+static gboolean
+restart_pipeline (gpointer data)
+{
+ TpStreamEngine *self = TP_STREAM_ENGINE (data);
+ GstStateChangeReturn ret;
+ GList *item;
+
+ if (self->priv->reset_failcount_id)
+ {
+ g_source_remove (self->priv->reset_failcount_id);
+ self->priv->reset_failcount_id = 0;
+ }
+
+ self->priv->failcount++;
+
+ ret = gst_element_set_state (self->priv->pipeline, GST_STATE_NULL);
+ g_assert (ret != GST_STATE_CHANGE_FAILURE);
+ ret = gst_element_set_state (self->priv->videosrc, GST_STATE_NULL);
+ g_assert (ret != GST_STATE_CHANGE_FAILURE);
+
+ g_mutex_lock (self->priv->mutex);
+ for (item = self->priv->audio_streams; item ; item = item->next)
+ {
+ if (!tp_stream_engine_audio_stream_set_playing (
+ TP_STREAM_ENGINE_AUDIO_STREAM (item->data), FALSE))
+ {
+ g_mutex_unlock (self->priv->mutex);
+ goto fail;
+ }
+ }
+ g_mutex_unlock (self->priv->mutex);
+
+ ret = gst_element_set_state (self->priv->pipeline, GST_STATE_PLAYING);
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ goto fail;
+ if (self->priv->video_source_use_count)
+ {
+ gst_element_set_state (self->priv->videosrc, GST_STATE_PLAYING);
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ goto fail;
+ }
+
+ g_mutex_lock (self->priv->mutex);
+ for (item = self->priv->audio_streams; item ; item = item->next)
+ {
+ if (!tp_stream_engine_audio_stream_set_playing (
+ TP_STREAM_ENGINE_AUDIO_STREAM (item->data), TRUE))
+ {
+ g_mutex_unlock (self->priv->mutex);
+ goto fail;
+ }
+ }
+ g_mutex_unlock (self->priv->mutex);
+
+ self->priv->restart_pipeline_id = 0;
+ self->priv->reset_failcount_id =
+ g_timeout_add_seconds (4, reset_failcount, self);
+
+
+ return FALSE;
+
+ fail:
+
+ g_warning ("Failed to restart the pipeline after an error");
+
+ if (self->priv->failcount > 5)
+ {
+ error_all_streams (self, "Could not restart the pipeline after an error");
+ g_error ("Failed five times to restart the pipeline after an error");
+ return FALSE;
+ }
+
+ if (!self->priv->restart_pipeline_id)
+ self->priv->restart_pipeline_id = g_timeout_add (200, restart_pipeline,
+ self);
+
+
+ return TRUE;
+}
+
+static gboolean
bus_async_handler (GstBus *bus G_GNUC_UNUSED,
GstMessage *message,
gpointer data)
@@ -776,31 +1086,30 @@
GError *error = NULL;
gchar *error_string;
guint i;
- GstElement *source = GST_ELEMENT (GST_MESSAGE_SRC (message));
+ GstObject *source = GST_MESSAGE_SRC (message);
gchar *name = NULL;
-
for (i = 0; i < priv->channels->len; i++)
if (tf_channel_bus_message (
g_ptr_array_index (priv->channels, i), message))
return TRUE;
- name = gst_element_get_name (source);
+ name = gst_object_get_name (source);
switch (GST_MESSAGE_TYPE (message))
{
case GST_MESSAGE_ERROR:
gst_message_parse_error (message, &error, &error_string);
- error_all_streams (engine, error->message);
- g_error ("%s: got error from %s: %s: %s (%d %d), stopping pipeline",
+ //error_all_streams (engine, error->message);
+
+ g_warning ("%s: got error from %s: %s: %s (%d %d), stopping pipeline",
G_STRFUNC, name, error->message, error_string,
error->domain, error->code);
- gst_element_set_state (engine->priv->pipeline, GST_STATE_NULL);
- gst_element_set_state (engine->priv->videosrc, GST_STATE_NULL);
- gst_element_set_state (engine->priv->pipeline, GST_STATE_PLAYING);
+ if (priv->restart_pipeline_id == 0)
+ restart_pipeline (engine);
g_free (error_string);
g_error_free (error);
@@ -826,66 +1135,136 @@
return TRUE;
}
-static GstBusSyncReply
-bus_sync_handler (GstBus *bus G_GNUC_UNUSED, GstMessage *message, gpointer data)
+static void
+setup_realtime_thread (pthread_t thread)
{
- TpStreamEngine *self = TP_STREAM_ENGINE (data);
- GList *item;
- gboolean handled = FALSE;
-
- if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
- return GST_BUS_PASS;
+ struct sched_param param;
+ gchar buf[128];
- if (!gst_structure_has_name (message->structure, "prepare-xwindow-id"))
- return GST_BUS_PASS;
-
-
- g_mutex_lock (self->priv->mutex);
-
- if (self->priv->preview)
+ param.sched_priority = 5;
+ if (pthread_setschedparam (thread, SCHED_FIFO, ¶m))
{
- handled = tp_stream_engine_video_sink_bus_sync_message (
- TP_STREAM_ENGINE_VIDEO_SINK (self->priv->preview), message);
- if (handled)
- goto done;
+ strerror_r (errno, buf, 128);
+ g_warning ("Could not set sched_param: %s", buf);
}
+}
- for (item = g_list_first (self->priv->preview_sinks);
- item && !handled;
- item = g_list_next (item))
- {
- TpStreamEngineVideoSink *preview =
- TP_STREAM_ENGINE_VIDEO_SINK (item->data);
+static void
+enter_thread (TpStreamEngine *self, GstObject *src, GstElement *owner)
+{
+ pthread_t thread = pthread_self ();
+ guint i;
- handled = tp_stream_engine_video_sink_bus_sync_message (preview, message);
- if (handled)
- goto done;
- }
+ g_mutex_lock (self->priv->mutex);
+ g_hash_table_insert (self->priv->object_threads, src,
+ GINT_TO_POINTER (thread));
- for (item = g_list_first (self->priv->output_sinks);
- item && !handled;
- item = g_list_next (item))
- {
- TpStreamEngineVideoSink *output =
- TP_STREAM_ENGINE_VIDEO_SINK (item->data);
+ for (i = 0; i < self->priv->audio_objects->len; i++)
+ if (g_ptr_array_index (self->priv->audio_objects, i) == src)
+ {
+ setup_realtime_thread (thread);
+ break;
+ }
- handled = tp_stream_engine_video_sink_bus_sync_message (output,
- message);
- if (handled)
- goto done;
- }
+ g_mutex_unlock (self->priv->mutex);
+}
+
+static void
+leave_thread (TpStreamEngine *self, GstObject *src, GstElement *owner)
+{
+ pthread_t thread = pthread_self ();
+ struct sched_param param;
- done:
+ g_mutex_lock (self->priv->mutex);
+ g_hash_table_remove (self->priv->object_threads, src);
g_mutex_unlock (self->priv->mutex);
+ param.sched_priority = 0;
+ pthread_setschedparam (thread, SCHED_OTHER, ¶m);
+}
+
+static GstBusSyncReply
+bus_sync_handler (GstBus *bus G_GNUC_UNUSED, GstMessage *message, gpointer data)
+{
+ TpStreamEngine *self = TP_STREAM_ENGINE (data);
- if (handled)
+ switch (GST_MESSAGE_TYPE (message))
{
- gst_message_unref (message);
- return GST_BUS_DROP;
+ case GST_MESSAGE_ELEMENT:
+ {
+ GList *item;
+ gboolean handled = FALSE;
+
+ if (!gst_structure_has_name (message->structure, "prepare-xwindow-id"))
+ return GST_BUS_PASS;
+
+ g_mutex_lock (self->priv->mutex);
+
+ if (self->priv->preview)
+ handled = tp_stream_engine_video_sink_bus_sync_message (
+ TP_STREAM_ENGINE_VIDEO_SINK (self->priv->preview), message);
+ if (handled)
+ goto done;
+
+ for (item = g_list_first (self->priv->preview_sinks);
+ item && !handled;
+ item = g_list_next (item))
+ {
+ TpStreamEngineVideoSink *preview = item->data;
+
+ handled = tp_stream_engine_video_sink_bus_sync_message (preview, message);
+ if (handled)
+ break;
+ }
+
+ if (!handled)
+ {
+ for (item = g_list_first (self->priv->output_sinks);
+ item && !handled;
+ item = g_list_next (item))
+ {
+ TpStreamEngineVideoSink *output = item->data;
+
+ handled = tp_stream_engine_video_sink_bus_sync_message (output,
+ message);
+ if (handled)
+ break;
+ }
+ }
+ done:
+ g_mutex_unlock (self->priv->mutex);
+
+ if (handled)
+ {
+ gst_message_unref (message);
+ return GST_BUS_DROP;
+ }
+ }
+ break;
+ case GST_MESSAGE_STREAM_STATUS:
+ {
+ GstStreamStatusType type;
+ GstElement *owner;
+
+ gst_message_parse_stream_status (message, &type, &owner);
+
+ switch (type)
+ {
+ case GST_STREAM_STATUS_TYPE_ENTER:
+ enter_thread (self, GST_MESSAGE_SRC (message), owner);
+ break;
+ case GST_STREAM_STATUS_TYPE_LEAVE:
+ leave_thread (self, GST_MESSAGE_SRC (message), owner);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ break;
}
- else
- return GST_BUS_PASS;
+ return GST_BUS_PASS;
}
static void
@@ -923,7 +1302,7 @@
if (videosrc != NULL)
{
- g_debug ("using %s as video source", GST_ELEMENT_NAME (videosrc));
+ g_debug ("using %s as video source", GST_OBJECT_NAME (videosrc));
}
else
{
@@ -957,17 +1336,11 @@
gst_element_set_locked_state (videosrc, TRUE);
- if (!gst_bin_add (GST_BIN (priv->pipeline), videosrc))
- g_error ("Could not add videosrc to pipeline");
-
tee = gst_element_factory_make ("tee", "videotee");
g_assert (tee);
if (!gst_bin_add (GST_BIN (priv->pipeline), tee))
g_error ("Could not add tee to pipeline");
- priv->videosrc = videosrc;
- priv->videotee = tee;
-
#if 0
/* <wtay> Tester_, yes, videorate does not play nice with live pipelines */
tmp = gst_element_factory_make ("videorate", NULL);
@@ -988,10 +1361,13 @@
g_object_set (capsfilter, "caps", filter, NULL);
gst_caps_unref (filter);
- ret = gst_element_link (videosrc, capsfilter);
- g_assert (ret);
ret = gst_element_link (capsfilter, tee);
g_assert (ret);
+
+ priv->capsfilter = capsfilter;
+ priv->videosrc = gst_object_ref (videosrc);
+ priv->videotee = tee;
+
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/telepathy-stream-engine-0.5.9/src/videosink.c new/telepathy-stream-engine-0.5.11/src/videosink.c
--- old/telepathy-stream-engine-0.5.9/src/videosink.c 2009-06-03 18:39:07.000000000 +0200
+++ new/telepathy-stream-engine-0.5.11/src/videosink.c 2009-07-25 21:49:21.000000000 +0200
@@ -474,6 +474,7 @@
{
GstElement *src;
gulong window_id;
+ gboolean found;
};
static void
@@ -482,8 +483,10 @@
GstXOverlay *xov = GST_X_OVERLAY (data);
struct xid_data *xiddata = (struct xid_data *) user_data;
- if (GST_ELEMENT_CAST(xov) == xiddata->src)
+ if (GST_ELEMENT_CAST(xov) == xiddata->src) {
gst_x_overlay_set_xwindow_id (xov, xiddata->window_id);
+ xiddata->found = TRUE;
+ }
}
gboolean
@@ -492,7 +495,6 @@
GstMessage *message)
{
const GstStructure *s;
- gboolean found = FALSE;
GstIterator *it = NULL;
struct xid_data xiddata;
@@ -505,6 +507,7 @@
xiddata.src = GST_ELEMENT (GST_MESSAGE_SRC (message));
xiddata.window_id = self->priv->window_id;
+ xiddata.found = FALSE;
it = gst_bin_iterate_all_by_interface (GST_BIN (self->priv->sink),
GST_TYPE_X_OVERLAY);
@@ -513,5 +516,5 @@
gst_iterator_resync (it);
gst_iterator_free (it);
- return found;
+ return xiddata.found;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org