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