1 /* GStreamer
2  * Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
3  *
4  * gstrtcpbuffer.h: various helper functions to manipulate buffers
5  *     with RTCP payload.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef __GST_RTCPBUFFER_H__
24 #define __GST_RTCPBUFFER_H__
25 
26 #include <gst/gst.h>
27 #include <gst/rtp/rtp-prelude.h>
28 
29 G_BEGIN_DECLS
30 
31 /**
32  * GST_RTCP_VERSION:
33  *
34  * The supported RTCP version 2.
35  */
36 #define GST_RTCP_VERSION 2
37 
38 /**
39  * GstRTCPType:
40  * @GST_RTCP_TYPE_INVALID: Invalid type
41  * @GST_RTCP_TYPE_SR: Sender report
42  * @GST_RTCP_TYPE_RR: Receiver report
43  * @GST_RTCP_TYPE_SDES: Source description
44  * @GST_RTCP_TYPE_BYE: Goodbye
45  * @GST_RTCP_TYPE_APP: Application defined
46  * @GST_RTCP_TYPE_RTPFB: Transport layer feedback.
47  * @GST_RTCP_TYPE_PSFB: Payload-specific feedback.
48  * @GST_RTCP_TYPE_XR: Extended report.
49  *
50  * Different RTCP packet types.
51  */
52 typedef enum
53 {
54   GST_RTCP_TYPE_INVALID = 0,
55   GST_RTCP_TYPE_SR      = 200,
56   GST_RTCP_TYPE_RR      = 201,
57   GST_RTCP_TYPE_SDES    = 202,
58   GST_RTCP_TYPE_BYE     = 203,
59   GST_RTCP_TYPE_APP     = 204,
60   GST_RTCP_TYPE_RTPFB   = 205,
61   GST_RTCP_TYPE_PSFB    = 206,
62   GST_RTCP_TYPE_XR      = 207
63 } GstRTCPType;
64 
65 /* FIXME 2.0: backwards compatibility define for enum typo */
66 #define GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ
67 
68 /**
69  * GstRTCPFBType:
70  * @GST_RTCP_FB_TYPE_INVALID: Invalid type
71  * @GST_RTCP_RTPFB_TYPE_NACK: Generic NACK
72  * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request
73  * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate
74  *    Notification
75  * @GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ: Request an SR packet for early
76  *    synchronization
77  * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication
78  * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication
79  * @GST_RTCP_PSFB_TYPE_RPSI: Reference Picture Selection Indication
80  * @GST_RTCP_PSFB_TYPE_AFB: Application layer Feedback
81  * @GST_RTCP_PSFB_TYPE_FIR: Full Intra Request Command
82  * @GST_RTCP_PSFB_TYPE_TSTR: Temporal-Spatial Trade-off Request
83  * @GST_RTCP_PSFB_TYPE_TSTN: Temporal-Spatial Trade-off Notification
84  * @GST_RTCP_PSFB_TYPE_VBCN: Video Back Channel Message
85  *
86  * Different types of feedback messages.
87  */
88 typedef enum
89 {
90   /* generic */
91   GST_RTCP_FB_TYPE_INVALID        = 0,
92   /* RTPFB types */
93   GST_RTCP_RTPFB_TYPE_NACK        = 1,
94   /* RTPFB types assigned in RFC 5104 */
95   GST_RTCP_RTPFB_TYPE_TMMBR       = 3,
96   GST_RTCP_RTPFB_TYPE_TMMBN       = 4,
97   /* RTPFB types assigned in RFC 6051 */
98   GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ = 5,
99   /* PSFB types */
100   GST_RTCP_PSFB_TYPE_PLI          = 1,
101   GST_RTCP_PSFB_TYPE_SLI          = 2,
102   GST_RTCP_PSFB_TYPE_RPSI         = 3,
103   GST_RTCP_PSFB_TYPE_AFB          = 15,
104   /* PSFB types assigned in RFC 5104 */
105   GST_RTCP_PSFB_TYPE_FIR          = 4,
106   GST_RTCP_PSFB_TYPE_TSTR         = 5,
107   GST_RTCP_PSFB_TYPE_TSTN         = 6,
108   GST_RTCP_PSFB_TYPE_VBCN         = 7,
109 } GstRTCPFBType;
110 
111 /**
112  * GstRTCPSDESType:
113  * @GST_RTCP_SDES_INVALID: Invalid SDES entry
114  * @GST_RTCP_SDES_END: End of SDES list
115  * @GST_RTCP_SDES_CNAME: Canonical name
116  * @GST_RTCP_SDES_NAME: User name
117  * @GST_RTCP_SDES_EMAIL: User's electronic mail address
118  * @GST_RTCP_SDES_PHONE: User's phone number
119  * @GST_RTCP_SDES_LOC: Geographic user location
120  * @GST_RTCP_SDES_TOOL: Name of application or tool
121  * @GST_RTCP_SDES_NOTE: Notice about the source
122  * @GST_RTCP_SDES_PRIV: Private extensions
123  *
124  * Different types of SDES content.
125  */
126 typedef enum
127 {
128   GST_RTCP_SDES_INVALID  = -1,
129   GST_RTCP_SDES_END      = 0,
130   GST_RTCP_SDES_CNAME    = 1,
131   GST_RTCP_SDES_NAME     = 2,
132   GST_RTCP_SDES_EMAIL    = 3,
133   GST_RTCP_SDES_PHONE    = 4,
134   GST_RTCP_SDES_LOC      = 5,
135   GST_RTCP_SDES_TOOL     = 6,
136   GST_RTCP_SDES_NOTE     = 7,
137   GST_RTCP_SDES_PRIV     = 8
138 } GstRTCPSDESType;
139 
140 /**
141  * GstRTCPXRType:
142  * @GST_RTCP_XR_TYPE_INVALID: Invalid XR Report Block
143  * @GST_RTCP_XR_TYPE_LRLE: Loss RLE Report Block
144  * @GST_RTCP_XR_TYPE_DRLE: Duplicate RLE Report Block
145  * @GST_RTCP_XR_TYPE_PRT: Packet Receipt Times Report Block
146  * @GST_RTCP_XR_TYPE_RRT: Receiver Reference Time Report Block
147  * @GST_RTCP_XR_TYPE_DLRR: Delay since the last Receiver Report
148  * @GST_RTCP_XR_TYPE_SSUMM: Statistics Summary Report Block
149  * @GST_RTCP_XR_TYPE_VOIP_METRICS: VoIP Metrics Report Block
150  *
151  * Types of RTCP Extended Reports, those are defined in RFC 3611 and other RFCs
152  * according to the [IANA registry](https://www.iana.org/assignments/rtcp-xr-block-types/rtcp-xr-block-types.xhtml).
153  *
154  * Since: 1.16
155  */
156 typedef enum
157 {
158   GST_RTCP_XR_TYPE_INVALID      = -1,
159   GST_RTCP_XR_TYPE_LRLE         = 1,
160   GST_RTCP_XR_TYPE_DRLE         = 2,
161   GST_RTCP_XR_TYPE_PRT          = 3,
162   GST_RTCP_XR_TYPE_RRT          = 4,
163   GST_RTCP_XR_TYPE_DLRR         = 5,
164   GST_RTCP_XR_TYPE_SSUMM        = 6,
165   GST_RTCP_XR_TYPE_VOIP_METRICS = 7
166 } GstRTCPXRType;
167 
168 /**
169  * GST_RTCP_MAX_SDES:
170  *
171  * The maximum text length for an SDES item.
172  */
173 #define GST_RTCP_MAX_SDES 255
174 
175 /**
176  * GST_RTCP_MAX_RB_COUNT:
177  *
178  * The maximum amount of Receiver report blocks in RR and SR messages.
179  */
180 #define GST_RTCP_MAX_RB_COUNT   31
181 
182 /**
183  * GST_RTCP_MAX_SDES_ITEM_COUNT:
184  *
185  * The maximum amount of SDES items.
186  */
187 #define GST_RTCP_MAX_SDES_ITEM_COUNT   31
188 
189 /**
190  * GST_RTCP_MAX_BYE_SSRC_COUNT:
191  *
192  * The maximum amount of SSRCs in a BYE packet.
193  */
194 #define GST_RTCP_MAX_BYE_SSRC_COUNT   31
195 
196 /**
197  * GST_RTCP_VALID_MASK:
198  *
199  * Mask for version, padding bit and packet type pair
200  */
201 #define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
202 
203 /**
204  * GST_RTCP_REDUCED_SIZE_VALID_MASK:
205  *
206  * Mask for version, padding bit and packet type pair allowing reduced size
207  * packets, basically it accepts other types than RR and SR
208  */
209 #define GST_RTCP_REDUCED_SIZE_VALID_MASK (0xc000 | 0x2000 | 0xf8)
210 
211 /**
212  * GST_RTCP_VALID_VALUE:
213  *
214  * Valid value for the first two bytes of an RTCP packet after applying
215  * #GST_RTCP_VALID_MASK to them.
216  */
217 #define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)
218 
219 typedef struct _GstRTCPBuffer GstRTCPBuffer;
220 typedef struct _GstRTCPPacket GstRTCPPacket;
221 
222 struct _GstRTCPBuffer
223 {
224   GstBuffer   *buffer;
225   GstMapInfo   map;
226 };
227 
228 #define GST_RTCP_BUFFER_INIT { NULL, GST_MAP_INFO_INIT }
229 
230 /**
231  * GstRTCPPacket:
232  * @rtcp: pointer to RTCP buffer
233  * @offset: offset of packet in buffer data
234  *
235  * Data structure that points to a packet at @offset in @buffer.
236  * The size of the structure is made public to allow stack allocations.
237  */
238 struct _GstRTCPPacket
239 {
240   /*< public >*/
241   GstRTCPBuffer *rtcp;
242   guint          offset;
243 
244   /*< private >*/
245   gboolean       padding;      /* padding field of current packet */
246   guint8         count;        /* count field of current packet */
247   GstRTCPType    type;         /* type of current packet */
248   guint16        length;       /* length of current packet in 32-bits words minus one, this is validated when doing _get_first_packet() and _move_to_next() */
249 
250   guint          item_offset;  /* current item offset for navigating SDES */
251   guint          item_count;   /* current item count */
252   guint          entry_offset; /* current entry offset for navigating SDES items */
253 };
254 
255 /* creating buffers */
256 
257 GST_RTP_API
258 GstBuffer*      gst_rtcp_buffer_new_take_data     (gpointer data, guint len);
259 
260 GST_RTP_API
261 GstBuffer*      gst_rtcp_buffer_new_copy_data     (gconstpointer data, guint len);
262 
263 GST_RTP_API
264 gboolean        gst_rtcp_buffer_validate_data     (guint8 *data, guint len);
265 
266 GST_RTP_API
267 gboolean        gst_rtcp_buffer_validate          (GstBuffer *buffer);
268 
269 GST_RTP_API
270 gboolean        gst_rtcp_buffer_validate_data_reduced   (guint8 *data, guint len);
271 
272 GST_RTP_API
273 gboolean        gst_rtcp_buffer_validate_reduced        (GstBuffer *buffer);
274 
275 
276 GST_RTP_API
277 GstBuffer*      gst_rtcp_buffer_new               (guint mtu);
278 
279 GST_RTP_API
280 gboolean        gst_rtcp_buffer_map               (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp);
281 
282 GST_RTP_API
283 gboolean        gst_rtcp_buffer_unmap             (GstRTCPBuffer *rtcp);
284 
285 /* adding/retrieving packets */
286 
287 GST_RTP_API
288 guint           gst_rtcp_buffer_get_packet_count  (GstRTCPBuffer *rtcp);
289 
290 GST_RTP_API
291 gboolean        gst_rtcp_buffer_get_first_packet  (GstRTCPBuffer *rtcp, GstRTCPPacket *packet);
292 
293 GST_RTP_API
294 gboolean        gst_rtcp_packet_move_to_next      (GstRTCPPacket *packet);
295 
296 GST_RTP_API
297 gboolean        gst_rtcp_buffer_add_packet        (GstRTCPBuffer *rtcp, GstRTCPType type,
298                                                    GstRTCPPacket *packet);
299 
300 GST_RTP_API
301 gboolean        gst_rtcp_packet_remove            (GstRTCPPacket *packet);
302 
303 /* working with packets */
304 
305 GST_RTP_API
306 gboolean        gst_rtcp_packet_get_padding       (GstRTCPPacket *packet);
307 
308 GST_RTP_API
309 guint8          gst_rtcp_packet_get_count         (GstRTCPPacket *packet);
310 
311 GST_RTP_API
312 GstRTCPType     gst_rtcp_packet_get_type          (GstRTCPPacket *packet);
313 
314 GST_RTP_API
315 guint16         gst_rtcp_packet_get_length        (GstRTCPPacket *packet);
316 
317 
318 /* sender reports */
319 
320 GST_RTP_API
321 void            gst_rtcp_packet_sr_get_sender_info    (GstRTCPPacket *packet, guint32 *ssrc,
322                                                        guint64 *ntptime, guint32 *rtptime,
323                                                        guint32 *packet_count, guint32 *octet_count);
324 
325 GST_RTP_API
326 void            gst_rtcp_packet_sr_set_sender_info    (GstRTCPPacket *packet, guint32 ssrc,
327                                                        guint64 ntptime, guint32 rtptime,
328                                                        guint32 packet_count, guint32 octet_count);
329 /* receiver reports */
330 
331 GST_RTP_API
332 guint32         gst_rtcp_packet_rr_get_ssrc           (GstRTCPPacket *packet);
333 
334 GST_RTP_API
335 void            gst_rtcp_packet_rr_set_ssrc           (GstRTCPPacket *packet, guint32 ssrc);
336 
337 
338 /* report blocks for SR and RR */
339 
340 GST_RTP_API
341 guint           gst_rtcp_packet_get_rb_count          (GstRTCPPacket *packet);
342 
343 GST_RTP_API
344 void            gst_rtcp_packet_get_rb                (GstRTCPPacket *packet, guint nth, guint32 *ssrc,
345                                                        guint8 *fractionlost, gint32 *packetslost,
346                                                        guint32 *exthighestseq, guint32 *jitter,
347                                                        guint32 *lsr, guint32 *dlsr);
348 
349 GST_RTP_API
350 gboolean        gst_rtcp_packet_add_rb                (GstRTCPPacket *packet, guint32 ssrc,
351                                                        guint8 fractionlost, gint32 packetslost,
352                                                        guint32 exthighestseq, guint32 jitter,
353                                                        guint32 lsr, guint32 dlsr);
354 
355 GST_RTP_API
356 void            gst_rtcp_packet_set_rb                (GstRTCPPacket *packet, guint nth, guint32 ssrc,
357                                                        guint8 fractionlost, gint32 packetslost,
358                                                        guint32 exthighestseq, guint32 jitter,
359                                                        guint32 lsr, guint32 dlsr);
360 
361 /* profile-specific extensions for SR and RR */
362 
363 GST_RTP_API
364 gboolean        gst_rtcp_packet_add_profile_specific_ext        (GstRTCPPacket * packet,
365                                                                  const guint8 * data, guint len);
366 
367 GST_RTP_API
368 guint16         gst_rtcp_packet_get_profile_specific_ext_length (GstRTCPPacket * packet);
369 
370 GST_RTP_API
371 gboolean        gst_rtcp_packet_get_profile_specific_ext        (GstRTCPPacket * packet,
372                                                                  guint8 ** data, guint * len);
373 
374 GST_RTP_API
375 gboolean        gst_rtcp_packet_copy_profile_specific_ext       (GstRTCPPacket * packet,
376                                                                  guint8 ** data, guint * len);
377 
378 /* source description packet */
379 
380 GST_RTP_API
381 guint           gst_rtcp_packet_sdes_get_item_count   (GstRTCPPacket *packet);
382 
383 GST_RTP_API
384 gboolean        gst_rtcp_packet_sdes_first_item       (GstRTCPPacket *packet);
385 
386 GST_RTP_API
387 gboolean        gst_rtcp_packet_sdes_next_item        (GstRTCPPacket *packet);
388 
389 GST_RTP_API
390 guint32         gst_rtcp_packet_sdes_get_ssrc         (GstRTCPPacket *packet);
391 
392 GST_RTP_API
393 gboolean        gst_rtcp_packet_sdes_first_entry      (GstRTCPPacket *packet);
394 
395 GST_RTP_API
396 gboolean        gst_rtcp_packet_sdes_next_entry       (GstRTCPPacket *packet);
397 
398 GST_RTP_API
399 gboolean        gst_rtcp_packet_sdes_get_entry        (GstRTCPPacket *packet,
400                                                        GstRTCPSDESType *type, guint8 *len,
401                                                        guint8 **data);
402 
403 GST_RTP_API
404 gboolean        gst_rtcp_packet_sdes_copy_entry       (GstRTCPPacket *packet,
405                                                        GstRTCPSDESType *type, guint8 *len,
406                                                        guint8 **data);
407 
408 GST_RTP_API
409 gboolean        gst_rtcp_packet_sdes_add_item         (GstRTCPPacket *packet, guint32 ssrc);
410 
411 GST_RTP_API
412 gboolean        gst_rtcp_packet_sdes_add_entry        (GstRTCPPacket *packet, GstRTCPSDESType type,
413                                                        guint8 len, const guint8 *data);
414 
415 /* bye packet */
416 
417 GST_RTP_API
418 guint           gst_rtcp_packet_bye_get_ssrc_count    (GstRTCPPacket *packet);
419 
420 GST_RTP_API
421 guint32         gst_rtcp_packet_bye_get_nth_ssrc      (GstRTCPPacket *packet, guint nth);
422 
423 GST_RTP_API
424 gboolean        gst_rtcp_packet_bye_add_ssrc          (GstRTCPPacket *packet, guint32 ssrc);
425 
426 GST_RTP_API
427 gboolean        gst_rtcp_packet_bye_add_ssrcs         (GstRTCPPacket *packet, guint32 *ssrc, guint len);
428 
429 GST_RTP_API
430 guint8          gst_rtcp_packet_bye_get_reason_len    (GstRTCPPacket *packet);
431 
432 GST_RTP_API
433 gchar*          gst_rtcp_packet_bye_get_reason        (GstRTCPPacket *packet);
434 
435 GST_RTP_API
436 gboolean        gst_rtcp_packet_bye_set_reason        (GstRTCPPacket *packet, const gchar *reason);
437 
438 /* app packets */
439 
440 GST_RTP_API
441 void            gst_rtcp_packet_app_set_subtype       (GstRTCPPacket * packet, guint8 subtype);
442 
443 GST_RTP_API
444 guint8          gst_rtcp_packet_app_get_subtype       (GstRTCPPacket * packet);
445 
446 GST_RTP_API
447 void            gst_rtcp_packet_app_set_ssrc          (GstRTCPPacket * packet, guint32 ssrc);
448 
449 GST_RTP_API
450 guint32         gst_rtcp_packet_app_get_ssrc          (GstRTCPPacket * packet);
451 
452 GST_RTP_API
453 void            gst_rtcp_packet_app_set_name          (GstRTCPPacket * packet, const gchar *name);
454 
455 GST_RTP_API
456 const gchar*    gst_rtcp_packet_app_get_name          (GstRTCPPacket * packet);
457 
458 GST_RTP_API
459 guint16         gst_rtcp_packet_app_get_data_length   (GstRTCPPacket * packet);
460 
461 GST_RTP_API
462 gboolean        gst_rtcp_packet_app_set_data_length   (GstRTCPPacket * packet, guint16 wordlen);
463 
464 GST_RTP_API
465 guint8*         gst_rtcp_packet_app_get_data          (GstRTCPPacket * packet);
466 
467 /* feedback packets */
468 
469 GST_RTP_API
470 guint32         gst_rtcp_packet_fb_get_sender_ssrc    (GstRTCPPacket *packet);
471 
472 GST_RTP_API
473 void            gst_rtcp_packet_fb_set_sender_ssrc    (GstRTCPPacket *packet, guint32 ssrc);
474 
475 GST_RTP_API
476 guint32         gst_rtcp_packet_fb_get_media_ssrc     (GstRTCPPacket *packet);
477 
478 GST_RTP_API
479 void            gst_rtcp_packet_fb_set_media_ssrc     (GstRTCPPacket *packet, guint32 ssrc);
480 
481 GST_RTP_API
482 GstRTCPFBType   gst_rtcp_packet_fb_get_type           (GstRTCPPacket *packet);
483 
484 GST_RTP_API
485 void            gst_rtcp_packet_fb_set_type           (GstRTCPPacket *packet, GstRTCPFBType type);
486 
487 GST_RTP_API
488 guint16         gst_rtcp_packet_fb_get_fci_length     (GstRTCPPacket *packet);
489 
490 GST_RTP_API
491 gboolean        gst_rtcp_packet_fb_set_fci_length     (GstRTCPPacket *packet, guint16 wordlen);
492 
493 GST_RTP_API
494 guint8 *        gst_rtcp_packet_fb_get_fci            (GstRTCPPacket *packet);
495 
496 /* helper functions */
497 
498 GST_RTP_API
499 guint64         gst_rtcp_ntp_to_unix                  (guint64 ntptime);
500 
501 GST_RTP_API
502 guint64         gst_rtcp_unix_to_ntp                  (guint64 unixtime);
503 
504 GST_RTP_API
505 const gchar *   gst_rtcp_sdes_type_to_name            (GstRTCPSDESType type);
506 
507 GST_RTP_API
508 GstRTCPSDESType gst_rtcp_sdes_name_to_type            (const gchar *name);
509 
510 /* extended report */
511 
512 GST_RTP_API
513 guint32         gst_rtcp_packet_xr_get_ssrc           (GstRTCPPacket *packet);
514 
515 GST_RTP_API
516 gboolean        gst_rtcp_packet_xr_first_rb           (GstRTCPPacket *packet);
517 
518 GST_RTP_API
519 gboolean        gst_rtcp_packet_xr_next_rb            (GstRTCPPacket * packet);
520 
521 GST_RTP_API
522 GstRTCPXRType   gst_rtcp_packet_xr_get_block_type     (GstRTCPPacket * packet);
523 
524 GST_RTP_API
525 guint16         gst_rtcp_packet_xr_get_block_length   (GstRTCPPacket * packet);
526 
527 GST_RTP_API
528 gboolean        gst_rtcp_packet_xr_get_rle_info       (GstRTCPPacket * packet,
529                                                        guint32 * ssrc, guint8 * thinning,
530                                                        guint16 * begin_seq, guint16 * end_seq,
531                                                        guint32 * chunk_count);
532 
533 GST_RTP_API
534 gboolean        gst_rtcp_packet_xr_get_rle_nth_chunk  (GstRTCPPacket * packet, guint nth,
535                                                        guint16 * chunk);
536 
537 GST_RTP_API
538 gboolean        gst_rtcp_packet_xr_get_prt_info       (GstRTCPPacket * packet,
539                                                        guint32 * ssrc, guint8 * thinning,
540                                                        guint16 * begin_seq, guint16 * end_seq);
541 
542 GST_RTP_API
543 gboolean        gst_rtcp_packet_xr_get_prt_by_seq     (GstRTCPPacket * packet, guint16 seq,
544                                                        guint32 * receipt_time);
545 
546 GST_RTP_API
547 gboolean        gst_rtcp_packet_xr_get_rrt            (GstRTCPPacket * packet, guint64 * timestamp);
548 
549 GST_RTP_API
550 gboolean        gst_rtcp_packet_xr_get_dlrr_block     (GstRTCPPacket * packet,
551                                                        guint nth, guint32 * ssrc,
552                                                        guint32 * last_rr, guint32 * delay);
553 
554 GST_RTP_API
555 gboolean        gst_rtcp_packet_xr_get_summary_info   (GstRTCPPacket * packet, guint32 * ssrc,
556                                                        guint16 * begin_seq, guint16 * end_seq);
557 
558 GST_RTP_API
559 gboolean        gst_rtcp_packet_xr_get_summary_pkt    (GstRTCPPacket * packet,
560                                                        guint32 * lost_packets, guint32 * dup_packets);
561 
562 GST_RTP_API
563 gboolean        gst_rtcp_packet_xr_get_summary_jitter (GstRTCPPacket * packet,
564                                                        guint32 * min_jitter, guint32 * max_jitter,
565                                                        guint32 * mean_jitter, guint32 * dev_jitter);
566 
567 GST_RTP_API
568 gboolean        gst_rtcp_packet_xr_get_summary_ttl    (GstRTCPPacket * packet, gboolean * is_ipv4,
569                                                        guint8 * min_ttl, guint8 * max_ttl,
570                                                        guint8 * mean_ttl, guint8 * dev_ttl);
571 
572 GST_RTP_API
573 gboolean        gst_rtcp_packet_xr_get_voip_metrics_ssrc        (GstRTCPPacket * packet, guint32 * ssrc);
574 
575 GST_RTP_API
576 gboolean        gst_rtcp_packet_xr_get_voip_packet_metrics      (GstRTCPPacket * packet,
577                                                                  guint8 * loss_rate, guint8 * discard_rate);
578 
579 GST_RTP_API
580 gboolean        gst_rtcp_packet_xr_get_voip_burst_metrics       (GstRTCPPacket * packet,
581                                                                  guint8 * burst_density, guint8 * gap_density,
582                                                                  guint16 * burst_duration, guint16 * gap_duration);
583 
584 GST_RTP_API
585 gboolean        gst_rtcp_packet_xr_get_voip_delay_metrics       (GstRTCPPacket * packet,
586                                                                  guint16 * roundtrip_delay,
587                                                                  guint16 * end_system_delay);
588 
589 GST_RTP_API
590 gboolean        gst_rtcp_packet_xr_get_voip_signal_metrics      (GstRTCPPacket * packet,
591                                                                  guint8 * signal_level, guint8 * noise_level,
592                                                                  guint8 * rerl, guint8 * gmin);
593 
594 GST_RTP_API
595 gboolean        gst_rtcp_packet_xr_get_voip_quality_metrics     (GstRTCPPacket * packet,
596                                                                  guint8 * r_factor, guint8 * ext_r_factor,
597                                                                  guint8 * mos_lq, guint8 * mos_cq);
598 
599 GST_RTP_API
600 gboolean        gst_rtcp_packet_xr_get_voip_configuration_params        (GstRTCPPacket * packet,
601                                                                          guint8 * gmin, guint8 * rx_config);
602 
603 GST_RTP_API
604 gboolean        gst_rtcp_packet_xr_get_voip_jitter_buffer_params        (GstRTCPPacket * packet,
605                                                                          guint16 * jb_nominal,
606                                                                          guint16 * jb_maximum,
607                                                                          guint16 * jb_abs_max);
608 
609 G_END_DECLS
610 
611 #endif /* __GST_RTCPBUFFER_H__ */
612 
613