diff options
Diffstat (limited to 'gst/dtmf/gstrtpdtmfsrc.c')
-rw-r--r-- | gst/dtmf/gstrtpdtmfsrc.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gst/dtmf/gstrtpdtmfsrc.c b/gst/dtmf/gstrtpdtmfsrc.c index c2a6d1f2..ff3f05b4 100644 --- a/gst/dtmf/gstrtpdtmfsrc.c +++ b/gst/dtmf/gstrtpdtmfsrc.c @@ -612,11 +612,20 @@ gst_rtp_dtmf_src_stop (GstRTPDTMFSrc *dtmfsrc) dtmfsrc->clock_id = NULL; } + g_async_queue_lock (dtmfsrc->event_queue); + event = g_malloc (sizeof(GstRTPDTMFSrcEvent)); + event->event_type = RTP_DTMF_EVENT_TYPE_PAUSE_TASK; + g_async_queue_push_unlocked (dtmfsrc->event_queue, event); + g_async_queue_unlock (dtmfsrc->event_queue); + + event = NULL; + if (!gst_pad_pause_task (dtmfsrc->srcpad)) { GST_ERROR_OBJECT (dtmfsrc, "Failed to pause task on src pad"); return; } + if (dtmfsrc->last_event) { /* Don't forget to release the stream lock */ gst_rtp_dtmf_src_set_stream_lock (dtmfsrc, FALSE); @@ -632,10 +641,6 @@ gst_rtp_dtmf_src_stop (GstRTPDTMFSrc *dtmfsrc) event = g_async_queue_try_pop (dtmfsrc->event_queue); } - if (dtmfsrc->last_event) { - g_free (dtmfsrc->last_event); - dtmfsrc->last_event = NULL; - } } @@ -813,6 +818,10 @@ gst_rtp_dtmf_src_push_next_rtp_packet (GstRTPDTMFSrc *dtmfsrc) event->sent_packets = 0; dtmfsrc->last_event = event; + } else if (event->event_type == RTP_DTMF_EVENT_TYPE_PAUSE_TASK) { + g_free (event); + g_async_queue_unref (dtmfsrc->event_queue); + return; } } else if (dtmfsrc->last_event->sent_packets * dtmfsrc->interval >= MIN_PULSE_DURATION){ |