[svn-commits] pcadach: branch pcadach/chan_h323-live r40517 - /team/pcadach/chan_h323-live/...

svn-commits at lists.digium.com svn-commits at lists.digium.com
Sat Aug 19 00:44:09 MST 2006


Author: pcadach
Date: Sat Aug 19 02:44:09 2006
New Revision: 40517

URL: http://svn.digium.com/view/asterisk?rev=40517&view=rev
Log:
Workaround for empty preferenced codec list when specifying allow=all in configuration file. IMHO solution I've found looks very nice!!! ;-)

Modified:
    team/pcadach/chan_h323-live/channels/h323/ast_h323.cpp

Modified: team/pcadach/chan_h323-live/channels/h323/ast_h323.cpp
URL: http://svn.digium.com/view/asterisk/team/pcadach/chan_h323-live/channels/h323/ast_h323.cpp?rev=40517&r1=40516&r2=40517&view=diff
==============================================================================
--- team/pcadach/chan_h323-live/channels/h323/ast_h323.cpp (original)
+++ team/pcadach/chan_h323-live/channels/h323/ast_h323.cpp Sat Aug 19 02:44:09 2006
@@ -1147,20 +1147,31 @@
 	PINDEX lastcap = -1; /* last common capability index */
 	int alreadysent = 0;
 	int codec;
-	int x;
+	int x, y;
 	char caps_str[1024];
 	
 	localCapabilities.RemoveAll();
 
 	if (h323debug) {	
 		cout << "Setting capabilities to " << ast_getformatname_multiple(caps_str, sizeof(caps_str), cap) << endl;
-	}
-	for (x = -1; x < 32; ++x) {
+		ast_codec_pref_string(prefs, caps_str, sizeof(caps_str));
+		cout << "Capabilities in preference order is " << caps_str << endl;
+	}
+	/* Add audio codecs in preference order first, then
+	   audio codecs without preference as allowed by mask */
+	for (y = 0, x = -1; x < 32 + 32; ++x) {
 		if (x < 0)
 			codec = pref_codec;
-		else if (!(codec = ast_codec_pref_index(prefs, x)))
-			break;
-		if (!(cap & codec) || (alreadysent & codec))
+		else if (y || (!(codec = ast_codec_pref_index(prefs, x)))) {
+			if (!y)
+				y = 1;
+			else if (y == AST_FORMAT_MAX_AUDIO)
+				break;
+			else
+				y <<= 1;
+			codec = y;
+		}
+		if (!(cap & codec) || (alreadysent & codec) || !(codec & AST_FORMAT_AUDIO_MASK))
 			continue;
 		alreadysent |= codec;
 		switch(codec) {
@@ -1208,21 +1219,6 @@
 		}
 	}
 	
-	if ((alreadysent & cap) != cap) {
-		lastcap++;
-		for (x = 0; x < 32; ++x) {
-			if (!(codec = ast_codec_pref_index(prefs, x)))
-				break;
-			if (!(cap & codec) || (alreadysent & codec))
-				continue;
-			
-			alreadysent |= codec;
-			switch(codec) {
-			/* Put video codecs here */
-			}
-		}
-	}
-
 	lastcap++;
 	lastcap = localCapabilities.SetCapability(0, lastcap, new H323_UserInputCapability(H323_UserInputCapability::HookFlashH245));
 



More information about the svn-commits mailing list