audiortppay: fix frame duration calculations
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 3 Sep 2009 12:13:44 +0000 (14:13 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 3 Sep 2009 15:59:00 +0000 (17:59 +0200)
Fix the calculation of the frame duration and rtp timestamps.
Add some debugging

gst-libs/gst/rtp/gstbasertpaudiopayload.c

index f19552ab6c843a9aad59749a1b4ea9a55618dc3a..d6458a0e68316700ef5c64aba91ef6ca93dac565 100644 (file)
@@ -258,10 +258,13 @@ gst_base_rtp_audio_payload_set_frame_options (GstBaseRTPAudioPayload
 {
   g_return_if_fail (basertpaudiopayload != NULL);
 
-  basertpaudiopayload->frame_size = frame_size;
   basertpaudiopayload->frame_duration = frame_duration;
+  basertpaudiopayload->frame_size = frame_size;
 
   gst_adapter_clear (basertpaudiopayload->priv->adapter);
+
+  GST_DEBUG_OBJECT (basertpaudiopayload, "frame set to %d ms and size %d",
+      frame_duration, frame_size);
 }
 
 /**
@@ -308,6 +311,9 @@ gst_base_rtp_audio_payload_set_samplebits_options (GstBaseRTPAudioPayload
   basertpaudiopayload->priv->fragment_size = fragment_size / 8;
 
   gst_adapter_clear (basertpaudiopayload->priv->adapter);
+
+  GST_DEBUG_OBJECT (basertpaudiopayload,
+      "Samplebits set to sample size %d bits", sample_size);
 }
 
 static void
@@ -514,16 +520,21 @@ static GstClockTime
 gst_base_rtp_audio_payload_get_frame_duration (GstBaseRTPAudioPayload *
     payload, guint64 bytes)
 {
-  return gst_util_uint64_scale (bytes, payload->frame_duration * GST_MSECOND,
-      payload->frame_size);
+  return (bytes / payload->frame_size) * (payload->frame_duration *
+      GST_MSECOND);
 }
 
 static guint32
 gst_base_rtp_audio_payload_get_frame_rtptime (GstBaseRTPAudioPayload * payload,
     guint64 bytes)
 {
-  return gst_util_uint64_scale (bytes, payload->frame_duration * GST_MSECOND,
-      payload->frame_size * GST_BASE_RTP_PAYLOAD_CAST (payload)->clock_rate);
+  GstClockTime duration;
+
+  duration =
+      (bytes / payload->frame_size) * (payload->frame_duration * GST_MSECOND);
+
+  return gst_util_uint64_scale_int (duration,
+      GST_BASE_RTP_PAYLOAD_CAST (payload)->clock_rate, GST_SECOND);
 }
 
 static gboolean
@@ -575,8 +586,8 @@ static GstClockTime
 gst_base_rtp_audio_payload_get_sample_duration (GstBaseRTPAudioPayload *
     payload, guint64 bytes)
 {
-  return (bytes * 8 * GST_SECOND) /
-      (GST_BASE_RTP_PAYLOAD (payload)->clock_rate * payload->sample_size);
+  return gst_util_uint64_scale (bytes * 8, GST_SECOND,
+      GST_BASE_RTP_PAYLOAD (payload)->clock_rate * payload->sample_size);
 }
 
 static guint32