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

Re: Bug#675971: patches for fixing RC bug, intent to upload NMU



On Sun, 07 Oct 2012 16:57:51 +0200, gregor herrmann wrote:

> Still, I'd appreciate a quick look by a CTTE member to check if this
> implements their decision correctly, and especially a pre-approval of
> the RT, since this is targetted at wheezy (please note that the
> versions in wheezy and sid are already different, and this patch
> applies on top of the version in sid). -- Thanks in advance!

I'm attaching the diff between the versions in wheezy and the version
in sid + the proposed patch for easier reviewing.

Cheers,
gregor

-- 
 .''`.  Homepage: http://info.comodo.priv.at/ - OpenPGP key 0xBB3A68018649AA06
 : :' : Debian GNU/Linux user, admin, and developer  -  http://www.debian.org/
 `. `'  Member of VIBE!AT & SPI, fellow of the Free Software Foundation Europe
   `-   NP: Donovan: Dignity Of Man
diff -Nru mumble-1.2.3-348-g317f5a0/debian/MurmurPHP.ini mumble-1.2.3-349-g315b5f5/debian/MurmurPHP.ini
--- mumble-1.2.3-348-g317f5a0/debian/MurmurPHP.ini	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/MurmurPHP.ini	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-ice.slice=/usr/share/slice/Murmur.ice
diff -Nru mumble-1.2.3-348-g317f5a0/debian/changelog mumble-1.2.3-349-g315b5f5/debian/changelog
--- mumble-1.2.3-348-g317f5a0/debian/changelog	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/changelog	2012-10-14 18:37:03.000000000 +0200
@@ -1,3 +1,72 @@
+mumble (1.2.3-349-g315b5f5-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix "Cannot communicate with the vast majority of Mumble servers due
+    to lack of required baseline codec":
+    re-enable using the bundled celt library:
+       debian/patches/series:
+         - add 07-use-embedded-celt-baseline patch
+       debian/patches/07-use-embedded-celt-baseline:
+         - build Celt 0.7.1 and not 0.11.0
+       debian/mumble.install:
+         - ship Celt 0.7.1 library from the embedded source
+       debian/rules:
+         - re-enable Celt using the bundled 0.7.1 version
+       debian/patches/20-add-opus-threshold-option:
+         - fix src/murmur/Meta.cpp to set default iOpusThreshold=100 to only
+           switch from Celt to Opus if 100% of connected clients support Opus
+           (instead of 1%)
+         - fix murmur.ini example for opusthreshold option to =100
+           (instead of =1)
+         - add #opusthreshold=100 comments to murmur.ini.system (shipped as
+           etc/mumble-server.ini) to match murmur.ini example    
+    Closes: #675971.
+    This implements the TC decision in #682010.
+    [Thanks to Gregor Herrmann for his help and guidance.]
+
+ -- Christopher Knadle <chris.knadle@coredump.us>  Thu, 04 Oct 2012 11:45:05 -0400
+
+mumble (1.2.3-349-g315b5f5-2) unstable; urgency=low
+
+  * Drop the hard dep on boost-1.46, that's been removed now.  Closes: #678759
+    Drop the | dep on alternative boost, since that's what got this package
+    overlooked when people were removing boost-1.46.
+
+  * Drop the | dep on libgl-dev, that's been gone a long time now too and
+    leaves us vulnerable to a similar problem.
+
+  * Drop the mumble-server-web package altogether.  Upstream reports that it
+    is unmaintained and "pretty useless anyway", which seems to be well backed
+    up by the fact that a call to Ice_intversion() was added in March 2010,
+    and that function has never existed in any version of zeroc-ice ever.
+    A function named Ice_intVersion was added to -ice 3.2.1 though ...
+    Since it's taken this long for anyone to notice, we can be pretty sure that
+    there aren't any actual users of it.  Closes: #676815, #676816
+
+  * Build-Depend on the unfycked version of zeroc-ice, so the ABI broken one
+    doesn't accidentally get used by an out of date buildd.  Closes: #675955
+    Force building with gcc-4.6, since that's required for zeroc-ice deps now,
+    until they get their act together and write some actually legal code.
+
+  * Cherry-pick the upstream patches to fix the "audio glitches", and provide
+    codec thresholds and warnings.  Closes: #675971 since it fixes the only
+    actual bug reported there.
+
+  * Drop the watch file, since this has been building snapshots from git now
+    since 1.2.3-3 (and before).
+
+ -- Ron Lee <ron@debian.org>  Sun, 08 Jul 2012 06:18:50 +0930
+
+mumble (1.2.3-349-g315b5f5-1) unstable; urgency=low
+
+  * Adopt the package.  Closes: #674719
+  * Drop the dependency on the celt package.  Closes: #674650
+  * Add the upstream patch to enable opus support.
+  * Explicitly disable the bundled libs, don't rely on system lib detection
+    doing that as a side-effect.
+
+ -- Ron Lee <ron@debian.org>  Mon, 04 Jun 2012 03:56:35 +0930
+
 mumble (1.2.3-348-g317f5a0-1) unstable; urgency=low
 
   * New upstream snapshot from 20.05.2012.
diff -Nru mumble-1.2.3-348-g317f5a0/debian/control mumble-1.2.3-349-g315b5f5/debian/control
--- mumble-1.2.3-348-g317f5a0/debian/control	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/control	2012-07-08 19:42:05.000000000 +0200
@@ -1,28 +1,26 @@
 Source: mumble
 Section: sound
 Priority: optional
-Homepage: http://mumble.sourceforge.net/
-Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
-Uploaders: Patrick Matthäi <pmatthaei@debian.org>,
- Thorvald Natvig <thorvald@debian.org>
-Build-Depends: debhelper (>= 7.0.8),
+Maintainer: Ron Lee <ron@debian.org>
+Uploaders: Thorvald Natvig <thorvald@debian.org>
+Build-Depends: debhelper (>= 7.0.8), g++-4.6,
  po-debconf,
- libboost1.46-dev | libboost-dev (>= 1.38.0),
- libboost-python1.46-dev | libboost-python-dev (>= 1.38.0),
+ libboost-dev (>= 1.42),
+ libboost-python-dev (>= 1.42),
  libqt4-dev (>= 4.5.0),
  hardening-wrapper,
- libgl1-mesa-dev | libgl-dev,
+ libgl1-mesa-dev,
  libasound2-dev,
  libpulse-dev,
  libogg-dev,
  libspeex-dev,
  libspeexdsp-dev,
- libcelt-dev (>= 0.7.0),
+ libopus-dev,
  libsndfile1-dev,
  libssl-dev,
- libzeroc-ice34-dev | libzeroc-ice33-dev | libzeroc-ice32-dev | libzeroc-ice-dev,
- ice34-translators | ice33-translators | ice32-translators | ice-translators,
- ice34-slice | ice33-slice | ice32-slice | ice-slice,
+ libzeroc-ice34-dev (>= 3.4.2-8.1),
+ ice34-translators (>= 3.4.2-8.1),
+ ice34-slice (>= 3.4.2-8.1),
  libg15daemon-client-dev,
  libspeechd-dev,
  protobuf-compiler,
@@ -30,15 +28,15 @@
  libavahi-compat-libdnssd-dev,
  libxi-dev,
  libcap-dev [linux-any]
-Standards-Version: 3.9.3
-Vcs-Svn: svn://svn.debian.org/pkg-voip/mumble/trunk/
-Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-voip/mumble/
+Standards-Version: 3.9.3.1
+Homepage: http://mumble.sourceforge.net/
+Vcs-Git: git://git.debian.org/users/ron/mumble.git
+Vcs-Browser: http://git.debian.org/?p=users/ron/mumble.git;a=summary
 
 Package: mumble
 Architecture: any
 Depends: ${shlibs:Depends},
  ${misc:Depends},
- libcelt0 (>= 0.7.0) | libcelt0-0 (>= 0.7.1~),
  libqt4-sql-sqlite,
  lsb-release
 Recommends: speech-dispatcher
@@ -87,21 +85,3 @@
  .
  This package contains the debugging symbols for the 'mumble' and
  'mumble-server' packages.
-
-Package: mumble-server-web
-Architecture: all
-Depends: ${misc:Depends},
- ${perl:Depends},
- mumble-server (>= ${binary:Version}),
- apache2,
- exim4 | mail-transport-agent,
- libnet-dbus-perl,
- libcgi-session-perl,
- libhtml-template-perl,
- php-zeroc-ice,
- ice34-translators | ice33-translators | ice32-translators | ice-translators,
- ice34-slice | ice33-slice | ice32-slice | ice-slice
-Description: Web scripts for mumble-server
- Murmur (in the package mumble-server) is the VoIP server component for
- Mumble. This package contains web scripts for registering users, uploading
- custom textures and showing a list of currently connected users.
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.README.Debian mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.README.Debian
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.README.Debian	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.README.Debian	1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-If you have got Apache running, you can get a server list on:
-
-	http://localhost/mumble-server/
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.conf mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.conf
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.conf	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.conf	1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-Alias /mumble-server /usr/share/mumble-server-web/www/
-
-<Directory /usr/share/mumble-server-web/www/>
-	Options FollowSymLinks ExecCGI
-	AllowOverride None
-	AddHandler cgi-script .cgi
-	DirectoryIndex index.php
-	Order allow,deny
-	Allow from all
-</Directory>
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.dirs mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.dirs
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.dirs	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.dirs	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-usr/share/mumble-server-web/www
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.install mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.install
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.install	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.install	1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-debian/MurmurPHP.ini etc/php5/conf.d
-debian/mumble-server-web.conf etc/apache2/conf.d
-scripts/weblist.php usr/share/mumble-server-web/www
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.links mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.links
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.links	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.links	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-usr/share/mumble-server-web/www/weblist.php usr/share/mumble-server-web/www/index.php
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.postinst mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.postinst
--- mumble-1.2.3-348-g317f5a0/debian/mumble-server-web.postinst	2012-05-24 20:33:04.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble-server-web.postinst	1970-01-01 01:00:00.000000000 +0100
@@ -1,35 +0,0 @@
-#! /bin/sh
-# postinst script for mumble-server-web
-
-set -e
-
-# summary of how this script can be called:
-#        * <postinst> `configure' <most-recently-configured-version>
-#        * <old-postinst> `abort-upgrade' <new version>
-#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-#          <new-version>
-#        * <postinst> `abort-remove'
-#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-#          <failed-install-package> <version> `removing'
-#          <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-case "$1" in
-	configure)
-		# Restart apache2 to load new config
-		invoke-rc.d --quiet apache2 reload
-	;;
-
-	abort-upgrade|abort-remove|abort-deconfigure)
-	;;
-
-	*)
-		echo "postinst called with unknown argument \`$1'" >&2
-		exit 1
-	;;
-esac
-
-#DEBHELPER#
-
-exit 0
diff -Nru mumble-1.2.3-348-g317f5a0/debian/mumble.install mumble-1.2.3-349-g315b5f5/debian/mumble.install
--- mumble-1.2.3-348-g317f5a0/debian/mumble.install	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/mumble.install	2012-10-14 18:36:54.000000000 +0200
@@ -1,6 +1,6 @@
 release/mumble usr/bin/
 release/libmumble.so* usr/lib/mumble/
-#release/libcelt0.so.?.?.? usr/lib/mumble/
+release/libcelt0.so.?.?.? usr/lib/mumble/
 release/plugins/lib*.so usr/lib/mumble/
 icons/mumble.xpm usr/share/pixmaps/
 icons/mumble.svg usr/share/icons/hicolor/scalable/apps/
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/07-use-embedded-celt-baseline mumble-1.2.3-349-g315b5f5/debian/patches/07-use-embedded-celt-baseline
--- mumble-1.2.3-348-g317f5a0/debian/patches/07-use-embedded-celt-baseline	1970-01-01 01:00:00.000000000 +0100
+++ mumble-1.2.3-349-g315b5f5/debian/patches/07-use-embedded-celt-baseline	2012-10-14 18:36:54.000000000 +0200
@@ -0,0 +1,13 @@
+# build and bundle in only celt 0.7.1 if celt is embedded
+--- a/main.pro
++++ b/main.pro
+@@ -12,7 +12,8 @@
+     SUBDIRS *= speexbuild
+   }
+   !CONFIG(no-bundled-celt) {
+-    SUBDIRS *= celt-0.7.0-build celt-0.11.0-build
++    SUBDIRS *= celt-0.7.0-build
++    SUBDIRS -= celt-0.11.0-build
+   }
+ 
+   CONFIG(opus) {
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/10-use-celt-guard mumble-1.2.3-349-g315b5f5/debian/patches/10-use-celt-guard
--- mumble-1.2.3-348-g317f5a0/debian/patches/10-use-celt-guard	1970-01-01 01:00:00.000000000 +0100
+++ mumble-1.2.3-349-g315b5f5/debian/patches/10-use-celt-guard	2012-07-08 19:42:05.000000000 +0200
@@ -0,0 +1,430 @@
+diff --git a/src/mumble/Audio.cpp b/src/mumble/Audio.cpp
+index ef78f81..dc2352d 100644
+--- a/src/mumble/Audio.cpp
++++ b/src/mumble/Audio.cpp
+@@ -49,6 +49,7 @@ LoopUser LoopUser::lpLoopy;
+ CodecInit ciInit;
+ 
+ void CodecInit::initialize() {
++#ifdef USE_CELT
+ 	CELTCodec *codec = NULL;
+ 
+ 	codec = new CELTCodec070(QLatin1String("0.7.0"));
+@@ -103,12 +104,15 @@ void CodecInit::initialize() {
+ 			delete codec;
+ 		}
+ 	}
++#endif
+ }
+ 
+ void CodecInit::destroy() {
++#ifdef USE_CELT
+ 	foreach(CELTCodec *codec, g.qmCodecs)
+ 		delete codec;
+ 	g.qmCodecs.clear();
++#endif
+ }
+ 
+ #ifdef Q_CC_GNU
+@@ -123,6 +127,7 @@ extern "C" {
+ };
+ #endif
+ 
++#ifdef USE_CELT
+ CELTCodec::CELTCodec(const QString &version) {
+ 	bValid = false;
+ 	cmMode = NULL;
+@@ -311,6 +316,7 @@ int CELTCodec011::encode(CELTEncoder *st, const celt_int16 *pcm, unsigned char *
+ int CELTCodec011::decode_float(CELTDecoder *st, const unsigned char *data, int len, float *pcm) {
+ 	return celt_decode_float(st, data, len, pcm, SAMPLE_RATE / 100);
+ }
++#endif // USE_CELT
+ 
+ LoopUser::LoopUser() {
+ 	qsName = QLatin1String("Loopy");
+diff --git a/src/mumble/Audio.h b/src/mumble/Audio.h
+index 3aa851d..d91027a 100644
+--- a/src/mumble/Audio.h
++++ b/src/mumble/Audio.h
+@@ -32,7 +32,10 @@
+ #define AUDIO_H_
+ 
+ #include <stdint.h>
++
++#ifdef USE_CELT
+ #include <celt.h>
++#endif
+ 
+ #include <QtCore/QByteArray>
+ #include <QtCore/QLibrary>
+@@ -52,6 +55,7 @@
+ 
+ typedef QPair<QString,QVariant> audioDevice;
+ 
++#ifdef USE_CELT
+ class CELTCodec {
+ 	private:
+ 		Q_DISABLE_COPY(CELTCodec)
+@@ -139,6 +143,7 @@ class CELTCodec011 : public CELTCodec {
+ 		virtual int encode(CELTEncoder *st, const celt_int16 *pcm, unsigned char *compressed, int nbCompressedBytes);
+ 		virtual int decode_float(CELTDecoder *st, const unsigned char *data, int len, float *pcm);
+ };
++#endif  // USE_CELT
+ 
+ class LoopUser : public ClientUser {
+ 	private:
+diff --git a/src/mumble/AudioInput.cpp b/src/mumble/AudioInput.cpp
+index c663c3c..624e1df 100644
+--- a/src/mumble/AudioInput.cpp
++++ b/src/mumble/AudioInput.cpp
+@@ -100,10 +100,16 @@ AudioInput::AudioInput() : opusBuffer(g.s.iFramesPerPacket * (SAMPLE_RATE / 100)
+ 
+ 	g.iAudioBandwidth = getNetworkBandwidth(iAudioQuality, iAudioFrames);
+ 
++#ifdef USE_CELT
+ 	umtType = MessageHandler::UDPVoiceCELTAlpha;
++#else
++	umtType = MessageHandler::UDPVoiceOpus;
++#endif
+ 
++#ifdef USE_CELT
+ 	cCodec = NULL;
+ 	ceEncoder = NULL;
++#endif
+ 
+ 	iSampleRate = SAMPLE_RATE;
+ 	iFrameSize = SAMPLE_RATE / 100;
+@@ -166,9 +172,11 @@ AudioInput::~AudioInput() {
+ 		opus_encoder_destroy(opusState);
+ #endif
+ 
++#ifdef USE_CELT
+ 	if (ceEncoder) {
+ 		cCodec->celt_encoder_destroy(ceEncoder);
+ 	}
++#endif
+ 
+ 	foreach(short *buf, qlEchoFrames)
+ 		delete [] buf;
+@@ -610,6 +618,7 @@ bool AudioInput::selectCodec() {
+ 	}
+ 
+ 	if (!useOpus) {
++#ifdef USE_CELT
+ 		CELTCodec *switchto = NULL;
+ 		if ((!g.uiSession || (g.s.lmLoopMode == Settings::Local)) && (!g.qmCodecs.isEmpty())) {
+ 			// Use latest for local loopback
+@@ -640,6 +649,7 @@ bool AudioInput::selectCodec() {
+ 		}
+ 
+ 		if (!cCodec)
++#endif
+ 			return false;
+ 	}
+ 
+@@ -647,6 +657,7 @@ bool AudioInput::selectCodec() {
+ 	if (useOpus) {
+ 		umtType = MessageHandler::UDPVoiceOpus;
+ 	} else {
++#ifdef USE_CELT
+ 		if (!g.uiSession) {
+ 			umtType = MessageHandler::UDPVoiceCELTAlpha;
+ 		} else {
+@@ -659,6 +670,7 @@ bool AudioInput::selectCodec() {
+ 				qWarning() << "Couldn't find message type for codec version" << v;
+ 			}
+ 		}
++#endif
+ 	}
+ 
+ 	if (umtType != previousType) {
+@@ -688,6 +700,7 @@ int AudioInput::encodeOpusFrame(short *source, int size, unsigned char *buffer)
+ 
+ int AudioInput::encodeCELTFrame(short *psSource, unsigned char *buffer) {
+ 	int len = 0;
++#ifdef USE_CELT
+ 	if (!cCodec)
+ 		return len;
+ 
+@@ -699,7 +712,7 @@ int AudioInput::encodeCELTFrame(short *psSource, unsigned char *buffer) {
+ 	cCodec->celt_encoder_ctl(ceEncoder, CELT_SET_VBR_RATE(iAudioQuality));
+ 	len = cCodec->encode(ceEncoder, psSource, buffer, qMin(iAudioQuality / (8 * 100), 127));
+ 	iBitrate = len * 100 * 8;
+-
++#endif
+ 	return len;
+ }
+ 
+@@ -841,12 +854,15 @@ void AudioInput::encodeAudioFrame() {
+ 	if (!selectCodec())
+ 		return;
+ 
++#ifdef USE_CELT
+ 	if (umtType == MessageHandler::UDPVoiceCELTAlpha || umtType == MessageHandler::UDPVoiceCELTBeta) {
+ 		len = encodeCELTFrame(psSource, buffer);
+ 		if (len == 0)
+ 			return;
+ 		++iBufferedFrames;
+-	} else if (umtType == MessageHandler::UDPVoiceOpus) {
++	} else
++#endif
++	if (umtType == MessageHandler::UDPVoiceOpus) {
+ 		encoded = false;
+ 		opusBuffer.insert(opusBuffer.end(), psSource, psSource + iFrameSize);
+ 		++iBufferedFrames;
+diff --git a/src/mumble/AudioInput.h b/src/mumble/AudioInput.h
+index c7b8f98..1ffbf1d 100644
+--- a/src/mumble/AudioInput.h
++++ b/src/mumble/AudioInput.h
+@@ -117,8 +117,10 @@ class AudioInput : public QThread {
+ 		SpeexPreprocessState *sppPreprocess;
+ 		SpeexEchoState *sesEcho;
+ 
++#ifdef USE_CELT
+ 		CELTCodec *cCodec;
+ 		CELTEncoder *ceEncoder;
++#endif
+ 
+ 		int iAudioQuality;
+ 		int iAudioFrames;
+diff --git a/src/mumble/AudioOutputSpeech.cpp b/src/mumble/AudioOutputSpeech.cpp
+index c09dabc..5939fe6 100644
+--- a/src/mumble/AudioOutputSpeech.cpp
++++ b/src/mumble/AudioOutputSpeech.cpp
+@@ -48,8 +48,10 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Messag
+ 	umtType = type;
+ 	iMixerFreq = freq;
+ 
++#ifdef USE_CELT
+ 	cCodec = NULL;
+ 	cdDecoder = NULL;
++#endif
+ 	dsSpeex = NULL;
+ 	opusState = NULL;
+ 
+@@ -113,9 +115,12 @@ AudioOutputSpeech::~AudioOutputSpeech() {
+ 	if (opusState)
+ 		opus_decoder_destroy(opusState);
+ #endif
++#ifdef USE_CELT
+ 	if (cdDecoder) {
+ 		cCodec->celt_decoder_destroy(cdDecoder);
+-	} else if (dsSpeex) {
++	} else
++#endif
++	if (dsSpeex) {
+ 		speex_bits_destroy(&sbBits);
+ 		speex_decoder_destroy(dsSpeex);
+ 	}
+@@ -302,6 +307,7 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ 			if (! qlFrames.isEmpty()) {
+ 				QByteArray qba = qlFrames.takeFirst();
+ 
++#ifdef USE_CELT
+ 				if (umtType == MessageHandler::UDPVoiceCELTAlpha || umtType == MessageHandler::UDPVoiceCELTBeta) {
+ 					int wantversion = (umtType == MessageHandler::UDPVoiceCELTAlpha) ? g.iCodecAlpha : g.iCodecBeta;
+ 					if ((p == &LoopUser::lpLoopy) && (! g.qmCodecs.isEmpty())) {
+@@ -323,7 +329,9 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ 						cCodec->decode_float(cdDecoder, qba.isEmpty() ? NULL : reinterpret_cast<const unsigned char *>(qba.constData()), qba.size(), pOut);
+ 					else
+ 						memset(pOut, 0, sizeof(float) * iFrameSize);
+-				} else if (umtType == MessageHandler::UDPVoiceOpus) {
++				} else
++#endif
++				if (umtType == MessageHandler::UDPVoiceOpus) {
+ #ifdef USE_OPUS
+ 					decodedSamples = opus_decode_float(opusState, qba.isEmpty() ? NULL : reinterpret_cast<const unsigned char *>(qba.constData()), qba.size(), pOut, iAudioBufferSize, 0);
+ 					iOutputSize = static_cast<unsigned int>(ceilf(static_cast<float>(decodedSamples * iMixerFreq) / static_cast<float>(iSampleRate)));
+@@ -369,12 +377,15 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ 				if (qlFrames.isEmpty() && bHasTerminator)
+ 					nextalive = false;
+ 			} else {
++#ifdef USE_CELT
+ 				if (umtType == MessageHandler::UDPVoiceCELTAlpha || umtType == MessageHandler::UDPVoiceCELTBeta) {
+ 					if (cdDecoder)
+ 						cCodec->decode_float(cdDecoder, NULL, 0, pOut);
+ 					else
+ 						memset(pOut, 0, sizeof(float) * iFrameSize);
+-				} else if (umtType == MessageHandler::UDPVoiceOpus) {
++				} else
++#endif
++				if (umtType == MessageHandler::UDPVoiceOpus) {
+ #ifdef USE_OPUS
+ 					opus_decode_float(opusState, NULL, 0, pOut, iFrameSize, 0);
+ #endif
+diff --git a/src/mumble/AudioOutputSpeech.h b/src/mumble/AudioOutputSpeech.h
+index d123c8a..1199585 100644
+--- a/src/mumble/AudioOutputSpeech.h
++++ b/src/mumble/AudioOutputSpeech.h
+@@ -36,14 +36,20 @@
+ #include <speex/speex.h>
+ #include <speex/speex_resampler.h>
+ #include <speex/speex_jitter.h>
++
++#ifdef USE_CELT
+ #include <celt.h>
++#endif
+ 
+ #include <QtCore/QMutex>
+ 
+ #include "AudioOutputUser.h"
+ #include "Message.h"
+ 
++#ifdef USE_CELT
+ class CELTCodec;
++#endif
++
+ class ClientUser;
+ struct OpusDecoder;
+ 
+@@ -74,8 +80,10 @@ class AudioOutputSpeech : public AudioOutputUser {
+ 		JitterBuffer *jbJitter;
+ 		int iMissCount;
+ 
++#ifdef USE_CELT
+ 		CELTCodec *cCodec;
+ 		CELTDecoder *cdDecoder;
++#endif
+ 
+ 		OpusDecoder *opusState;
+ 
+diff --git a/src/mumble/Global.h b/src/mumble/Global.h
+index f50d8dd..d4669d8 100644
+--- a/src/mumble/Global.h
++++ b/src/mumble/Global.h
+@@ -54,7 +54,9 @@ class Overlay;
+ class LCD;
+ class BonjourClient;
+ class OverlayClient;
++#ifdef USE_CELT
+ class CELTCodec;
++#endif
+ 
+ class QNetworkAccessManager;
+ 
+@@ -92,7 +94,9 @@ public:
+ 	int iMaxBandwidth;
+ 	int iAudioBandwidth;
+ 	QDir qdBasePath;
++#ifdef USE_CELT
+ 	QMap<int, CELTCodec *> qmCodecs;
++#endif
+ 	int iCodecAlpha, iCodecBeta;
+ 	bool bPreferAlpha;
+ 	bool bOpus;
+diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp
+index 1ff8eb1..178f2de 100644
+--- a/src/mumble/MainWindow.cpp
++++ b/src/mumble/MainWindow.cpp
+@@ -1046,12 +1046,16 @@ static const QString currentCodec() {
+ 	if (g.bOpus)
+ 		return QLatin1String("Opus");
+ 
++#ifdef USE_CELT
+ 	int v = g.bPreferAlpha ? g.iCodecAlpha : g.iCodecBeta;
+ 	CELTCodec* cc = g.qmCodecs.value(v);
+ 	if (cc)
+ 		return QString::fromLatin1("CELT %1").arg(cc->version());
+ 	else
+ 		return QString::fromLatin1("CELT %1").arg(QString::number(v, 16));
++#else
++	return QLatin1String("None");
++#endif
+ }
+ 
+ void MainWindow::on_qaServerInformation_triggered() {
+diff --git a/src/mumble/Messages.cpp b/src/mumble/Messages.cpp
+index 8806c0d..2aabbda 100644
+--- a/src/mumble/Messages.cpp
++++ b/src/mumble/Messages.cpp
+@@ -735,6 +735,7 @@ void MainWindow::msgCodecVersion(const MumbleProto::CodecVersion &msg) {
+ 	g.bOpus = msg.opus();
+ #endif
+ 
++#ifdef USE_CELT
+ 	// Workaround for broken 1.2.2 servers
+ 	if (g.sh && g.sh->uiVersion == 0x010202 && alpha != -1 && alpha == beta) {
+ 		if (pref)
+@@ -768,6 +769,7 @@ void MainWindow::msgCodecVersion(const MumbleProto::CodecVersion &msg) {
+ 	} else {
+ 		warned = false;
+ 	}
++#endif
+ }
+ 
+ void MainWindow::msgUserStats(const MumbleProto::UserStats &msg) {
+diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp
+index b5bbc96..d0feb69 100644
+--- a/src/mumble/ServerHandler.cpp
++++ b/src/mumble/ServerHandler.cpp
+@@ -189,8 +189,10 @@ void ServerHandler::udpReady() {
+ 					accUDP(static_cast<double>(tTimestamp.elapsed() - t) / 1000.0);
+ 				}
+ 				break;
++#ifdef USE_CELT
+ 			case MessageHandler::UDPVoiceCELTAlpha:
+ 			case MessageHandler::UDPVoiceCELTBeta:
++#endif
+ 			case MessageHandler::UDPVoiceSpeex:
+ 			case MessageHandler::UDPVoiceOpus:
+ 				handleVoicePacket(msgFlags, pds, msgType);
+@@ -420,8 +422,10 @@ void ServerHandler::message(unsigned int msgType, const QByteArray &qbaMsg) {
+ 		PacketDataStream pds(qbaMsg.constData() + 1, qbaMsg.size());
+ 
+ 		switch (umsgType) {
++#ifdef USE_CELT
+ 			case MessageHandler::UDPVoiceCELTAlpha:
+ 			case MessageHandler::UDPVoiceCELTBeta:
++#endif
+ 			case MessageHandler::UDPVoiceSpeex:
+ 				handleVoicePacket(msgFlags, pds, umsgType);
+ 				break;
+@@ -539,9 +543,11 @@ void ServerHandler::serverConnectionConnected() {
+ 	foreach(const QString &qs, tokens)
+ 		mpa.add_tokens(u8(qs));
+ 
++#ifdef USE_CELT
+ 	QMap<int, CELTCodec *>::const_iterator i;
+ 	for (i=g.qmCodecs.constBegin(); i != g.qmCodecs.constEnd(); ++i)
+ 		mpa.add_celt_versions(i.key());
++#endif
+ #ifdef USE_OPUS
+ 	mpa.set_opus(true);
+ #else
+diff --git a/src/mumble/UserInformation.cpp b/src/mumble/UserInformation.cpp
+index af1dbe3..36fdde5 100644
+--- a/src/mumble/UserInformation.cpp
++++ b/src/mumble/UserInformation.cpp
+@@ -160,6 +160,7 @@ void UserInformation::update(const MumbleProto::UserStats &msg) {
+ 		qlVersion->setText(tr("%1 (%2)").arg(MumbleVersion::toString(mpv.version())).arg(u8(mpv.release())));
+ 		qlOS->setText(tr("%1 (%2)").arg(u8(mpv.os())).arg(u8(mpv.os_version())));
+ 	}
++#ifdef USE_CELT
+ 	if (msg.celt_versions_size() > 0) {
+ 		QStringList qsl;
+ 		for (int i=0;i<msg.celt_versions_size(); ++i) {
+@@ -172,6 +173,7 @@ void UserInformation::update(const MumbleProto::UserStats &msg) {
+ 		}
+ 		qlCELT->setText(qsl.join(tr(", ")));
+ 	}
++#endif
+ 	if (msg.has_opus()) {
+ 		qlOpus->setText(msg.opus() ? tr("Supported") : tr("Not Supported"));
+ 	}
+diff --git a/src/mumble/mumble_pch.hpp b/src/mumble/mumble_pch.hpp
+index d8c4dbd..2089c94 100644
+--- a/src/mumble/mumble_pch.hpp
++++ b/src/mumble/mumble_pch.hpp
+@@ -52,8 +52,12 @@
+ #define __int64_t __int64
+ #include <sndfile.h>
+ #undef __int64_t
++
++#ifdef USE_CELT
+ #include <celt.h>
+ #include <celt_header.h>
++#endif
++
+ #include <speex/speex.h>
+ #include <speex/speex_header.h>
+ #include <speex/speex_jitter.h>
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/15-fix-noise-in-opus-mode mumble-1.2.3-349-g315b5f5/debian/patches/15-fix-noise-in-opus-mode
--- mumble-1.2.3-348-g317f5a0/debian/patches/15-fix-noise-in-opus-mode	1970-01-01 01:00:00.000000000 +0100
+++ mumble-1.2.3-349-g315b5f5/debian/patches/15-fix-noise-in-opus-mode	2012-07-08 19:42:05.000000000 +0200
@@ -0,0 +1,31 @@
+diff --git a/src/mumble/AudioOutputSpeech.cpp b/src/mumble/AudioOutputSpeech.cpp
+index 5939fe6..e67fc87 100644
+--- a/src/mumble/AudioOutputSpeech.cpp
++++ b/src/mumble/AudioOutputSpeech.cpp
+@@ -334,8 +334,6 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ 				if (umtType == MessageHandler::UDPVoiceOpus) {
+ #ifdef USE_OPUS
+ 					decodedSamples = opus_decode_float(opusState, qba.isEmpty() ? NULL : reinterpret_cast<const unsigned char *>(qba.constData()), qba.size(), pOut, iAudioBufferSize, 0);
+-					iOutputSize = static_cast<unsigned int>(ceilf(static_cast<float>(decodedSamples * iMixerFreq) / static_cast<float>(iSampleRate)));
+-					resizeBuffer(iBufferFilled + iOutputSize);
+ #endif
+ 				} else {
+ 					if (qba.isEmpty()) {
+@@ -387,7 +385,7 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ #endif
+ 				if (umtType == MessageHandler::UDPVoiceOpus) {
+ #ifdef USE_OPUS
+-					opus_decode_float(opusState, NULL, 0, pOut, iFrameSize, 0);
++					decodedSamples = opus_decode_float(opusState, NULL, 0, pOut, iFrameSize, 0);
+ #endif
+ 				} else {
+ 					speex_decode(dsSpeex, NULL, pOut);
+@@ -410,7 +408,7 @@ bool AudioOutputSpeech::needSamples(unsigned int snum) {
+ 		}
+ nextframe:
+ 		spx_uint32_t inlen = decodedSamples;
+-		spx_uint32_t outlen = iOutputSize;
++		spx_uint32_t outlen = static_cast<unsigned int>(ceilf(static_cast<float>(decodedSamples * iMixerFreq) / static_cast<float>(iSampleRate)));
+ 		if (srs && bLastAlive)
+ 			speex_resampler_process_float(srs, 0, fResamplerBuffer, &inlen, pfBuffer + iBufferFilled, &outlen);
+ 		iBufferFilled += outlen;
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/20-add-opus-threshold-option mumble-1.2.3-349-g315b5f5/debian/patches/20-add-opus-threshold-option
--- mumble-1.2.3-348-g317f5a0/debian/patches/20-add-opus-threshold-option	1970-01-01 01:00:00.000000000 +0100
+++ mumble-1.2.3-349-g315b5f5/debian/patches/20-add-opus-threshold-option	2012-10-14 18:36:54.000000000 +0200
@@ -0,0 +1,162 @@
+diff --git a/scripts/murmur.ini b/scripts/murmur.ini
+index f941531..87d49fd 100644
+--- a/scripts/murmur.ini
++++ b/scripts/murmur.ini
+@@ -86,6 +86,10 @@ bandwidth=72000
+ # Maximum number of concurrent clients allowed.
+ users=100
+ 
++# Amount of users with Opus support needed to force Opus usage, in percent.
++# 0 = Always enable Opus, 100 = enable Opus if it's supported by all clients.
++#opusthreshold=100
++
+ # Regular expression used to validate channel names
+ # (note that you have to escape backslashes with \ )
+ #channelname=[ \\-=\\w\\#\\[\\]\\{\\}\\(\\)\\@\\|]+
+diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
+index 0d7a5ed..4b6be72 100644
+--- a/src/murmur/Messages.cpp
++++ b/src/murmur/Messages.cpp
+@@ -391,7 +391,9 @@ void Server::msgAuthenticate(ServerUser *uSource, MumbleProto::Authenticate &msg
+ 		mpsug.set_positional(qvSuggestPositional.toBool());
+ 	if (! qvSuggestPushToTalk.isNull())
+ 		mpsug.set_push_to_talk(qvSuggestPushToTalk.toBool());
+-	sendMessage(uSource, mpsug);
++	if (mpsug.ByteSize() > 0) {
++		sendMessage(uSource, mpsug);
++	}
+ 
+ 	log(uSource, "Authenticated");
+ 
+diff --git a/src/murmur/Meta.cpp b/src/murmur/Meta.cpp
+index dc55b3a..4333ae2 100644
+--- a/src/murmur/Meta.cpp
++++ b/src/murmur/Meta.cpp
+@@ -81,6 +81,8 @@ MetaParams::MetaParams() {
+ 	uiUid = uiGid = 0;
+ #endif
+ 
++	iOpusThreshold = 100;
++
+ 	qrUserName = QRegExp(QLatin1String("[-=\\w\\[\\]\\{\\}\\(\\)\\@\\|\\.]+"));
+ 	qrChannelName = QRegExp(QLatin1String("[ \\-=\\w\\#\\[\\]\\{\\}\\(\\)\\@\\|]+"));
+ 
+@@ -283,6 +285,8 @@ void MetaParams::read(QString fname) {
+ 	if (qvSuggestPushToTalk.toString().trimmed().isEmpty())
+ 		qvSuggestPushToTalk = QVariant();
+ 
++	iOpusThreshold = qsSettings->value("opusthreshold", iOpusThreshold).toInt();
++
+ #ifdef Q_OS_UNIX
+ 	qsName = qsSettings->value("uname").toString();
+ 	if (geteuid() == 0) {
+@@ -441,6 +445,7 @@ void MetaParams::read(QString fname) {
+ 	qmConfig.insert(QLatin1String("suggestversion"), qvSuggestVersion.isNull() ? QString() : qvSuggestVersion.toString());
+ 	qmConfig.insert(QLatin1String("suggestpositional"), qvSuggestPositional.isNull() ? QString() : qvSuggestPositional.toString());
+ 	qmConfig.insert(QLatin1String("suggestpushtotalk"), qvSuggestPushToTalk.isNull() ? QString() : qvSuggestPushToTalk.toString());
++	qmConfig.insert(QLatin1String("opusthreshold"), QString::number(iOpusThreshold));
+ }
+ 
+ Meta::Meta() {
+diff --git a/src/murmur/Meta.h b/src/murmur/Meta.h
+index 7ed0595..669e76c 100644
+--- a/src/murmur/Meta.h
++++ b/src/murmur/Meta.h
+@@ -60,6 +60,7 @@ struct MetaParams {
+ 	bool bRememberChan;
+ 	int iMaxTextMessageLength;
+ 	int iMaxImageMessageLength;
++	int iOpusThreshold;
+ 	bool bAllowHTML;
+ 	QString qsPassword;
+ 	QString qsWelcomeText;
+diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp
+index 547d699..f015bac 100644
+--- a/src/murmur/Server.cpp
++++ b/src/murmur/Server.cpp
+@@ -331,6 +331,7 @@ void Server::readParams() {
+ 	qvSuggestVersion = Meta::mp.qvSuggestVersion;
+ 	qvSuggestPositional = Meta::mp.qvSuggestPositional;
+ 	qvSuggestPushToTalk = Meta::mp.qvSuggestPushToTalk;
++	iOpusThreshold = Meta::mp.iOpusThreshold;
+ 
+ 	QString qsHost = getConf("host", QString()).toString();
+ 	if (! qsHost.isEmpty()) {
+@@ -393,6 +394,8 @@ void Server::readParams() {
+ 	if (qvSuggestPushToTalk.toString().trimmed().isEmpty())
+ 		qvSuggestPushToTalk = QVariant();
+ 
++	iOpusThreshold = getConf("opusthreshold", iOpusThreshold).toInt();
++
+ 	qrUserName=QRegExp(getConf("username", qrUserName.pattern()).toString());
+ 	qrChannelName=QRegExp(getConf("channelname", qrChannelName.pattern()).toString());
+ }
+@@ -503,6 +506,8 @@ void Server::setLiveConf(const QString &key, const QString &value) {
+ 		qvSuggestPositional = ! v.isNull() ? (v.isEmpty() ? QVariant() : v) : Meta::mp.qvSuggestPositional;
+ 	else if (key == "suggestpushtotalk")
+ 		qvSuggestPushToTalk = ! v.isNull() ? (v.isEmpty() ? QVariant() : v) : Meta::mp.qvSuggestPushToTalk;
++	else if (key == "opusthreshold")
++		iOpusThreshold = i ? i : Meta::mp.iOpusThreshold;
+ }
+ 
+ #ifdef USE_BONJOUR
+@@ -1648,8 +1653,9 @@ void Server::recheckCodecVersions() {
+ 
+ 	if (! users)
+ 		return;
+-		
+-	bool allHasOpus = (opus == users);
++
++	// Enable Opus if the number of users with Opus is higher than the threshold
++	bool enableOpus = ((opus * 100 / users) >= iOpusThreshold);
+ 
+ 	// Find the best possible codec most users support
+ 	int version = 0;
+@@ -1680,17 +1686,17 @@ void Server::recheckCodecVersions() {
+ 			iCodecAlpha = version;
+ 		else
+ 			iCodecBeta = version;
+-	} else if (bOpus == allHasOpus) {
++	} else if (bOpus == enableOpus) {
+ 		return;
+ 	}
+-	
+-	bOpus = allHasOpus;
+-	
++
++	bOpus = enableOpus;
++
+ 	MumbleProto::CodecVersion mpcv;
+ 	mpcv.set_alpha(iCodecAlpha);
+ 	mpcv.set_beta(iCodecBeta);
+ 	mpcv.set_prefer_alpha(bPreferAlpha);
+-	mpcv.set_opus(allHasOpus);
++	mpcv.set_opus(bOpus);
+ 	sendAll(mpcv);
+ 
+ 	log(QString::fromLatin1("CELT codec switch %1 %2 (prefer %3) (Opus %4)").arg(iCodecAlpha,0,16).arg(iCodecBeta,0,16).arg(bPreferAlpha ? iCodecAlpha : iCodecBeta,0,16).arg(bOpus));
+diff --git a/src/murmur/Server.h b/src/murmur/Server.h
+index 788eb89..66025de 100644
+--- a/src/murmur/Server.h
++++ b/src/murmur/Server.h
+@@ -132,6 +132,7 @@ class Server : public QThread {
+ 		bool bRememberChan;
+ 		int iMaxTextMessageLength;
+ 		int iMaxImageMessageLength;
++		int iOpusThreshold;
+ 		bool bAllowHTML;
+ 		QString qsPassword;
+ 		QString qsWelcomeText;
+--- a/scripts/murmur.ini.system
++++ b/scripts/murmur.ini.system
+@@ -86,6 +86,10 @@ bandwidth=72000
+ # Maximum number of concurrent clients allowed.
+ users=100
+ 
++# Amount of users with Opus support needed to force Opus usage, in percent.
++# 0 = Always enable Opus, 100 = enable Opus if it's supported by all clients.
++#opusthreshold=100
++
+ # Regular expression used to validate channel names
+ # (note that you have to escape backslashes with \ )
+ #channelname=[ \\-=\\w\\#\\[\\]\\{\\}\\(\\)\\@\\|]+
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/25-add-codec-warnings mumble-1.2.3-349-g315b5f5/debian/patches/25-add-codec-warnings
--- mumble-1.2.3-348-g317f5a0/debian/patches/25-add-codec-warnings	1970-01-01 01:00:00.000000000 +0100
+++ mumble-1.2.3-349-g315b5f5/debian/patches/25-add-codec-warnings	2012-07-08 19:42:05.000000000 +0200
@@ -0,0 +1,47 @@
+diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
+index 4b6be72..6310f89 100644
+--- a/src/murmur/Messages.cpp
++++ b/src/murmur/Messages.cpp
+@@ -201,6 +201,7 @@ void Server::msgAuthenticate(ServerUser *uSource, MumbleProto::Authenticate &msg
+ 	mpcrypt.set_client_nonce(std::string(reinterpret_cast<const char *>(uSource->csCrypt.decrypt_iv), AES_BLOCK_SIZE));
+ 	sendMessage(uSource, mpcrypt);
+ 
++	bool fake_celt_support = false;
+ 	if (msg.celt_versions_size() > 0) {
+ 		for (int i=0;i < msg.celt_versions_size(); ++i)
+ 			uSource->qlCodecs.append(msg.celt_versions(i));
+@@ -217,6 +219,12 @@ void Server::msgAuthenticate(ServerUser *uSource, MumbleProto::Authenticate &msg
+ 	mpcv.set_opus(bOpus);
+ 	sendMessage(uSource, mpcv);
+ 
++	if (!bOpus && uSource->bOpus && fake_celt_support) {
++		sendTextMessage(NULL, uSource, false, QLatin1String("<strong>WARNING:</strong> Your client doesn't support the CELT codec, you won't be able to talk to or hear most clients. Please make sure your client was built with CELT support."));
++	} else if (bOpus && !uSource->bOpus) {
++		sendTextMessage(NULL, uSource, false, QLatin1String("<strong>WARNING:</strong> Your client doesn't support the Opus codec, you won't be able to talk or hear anyone. Please upgrade to a client with Opus support."));
++	}
++
+ 	// Transmit channel tree
+ 	QQueue<Channel *> q;
+ 	QSet<Channel *> chans;
+diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp
+index f015bac..b1700fd 100644
+--- a/src/murmur/Server.cpp
++++ b/src/murmur/Server.cpp
+@@ -773,6 +773,8 @@ void Server::run() {
+ 					case MessageHandler::UDPVoiceSpeex:
+ 					case MessageHandler::UDPVoiceCELTAlpha:
+ 					case MessageHandler::UDPVoiceCELTBeta:
++						if (bOpus)
++							break;
+ 					case MessageHandler::UDPVoiceOpus: {
+ 							u->bUdp = true;
+ 							processMsg(u, buffer, len);
+@@ -1275,6 +1277,8 @@ void Server::message(unsigned int uiType, const QByteArray &qbaMsg, ServerUser *
+ 			case MessageHandler::UDPVoiceCELTAlpha:
+ 			case MessageHandler::UDPVoiceCELTBeta:
+ 			case MessageHandler::UDPVoiceSpeex:
++				if (bOpus)
++					break;
+ 			case MessageHandler::UDPVoiceOpus:
+ 				processMsg(u, buffer, l);
+ 				break;
diff -Nru mumble-1.2.3-348-g317f5a0/debian/patches/series mumble-1.2.3-349-g315b5f5/debian/patches/series
--- mumble-1.2.3-348-g317f5a0/debian/patches/series	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/patches/series	2012-10-14 18:36:54.000000000 +0200
@@ -1,2 +1,7 @@
 02-reject-with-ip-in-log.diff
 05-lsb-description.diff
+07-use-embedded-celt-baseline
+10-use-celt-guard
+15-fix-noise-in-opus-mode
+20-add-opus-threshold-option
+25-add-codec-warnings
diff -Nru mumble-1.2.3-348-g317f5a0/debian/rules mumble-1.2.3-349-g315b5f5/debian/rules
--- mumble-1.2.3-348-g317f5a0/debian/rules	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/rules	2012-10-14 18:36:54.000000000 +0200
@@ -18,12 +18,15 @@
 configure: configure-stamp
 configure-stamp:
 	dh_testdir
-	qmake-qt4 -recursive main.pro \
+	qmake-qt4 QMAKE_CXX=g++-4.6 QMAKE_CC=gcc-4.6 -recursive main.pro \
 	CONFIG*=release \
 	CONFIG*=symbols \
 	CONFIG*=no-embed-qt-translations \
 	CONFIG*=packaged \
 	CONFIG*=quiet-build-log \
+	CONFIG*=no-bundled-speex \
+	CONFIG*=bundled-celt \
+	DEFINES*=USE_CELT \
 	DEFINES*=NO_UPDATE_CHECK \
 	DEFINES*=PLUGIN_PATH=/usr/lib/mumble \
 	DEFINES*=MUMBLE_VERSION=$(MUMBLE_DEB_VERSION) \
@@ -31,7 +34,7 @@
 	DEFINES*=HAVE_ENDIAN_H
 	touch configure-stamp
 
-build: build-arch build-indep
+build: build-arch
 
 build-arch: build-arch-stamp
 
@@ -40,14 +43,13 @@
 	slice2html -I/usr/share/Ice-3.4.1/slice -I/usr/share/Ice-3.3.1/slice -I/usr/share/Ice/slice src/murmur/Murmur.ice --output-dir Ice
 	touch $@
 
-build-indep: build-indep-stamp
+build-indep:
 
-build-indep-stamp:
 
 clean:
 	dh_testdir
 	dh_testroot
-	rm -f build-arch-stamp build-indep-stamp configure-stamp
+	rm -f build-arch-stamp configure-stamp
 	[ ! -f Makefile ] || $(MAKE) distclean
 	[ ! -d gendoc ] || rm -rf Ice
 	rm -rf release debug
@@ -56,15 +58,7 @@
 	debconf-updatepo
 	dh_clean
 
-install: install-indep install-arch
-
-install-indep:
-	dh_testdir
-	dh_testroot
-	dh_prep
-	dh_installdirs -i
-	dh_install -i
-	install -m 0755 -D ./scripts/weblist.pl $(CURDIR)/debian/mumble-server-web/usr/share/mumble-server-web/www/weblist.cgi
+install: install-arch
 
 install-arch:
 	dh_testdir
@@ -95,22 +89,19 @@
 	dh_strip --dbg-package=mumble-dbg
 	dh_compress
 	dh_fixperms
-	dh_perl $(CURDIR)/debian/mumble-server-web/usr/lib/cgi-bin/mumble-server
 	dh_installdeb
 	dh_shlibdeps
 	dh_gencontrol
 	dh_md5sums
 	dh_builddeb
 
-binary-indep: build-indep install-indep
-	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
+binary-indep:
 
 binary-arch: build-arch install-arch
 	$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common
 
-binary:	binary-indep binary-arch
-
-get-orig-source:
-	wget -O $(SOURCE_DIR)/mumble_$(VERSION).orig.tar.gz http://mumble.info/snapshot/mumble-$(VERSION).tar.gz
+binary:	binary-arch
 
-.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure
+.PHONY: clean configure build build-arch build-indep \
+        binary binary-arch binary-indep binary-common \
+        install install-arch
diff -Nru mumble-1.2.3-348-g317f5a0/debian/watch mumble-1.2.3-349-g315b5f5/debian/watch
--- mumble-1.2.3-348-g317f5a0/debian/watch	2012-05-24 20:33:03.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/debian/watch	1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-version=3
-http://sf.net/mumble/mumble-(.*)\.tar\.gz
diff -Nru mumble-1.2.3-348-g317f5a0/src/mumble/mumble.pro mumble-1.2.3-349-g315b5f5/src/mumble/mumble.pro
--- mumble-1.2.3-348-g317f5a0/src/mumble/mumble.pro	2012-05-20 14:00:56.000000000 +0200
+++ mumble-1.2.3-349-g315b5f5/src/mumble/mumble.pro	2012-06-03 20:12:20.000000000 +0200
@@ -77,10 +77,15 @@
   DEFINES *= NO_VORBIS_RECORDING
 }
 
-CONFIG(opus) {
-	INCLUDEPATH *= ../../opus-src/celt ../../opus-src/include ../../opus-src/src ../../opus-build/src
-	DEFINES *= USE_OPUS
-	LIBS *= -lopus
+unix:system(pkg-config --exists opus) {
+  PKGCONFIG *= opus
+  DEFINES *= USE_OPUS
+} else {
+  CONFIG(opus) {
+    INCLUDEPATH *= ../../opus-src/celt ../../opus-src/include ../../opus-src/src ../../opus-build/src
+    DEFINES *= USE_OPUS
+    LIBS *= -lopus
+  }
 }
 
 win32 {

Attachment: signature.asc
Description: Digital signature


Reply to: