session: let source keep track if it sent BYE
This commit is contained in:
parent
0c9c1434a8
commit
93d07298ff
@ -2274,7 +2274,7 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer,
|
|||||||
update_arrival_stats (sess, &arrival, FALSE, buffer, current_time, -1,
|
update_arrival_stats (sess, &arrival, FALSE, buffer, current_time, -1,
|
||||||
ntpnstime);
|
ntpnstime);
|
||||||
|
|
||||||
if (sess->sent_bye)
|
if (sess->source->sent_bye)
|
||||||
goto ignore;
|
goto ignore;
|
||||||
|
|
||||||
/* start processing the compound packet */
|
/* start processing the compound packet */
|
||||||
@ -2516,7 +2516,6 @@ rtp_session_schedule_bye_locked (RTPSession * sess, const gchar * reason,
|
|||||||
INIT_AVG (sess->stats.avg_rtcp_packet_size, 100);
|
INIT_AVG (sess->stats.avg_rtcp_packet_size, 100);
|
||||||
sess->stats.bye_members = 1;
|
sess->stats.bye_members = 1;
|
||||||
sess->first_rtcp = TRUE;
|
sess->first_rtcp = TRUE;
|
||||||
sess->sent_bye = FALSE;
|
|
||||||
sess->allow_early = TRUE;
|
sess->allow_early = TRUE;
|
||||||
|
|
||||||
/* reschedule transmission */
|
/* reschedule transmission */
|
||||||
@ -2604,7 +2603,7 @@ rtp_session_next_timeout (RTPSession * sess, GstClockTime current_time)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sess->source->marked_bye) {
|
if (sess->source->marked_bye) {
|
||||||
if (sess->sent_bye) {
|
if (sess->source->sent_bye) {
|
||||||
GST_DEBUG ("we sent BYE already");
|
GST_DEBUG ("we sent BYE already");
|
||||||
interval = GST_CLOCK_TIME_NONE;
|
interval = GST_CLOCK_TIME_NONE;
|
||||||
} else if (sess->stats.active_sources >= 50) {
|
} else if (sess->stats.active_sources >= 50) {
|
||||||
@ -3094,7 +3093,7 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
|||||||
/* generate BYE instead */
|
/* generate BYE instead */
|
||||||
GST_DEBUG ("generating BYE message");
|
GST_DEBUG ("generating BYE message");
|
||||||
session_bye (sess, &data);
|
session_bye (sess, &data);
|
||||||
sess->sent_bye = TRUE;
|
own->sent_bye = TRUE;
|
||||||
} else {
|
} else {
|
||||||
/* loop over all known sources and do something */
|
/* loop over all known sources and do something */
|
||||||
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
g_hash_table_foreach (sess->ssrcs[sess->mask_idx],
|
||||||
@ -3133,7 +3132,6 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
|||||||
g_hash_table_insert (sess->ssrcs[sess->mask_idx],
|
g_hash_table_insert (sess->ssrcs[sess->mask_idx],
|
||||||
GINT_TO_POINTER (own->ssrc), own);
|
GINT_TO_POINTER (own->ssrc), own);
|
||||||
|
|
||||||
sess->sent_bye = FALSE;
|
|
||||||
sess->change_ssrc = FALSE;
|
sess->change_ssrc = FALSE;
|
||||||
notify = TRUE;
|
notify = TRUE;
|
||||||
GST_DEBUG ("changed our SSRC to %08x", own->ssrc);
|
GST_DEBUG ("changed our SSRC to %08x", own->ssrc);
|
||||||
@ -3165,7 +3163,7 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
|
|||||||
GST_DEBUG ("%p, sending RTCP packet, avg size %u, %u", &sess->stats,
|
GST_DEBUG ("%p, sending RTCP packet, avg size %u, %u", &sess->stats,
|
||||||
sess->stats.avg_rtcp_packet_size, packet_size);
|
sess->stats.avg_rtcp_packet_size, packet_size);
|
||||||
result =
|
result =
|
||||||
sess->callbacks.send_rtcp (sess, own, data.rtcp, sess->sent_bye,
|
sess->callbacks.send_rtcp (sess, own, data.rtcp, own->sent_bye,
|
||||||
sess->send_rtcp_user_data);
|
sess->send_rtcp_user_data);
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG ("freeing packet callback: %p"
|
GST_DEBUG ("freeing packet callback: %p"
|
||||||
|
@ -213,8 +213,6 @@ struct _RTPSession {
|
|||||||
|
|
||||||
GstClockTime next_early_rtcp_time;
|
GstClockTime next_early_rtcp_time;
|
||||||
|
|
||||||
gboolean sent_bye;
|
|
||||||
|
|
||||||
RTPSessionCallbacks callbacks;
|
RTPSessionCallbacks callbacks;
|
||||||
gpointer process_rtp_user_data;
|
gpointer process_rtp_user_data;
|
||||||
gpointer send_rtp_user_data;
|
gpointer send_rtp_user_data;
|
||||||
|
@ -223,6 +223,7 @@ rtp_source_reset (RTPSource * src)
|
|||||||
if (src->bye_reason)
|
if (src->bye_reason)
|
||||||
g_free (src->bye_reason);
|
g_free (src->bye_reason);
|
||||||
src->bye_reason = NULL;
|
src->bye_reason = NULL;
|
||||||
|
src->sent_bye = FALSE;
|
||||||
|
|
||||||
src->stats.cycles = -1;
|
src->stats.cycles = -1;
|
||||||
src->stats.jitter = 0;
|
src->stats.jitter = 0;
|
||||||
|
@ -147,6 +147,7 @@ struct _RTPSource {
|
|||||||
|
|
||||||
gboolean marked_bye;
|
gboolean marked_bye;
|
||||||
gchar *bye_reason;
|
gchar *bye_reason;
|
||||||
|
gboolean sent_bye;
|
||||||
|
|
||||||
GSocketAddress *rtp_from;
|
GSocketAddress *rtp_from;
|
||||||
GSocketAddress *rtcp_from;
|
GSocketAddress *rtcp_from;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user