mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 12:41:05 +00:00
[MOVED FROM GST-P-FARSIGHT] Send all packet from the streaming thread, including the last one
20070712195715-3e2dc-6848c70a7f0137c91fa882a8efb6dbf83891ae13.gz
This commit is contained in:
parent
074189363e
commit
7a887a5187
2 changed files with 25 additions and 15 deletions
|
@ -578,6 +578,7 @@ gst_rtp_dtmf_src_start (GstRTPDTMFSrc *dtmfsrc,
|
||||||
dtmfsrc->payload->event = CLAMP (event_number, MIN_EVENT, MAX_EVENT);
|
dtmfsrc->payload->event = CLAMP (event_number, MIN_EVENT, MAX_EVENT);
|
||||||
dtmfsrc->payload->volume = CLAMP (event_volume, MIN_VOLUME, MAX_VOLUME);
|
dtmfsrc->payload->volume = CLAMP (event_volume, MIN_VOLUME, MAX_VOLUME);
|
||||||
dtmfsrc->first_packet = TRUE;
|
dtmfsrc->first_packet = TRUE;
|
||||||
|
dtmfsrc->last_packet = FALSE;
|
||||||
|
|
||||||
gst_rtp_dtmf_prepare_timestamps (dtmfsrc);
|
gst_rtp_dtmf_prepare_timestamps (dtmfsrc);
|
||||||
gst_rtp_dtmf_src_set_caps (dtmfsrc);
|
gst_rtp_dtmf_src_set_caps (dtmfsrc);
|
||||||
|
@ -596,20 +597,10 @@ gst_rtp_dtmf_src_stop (GstRTPDTMFSrc *dtmfsrc)
|
||||||
{
|
{
|
||||||
g_return_if_fail (dtmfsrc->payload != NULL);
|
g_return_if_fail (dtmfsrc->payload != NULL);
|
||||||
|
|
||||||
if (!gst_pad_pause_task (dtmfsrc->srcpad)) {
|
|
||||||
GST_ERROR_OBJECT (dtmfsrc, "Failed to pause task on src pad");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Push the last packet with e-bit set */
|
/* Push the last packet with e-bit set */
|
||||||
dtmfsrc->payload->e = 1;
|
/* Next packet sent will be the last */
|
||||||
gst_rtp_dtmf_src_push_next_rtp_packet (dtmfsrc);
|
dtmfsrc->last_packet = TRUE;
|
||||||
|
|
||||||
/* Don't forget to release the stream lock */
|
|
||||||
gst_rtp_dtmf_src_set_stream_lock (dtmfsrc, FALSE);
|
|
||||||
|
|
||||||
g_free (dtmfsrc->payload);
|
|
||||||
dtmfsrc->payload = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -645,7 +636,11 @@ gst_rtp_dtmf_prepare_rtp_headers (GstRTPDTMFSrc *dtmfsrc, GstBuffer *buf)
|
||||||
if (dtmfsrc->first_packet) {
|
if (dtmfsrc->first_packet) {
|
||||||
gst_rtp_buffer_set_marker (buf, TRUE);
|
gst_rtp_buffer_set_marker (buf, TRUE);
|
||||||
dtmfsrc->first_packet = FALSE;
|
dtmfsrc->first_packet = FALSE;
|
||||||
|
} else if (dtmfsrc->last_packet) {
|
||||||
|
dtmfsrc->payload->e = 1;
|
||||||
|
dtmfsrc->last_packet = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
dtmfsrc->seqnum++;
|
dtmfsrc->seqnum++;
|
||||||
gst_rtp_buffer_set_seq (buf, dtmfsrc->seqnum);
|
gst_rtp_buffer_set_seq (buf, dtmfsrc->seqnum);
|
||||||
|
|
||||||
|
@ -709,15 +704,14 @@ gst_rtp_dtmf_src_push_next_rtp_packet (GstRTPDTMFSrc *dtmfsrc)
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
gint redundancy_count = 1;
|
gint redundancy_count = 1;
|
||||||
|
|
||||||
if (dtmfsrc->first_packet == TRUE || dtmfsrc->payload->e) {
|
if (dtmfsrc->first_packet == TRUE || dtmfsrc->last_packet == TRUE) {
|
||||||
redundancy_count = dtmfsrc->packet_redundancy;
|
redundancy_count = dtmfsrc->packet_redundancy;
|
||||||
|
|
||||||
if(dtmfsrc->first_packet == TRUE) {
|
if(dtmfsrc->first_packet == TRUE) {
|
||||||
GST_DEBUG_OBJECT (dtmfsrc,
|
GST_DEBUG_OBJECT (dtmfsrc,
|
||||||
"redundancy count set to %d due to dtmf start",
|
"redundancy count set to %d due to dtmf start",
|
||||||
redundancy_count);
|
redundancy_count);
|
||||||
}
|
} else if(dtmfsrc->last_packet == TRUE) {
|
||||||
if(dtmfsrc->payload->e) {
|
|
||||||
GST_DEBUG_OBJECT (dtmfsrc,
|
GST_DEBUG_OBJECT (dtmfsrc,
|
||||||
"redundancy count set to %d due to dtmf stop",
|
"redundancy count set to %d due to dtmf stop",
|
||||||
redundancy_count);
|
redundancy_count);
|
||||||
|
@ -746,6 +740,21 @@ gst_rtp_dtmf_src_push_next_rtp_packet (GstRTPDTMFSrc *dtmfsrc)
|
||||||
gst_buffer_unref(buf);
|
gst_buffer_unref(buf);
|
||||||
GST_DEBUG_OBJECT (dtmfsrc,
|
GST_DEBUG_OBJECT (dtmfsrc,
|
||||||
"pushed DTMF event '%d' on src pad", dtmfsrc->payload->event);
|
"pushed DTMF event '%d' on src pad", dtmfsrc->payload->event);
|
||||||
|
|
||||||
|
if (dtmfsrc->payload->e) {
|
||||||
|
/* Don't forget to release the stream lock */
|
||||||
|
gst_rtp_dtmf_src_set_stream_lock (dtmfsrc, FALSE);
|
||||||
|
|
||||||
|
g_free (dtmfsrc->payload);
|
||||||
|
dtmfsrc->payload = NULL;
|
||||||
|
|
||||||
|
if (!gst_pad_pause_task (dtmfsrc->srcpad)) {
|
||||||
|
GST_ERROR_OBJECT (dtmfsrc, "Failed to pause task on src pad");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -81,6 +81,7 @@ struct _GstRTPDTMFSrc {
|
||||||
guint ssrc;
|
guint ssrc;
|
||||||
guint current_ssrc;
|
guint current_ssrc;
|
||||||
gboolean first_packet;
|
gboolean first_packet;
|
||||||
|
gboolean last_packet;
|
||||||
|
|
||||||
GstClockTime timestamp;
|
GstClockTime timestamp;
|
||||||
GstSegment segment;
|
GstSegment segment;
|
||||||
|
|
Loading…
Reference in a new issue