rtpsession: Use existing functions to parse RTCP FB packets
authorOlivier Crête <olivier.crete@collabora.co.uk>
Tue, 1 Feb 2011 20:57:01 +0000 (15:57 -0500)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Fri, 15 Apr 2011 11:48:04 +0000 (12:48 +0100)
Use existing functions to get the FCI from FB packets.

https://bugzilla.gnome.org/show_bug.cgi?id=622553

gst/rtpmanager/rtpsession.c

index fdb8493..e547352 100644 (file)
@@ -2177,27 +2177,29 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
   GstRTCPFBType fbtype = gst_rtcp_packet_fb_get_type (packet);
   guint32 sender_ssrc = gst_rtcp_packet_fb_get_sender_ssrc (packet);
   guint32 media_ssrc = gst_rtcp_packet_fb_get_media_ssrc (packet);
-  guint length = 4 * (gst_rtcp_packet_get_length (packet) - 2);
+  guint8 *fci_data = gst_rtcp_packet_fb_get_fci (packet);
+  guint fci_length = 4 * gst_rtcp_packet_fb_get_fci_length (packet);
 
-  GST_DEBUG ("received feedback %d:%d from %08X about %08X"
-      " with FCI of length %d", type, fbtype, sender_ssrc, media_ssrc, length);
+  GST_DEBUG ("received feedback %d:%d from %08X about %08X with FCI of "
+      "length %d", type, fbtype, sender_ssrc, media_ssrc, fci_length);
 
   if (g_signal_has_handler_pending (sess,
           rtp_session_signals[SIGNAL_ON_FEEDBACK_RTCP], 0, TRUE)) {
-    GstBuffer *fci = NULL;
+    GstBuffer *fci_buffer = NULL;
 
-    if (length) {
-      fci = gst_buffer_create_sub (packet->buffer, packet->offset + 72, length);
-      GST_BUFFER_TIMESTAMP (fci) = arrival->running_time;
+    if (fci_length > 0) {
+      fci_buffer = gst_buffer_create_sub (packet->buffer,
+          fci_data - GST_BUFFER_DATA (packet->buffer), fci_length);
+      GST_BUFFER_TIMESTAMP (fci_buffer) = arrival->running_time;
     }
 
     RTP_SESSION_UNLOCK (sess);
     g_signal_emit (sess, rtp_session_signals[SIGNAL_ON_FEEDBACK_RTCP], 0,
-        type, fbtype, sender_ssrc, media_ssrc, fci);
+        type, fbtype, sender_ssrc, media_ssrc, fci_buffer);
     RTP_SESSION_LOCK (sess);
 
-    if (fci)
-      gst_buffer_unref (fci);
+    if (fci_buffer)
+      gst_buffer_unref (fci_buffer);
   }
 
   if (sess->rtcp_feedback_retention_window) {