[svn-commits] rmudgett: trunk r395188 - in /trunk: bridges/ include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jul 23 14:14:46 CDT 2013


Author: rmudgett
Date: Tue Jul 23 14:14:44 2013
New Revision: 395188

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395188
Log:
Pull softmix bridge parameters into a sub structure.

Modified:
    trunk/bridges/bridge_softmix.c
    trunk/include/asterisk/bridging.h
    trunk/main/bridging.c

Modified: trunk/bridges/bridge_softmix.c
URL: http://svnview.digium.com/svn/asterisk/trunk/bridges/bridge_softmix.c?view=diff&rev=395188&r1=395187&r2=395188
==============================================================================
--- trunk/bridges/bridge_softmix.c (original)
+++ trunk/bridges/bridge_softmix.c Tue Jul 23 14:14:44 2013
@@ -477,7 +477,7 @@
 	int video_src_priority;
 
 	/* Determine if the video frame should be distributed or not */
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
@@ -533,7 +533,7 @@
 	ast_mutex_lock(&sc->lock);
 	ast_dsp_silence_with_energy(sc->dsp, frame, &totalsilence, &cur_energy);
 
-	if (bridge->video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
+	if (bridge->softmix.video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
 		int cur_slot = sc->video_talker.energy_history_cur_slot;
 
 		sc->video_talker.energy_accum -= sc->video_talker.energy_history[cur_slot];
@@ -851,7 +851,7 @@
 		/* These variables help determine if a rate change is required */
 		if (!stat_iteration_counter) {
 			memset(&stats, 0, sizeof(stats));
-			stats.locked_rate = bridge->internal_sample_rate;
+			stats.locked_rate = bridge->softmix.internal_sample_rate;
 		}
 
 		/* If the sample rate has changed, update the translator helper */
@@ -942,8 +942,9 @@
 		ast_bridge_lock(bridge);
 
 		/* make sure to detect mixing interval changes if they occur. */
-		if (bridge->internal_mixing_interval && (bridge->internal_mixing_interval != softmix_data->internal_mixing_interval)) {
-			softmix_data->internal_mixing_interval = bridge->internal_mixing_interval;
+		if (bridge->softmix.internal_mixing_interval
+			&& (bridge->softmix.internal_mixing_interval != softmix_data->internal_mixing_interval)) {
+			softmix_data->internal_mixing_interval = bridge->softmix.internal_mixing_interval;
 			ast_timer_set_rate(timer, (1000 / softmix_data->internal_mixing_interval));
 			update_all_rates = 1; /* if the interval changes, the rates must be adjusted as well just to be notified new interval.*/
 		}

Modified: trunk/include/asterisk/bridging.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/bridging.h?view=diff&rev=395188&r1=395187&r2=395188
==============================================================================
--- trunk/include/asterisk/bridging.h (original)
+++ trunk/include/asterisk/bridging.h Tue Jul 23 14:14:44 2013
@@ -390,6 +390,26 @@
 	ast_bridge_merge_priority_fn get_merge_priority;
 };
 
+/*! Softmix technology parameters. */
+struct ast_bridge_softmix {
+	/*! The video mode softmix is using */
+	struct ast_bridge_video_mode video_mode;
+	/*!
+	 * \brief The internal sample rate softmix uses to mix channels.
+	 *
+	 * \note If this value is 0, the sofmix may auto adjust the mixing rate.
+	 */
+	unsigned int internal_sample_rate;
+	/*!
+	 * \brief The mixing interval indicates how quickly softmix
+	 * mixing should occur to mix audio.
+	 *
+	 * \note When set to 0, softmix must choose a default interval
+	 * for itself.
+	 */
+	unsigned int internal_mixing_interval;
+};
+
 /*!
  * \brief Structure that contains information about a bridge
  */
@@ -398,8 +418,6 @@
 	const struct ast_bridge_methods *v_table;
 	/*! "Personality" currently exhibited by bridge subclass */
 	void *personality;
-	/*! Immutable bridge UUID. */
-	char uniqueid[AST_UUID_STR_LEN];
 	/*! Bridge technology that is handling the bridge */
 	struct ast_bridge_technology *technology;
 	/*! Private information unique to the bridge technology */
@@ -410,8 +428,8 @@
 	AST_LIST_HEAD_NOLOCK(, ast_bridge_channel) channels;
 	/*! Queue of actions to perform on the bridge. */
 	AST_LIST_HEAD_NOLOCK(, ast_frame) action_queue;
-	/*! The video mode this bridge is using */
-	struct ast_bridge_video_mode video_mode;
+	/*! Softmix technology parameters. */
+	struct ast_bridge_softmix softmix;
 	/*! Bridge flags to tweak behavior */
 	struct ast_flags feature_flags;
 	/*! Allowed bridge technology capabilities when AST_BRIDGE_FLAG_SMART enabled. */
@@ -427,19 +445,14 @@
 	 * \note Temporary as in try again in a moment.
 	 */
 	unsigned int inhibit_merge;
-	/*! The internal sample rate this bridge is mixed at when multiple channels are being mixed.
-	 *  If this value is 0, the bridge technology may auto adjust the internal mixing rate. */
-	unsigned int internal_sample_rate;
-	/*! The mixing interval indicates how quickly the bridges internal mixing should occur
-	 * for bridge technologies that mix audio. When set to 0, the bridge tech must choose a
-	 * default interval for itself. */
-	unsigned int internal_mixing_interval;
 	/*! TRUE if the bridge was reconfigured. */
 	unsigned int reconfigured:1;
 	/*! TRUE if the bridge has been dissolved.  Any channel that now tries to join is immediately ejected. */
 	unsigned int dissolved:1;
 	/*! TRUE if the bridge construction was completed. */
 	unsigned int construction_completed:1;
+	/*! Immutable bridge UUID. */
+	char uniqueid[AST_UUID_STR_LEN];
 };
 
 /*!

Modified: trunk/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/bridging.c?view=diff&rev=395188&r1=395187&r2=395188
==============================================================================
--- trunk/main/bridging.c (original)
+++ trunk/main/bridging.c Tue Jul 23 14:14:44 2013
@@ -5788,45 +5788,46 @@
 void ast_bridge_set_mixing_interval(struct ast_bridge *bridge, unsigned int mixing_interval)
 {
 	ast_bridge_lock(bridge);
-	bridge->internal_mixing_interval = mixing_interval;
+	bridge->softmix.internal_mixing_interval = mixing_interval;
 	ast_bridge_unlock(bridge);
 }
 
 void ast_bridge_set_internal_sample_rate(struct ast_bridge *bridge, unsigned int sample_rate)
 {
 	ast_bridge_lock(bridge);
-	bridge->internal_sample_rate = sample_rate;
+	bridge->softmix.internal_sample_rate = sample_rate;
 	ast_bridge_unlock(bridge);
 }
 
 static void cleanup_video_mode(struct ast_bridge *bridge)
 {
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
-		if (bridge->video_mode.mode_data.single_src_data.chan_vsrc) {
-			ast_channel_unref(bridge->video_mode.mode_data.single_src_data.chan_vsrc);
+		if (bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc) {
+			ast_channel_unref(bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc);
 		}
 		break;
 	case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
-		if (bridge->video_mode.mode_data.talker_src_data.chan_vsrc) {
-			ast_channel_unref(bridge->video_mode.mode_data.talker_src_data.chan_vsrc);
-		}
-		if (bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc) {
-			ast_channel_unref(bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc);
-		}
-	}
-	memset(&bridge->video_mode, 0, sizeof(bridge->video_mode));
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc) {
+			ast_channel_unref(bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc);
+		}
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc) {
+			ast_channel_unref(bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc);
+		}
+	}
+	memset(&bridge->softmix.video_mode, 0, sizeof(bridge->softmix.video_mode));
 }
 
 void ast_bridge_set_single_src_video_mode(struct ast_bridge *bridge, struct ast_channel *video_src_chan)
 {
 	ast_bridge_lock(bridge);
 	cleanup_video_mode(bridge);
-	bridge->video_mode.mode = AST_BRIDGE_VIDEO_MODE_SINGLE_SRC;
-	bridge->video_mode.mode_data.single_src_data.chan_vsrc = ast_channel_ref(video_src_chan);
-	ast_test_suite_event_notify("BRIDGE_VIDEO_MODE", "Message: video mode set to single source\r\nVideo Mode: %d\r\nVideo Channel: %s", bridge->video_mode.mode, ast_channel_name(video_src_chan));
+	bridge->softmix.video_mode.mode = AST_BRIDGE_VIDEO_MODE_SINGLE_SRC;
+	bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc = ast_channel_ref(video_src_chan);
+	ast_test_suite_event_notify("BRIDGE_VIDEO_MODE", "Message: video mode set to single source\r\nVideo Mode: %d\r\nVideo Channel: %s",
+		bridge->softmix.video_mode.mode, ast_channel_name(video_src_chan));
 	ast_indicate(video_src_chan, AST_CONTROL_VIDUPDATE);
 	ast_bridge_unlock(bridge);
 }
@@ -5835,21 +5836,23 @@
 {
 	ast_bridge_lock(bridge);
 	cleanup_video_mode(bridge);
-	bridge->video_mode.mode = AST_BRIDGE_VIDEO_MODE_TALKER_SRC;
-	ast_test_suite_event_notify("BRIDGE_VIDEO_MODE", "Message: video mode set to talker source\r\nVideo Mode: %d", bridge->video_mode.mode);
+	bridge->softmix.video_mode.mode = AST_BRIDGE_VIDEO_MODE_TALKER_SRC;
+	ast_test_suite_event_notify("BRIDGE_VIDEO_MODE", "Message: video mode set to talker source\r\nVideo Mode: %d",
+		bridge->softmix.video_mode.mode);
 	ast_bridge_unlock(bridge);
 }
 
 void ast_bridge_update_talker_src_video_mode(struct ast_bridge *bridge, struct ast_channel *chan, int talker_energy, int is_keyframe)
 {
 	struct ast_bridge_video_talker_src_data *data;
+
 	/* If the channel doesn't support video, we don't care about it */
 	if (!ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_FORMAT_TYPE_VIDEO)) {
 		return;
 	}
 
 	ast_bridge_lock(bridge);
-	data = &bridge->video_mode.mode_data.talker_src_data;
+	data = &bridge->softmix.video_mode.mode_data.talker_src_data;
 
 	if (data->chan_vsrc == chan) {
 		data->average_talking_energy = talker_energy;
@@ -5884,19 +5887,19 @@
 	int res = 0;
 
 	ast_bridge_lock(bridge);
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
-		if (bridge->video_mode.mode_data.single_src_data.chan_vsrc) {
+		if (bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc) {
 			res = 1;
 		}
 		break;
 	case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
-		if (bridge->video_mode.mode_data.talker_src_data.chan_vsrc) {
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc) {
 			res++;
 		}
-		if (bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc) {
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc) {
 			res++;
 		}
 	}
@@ -5909,18 +5912,18 @@
 	int res = 0;
 
 	ast_bridge_lock(bridge);
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
-		if (bridge->video_mode.mode_data.single_src_data.chan_vsrc == chan) {
+		if (bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc == chan) {
 			res = 1;
 		}
 		break;
 	case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
-		if (bridge->video_mode.mode_data.talker_src_data.chan_vsrc == chan) {
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc == chan) {
 			res = 1;
-		} else if (bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc == chan) {
+		} else if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc == chan) {
 			res = 2;
 		}
 
@@ -5932,30 +5935,30 @@
 void ast_bridge_remove_video_src(struct ast_bridge *bridge, struct ast_channel *chan)
 {
 	ast_bridge_lock(bridge);
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
-		if (bridge->video_mode.mode_data.single_src_data.chan_vsrc == chan) {
-			if (bridge->video_mode.mode_data.single_src_data.chan_vsrc) {
-				ast_channel_unref(bridge->video_mode.mode_data.single_src_data.chan_vsrc);
+		if (bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc == chan) {
+			if (bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc) {
+				ast_channel_unref(bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc);
 			}
-			bridge->video_mode.mode_data.single_src_data.chan_vsrc = NULL;
+			bridge->softmix.video_mode.mode_data.single_src_data.chan_vsrc = NULL;
 		}
 		break;
 	case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
-		if (bridge->video_mode.mode_data.talker_src_data.chan_vsrc == chan) {
-			if (bridge->video_mode.mode_data.talker_src_data.chan_vsrc) {
-				ast_channel_unref(bridge->video_mode.mode_data.talker_src_data.chan_vsrc);
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc == chan) {
+			if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc) {
+				ast_channel_unref(bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc);
 			}
-			bridge->video_mode.mode_data.talker_src_data.chan_vsrc = NULL;
-			bridge->video_mode.mode_data.talker_src_data.average_talking_energy = 0;
-		}
-		if (bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc == chan) {
-			if (bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc) {
-				ast_channel_unref(bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc);
+			bridge->softmix.video_mode.mode_data.talker_src_data.chan_vsrc = NULL;
+			bridge->softmix.video_mode.mode_data.talker_src_data.average_talking_energy = 0;
+		}
+		if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc == chan) {
+			if (bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc) {
+				ast_channel_unref(bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc);
 			}
-			bridge->video_mode.mode_data.talker_src_data.chan_old_vsrc = NULL;
+			bridge->softmix.video_mode.mode_data.talker_src_data.chan_old_vsrc = NULL;
 		}
 	}
 	ast_bridge_unlock(bridge);




More information about the svn-commits mailing list