[MOVED FROM GST-P-FARSIGHT] Put non-zero duration in first packet and put a minimum...
authorOlivier Crete <olivier.crete@collabora.co.uk>
Thu, 12 Jul 2007 19:55:28 +0000 (19:55 +0000)
committerEdward Hervey <bilboed@bilboed.com>
Sat, 21 Feb 2009 16:47:59 +0000 (17:47 +0100)
20070712195528-3e2dc-d46edeaab84fb55e74842bdcf4f8792dfcdb0457.gz

gst/rtpdtmf/gstrtpdtmfsrc.c

index a31957f9dc27c9cb4fbb4672bb6f6097b5783315..b20254ea42ca6c7a3498c9a9214cc5d952eb1be8 100644 (file)
 #define MAX_EVENT_STRING         "16"
 #define MIN_VOLUME               0
 #define MAX_VOLUME               36
+#define MIN_EVENT_DURATION       50
 
 #define DEFAULT_PACKET_REDUNDANCY 1
 #define MIN_PACKET_REDUNDANCY 1
@@ -659,6 +660,10 @@ gst_rtp_dtmf_prepare_buffer_data (GstRTPDTMFSrc *dtmfsrc, GstBuffer *buf)
   
   gst_rtp_dtmf_prepare_rtp_headers (dtmfsrc, buf);
 
+  /* duration of DTMF payload */
+  dtmfsrc->payload->duration +=
+      dtmfsrc->interval * dtmfsrc->clock_rate / 1000;
+
   /* timestamp and duration of GstBuffer */ 
   GST_BUFFER_DURATION (buf) = dtmfsrc->interval * GST_MSECOND;
   GST_BUFFER_TIMESTAMP (buf) = dtmfsrc->timestamp;
@@ -668,12 +673,14 @@ gst_rtp_dtmf_prepare_buffer_data (GstRTPDTMFSrc *dtmfsrc, GstBuffer *buf)
   
   /* copy payload and convert to network-byte order */
   g_memmove (payload, dtmfsrc->payload, sizeof (GstRTPDTMFPayload));
-  payload->duration = g_htons (payload->duration);
-
-  /* duration of DTMF payload */
-  dtmfsrc->payload->duration +=
-      dtmfsrc->interval * dtmfsrc->clock_rate / 1000;
+  /* Force the packet duration to a certain minumum
+   * if its the end of the event
+   */
+  if (payload->e &&
+      payload->duration < MIN_EVENT_DURATION * dtmfsrc->clock_rate / 1000)
+    payload->duration = MIN_EVENT_DURATION * dtmfsrc->clock_rate / 1000;
 
+  payload->duration = g_htons (payload->duration);
 }
 
 static GstBuffer *