Revision
15553
Author
anthm
Date
2009-11-19 12:22:05 -0600 (Thu, 19 Nov 2009)

Log Message

more video fixes

Modified Paths

Diff

Modified: freeswitch/trunk/src/switch_ivr_bridge.c (15552 => 15553)


--- freeswitch/trunk/src/switch_ivr_bridge.c	2009-11-19 17:49:43 UTC (rev 15552)
+++ freeswitch/trunk/src/switch_ivr_bridge.c	2009-11-19 18:22:05 UTC (rev 15553)
@@ -48,13 +48,13 @@
 {
 	struct vid_helper *vh = obj;
 	switch_channel_t *channel = switch_core_session_get_channel(vh->session_a);
+	switch_channel_t *b_channel = switch_core_session_get_channel(vh->session_b);
 	switch_status_t status;
 	switch_frame_t *read_frame;
 
 	vh->up = 1;
-	while (switch_channel_ready(channel) && vh->up == 1) {
+	while (switch_channel_ready(channel) && switch_channel_ready(b_channel) && vh->up == 1) {
 		status = switch_core_session_read_video_frame(vh->session_a, &read_frame, SWITCH_IO_FLAG_NONE, 0);
-
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
@@ -67,8 +67,10 @@
 
 	}
 	
+	switch_core_session_kill_channel(vh->session_b, SWITCH_SIG_BREAK);	
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s video thread ended.\n", switch_channel_get_name(channel));
 
+
 	vh->up = 0;
 	return NULL;
 }
@@ -472,6 +474,18 @@
 
  end_of_bridge_loop:
 
+#ifdef SWITCH_VIDEO_IN_THREADS
+	if (vid_thread) {
+		vh.up = -1;
+		switch_channel_set_flag(chan_a, CF_NOT_READY);
+		switch_channel_set_flag(chan_b, CF_NOT_READY);
+		switch_core_session_kill_channel(session_a, SWITCH_SIG_BREAK);
+		switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Ending video thread.\n");
+	}
+#endif
+
+
 	if (silence_val) {
 		switch_core_codec_destroy(&silence_codec);
 	}
@@ -530,11 +544,15 @@
 #ifdef SWITCH_VIDEO_IN_THREADS
 	if (vid_thread) {
 		switch_status_t st;
-		vh.up = -1;
-		switch_core_session_kill_channel(session_a, SWITCH_SIG_BREAK);
-		switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
+
+		if (vh.up) {
+			switch_core_session_kill_channel(session_a, SWITCH_SIG_BREAK);
+			switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
+		}
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Ending video thread.\n");
 		switch_thread_join(&st, vid_thread);
+		switch_channel_clear_flag(chan_a, CF_NOT_READY);
+		switch_channel_clear_flag(chan_b, CF_NOT_READY);
 	}
 #endif
 

Modified: freeswitch/trunk/src/switch_rtp.c (15552 => 15553)


--- freeswitch/trunk/src/switch_rtp.c	2009-11-19 17:49:43 UTC (rev 15552)
+++ freeswitch/trunk/src/switch_rtp.c	2009-11-19 18:22:05 UTC (rev 15553)
@@ -1861,6 +1861,9 @@
 			poll_loop = 1;
 			rtp_session->missed_count += (poll_sec * 1000 ) / (rtp_session->ms_per_packet ? rtp_session->ms_per_packet : 20 / 1000);
 			bytes = 0;
+			if (rtp_session->dtmf_data.out_digit_dur == 0 || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO)) {
+				return_cng_frame();
+			}
 		}
 
 		if (bytes < 0) {