Blame gst-libs/gst/rtp/gstrtcpbuffer.h

Packit 0652a1
/* GStreamer
Packit 0652a1
 * Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
Packit 0652a1
 *
Packit 0652a1
 * gstrtcpbuffer.h: various helper functions to manipulate buffers
Packit 0652a1
 *     with RTCP payload.
Packit 0652a1
 *
Packit 0652a1
 * This library is free software; you can redistribute it and/or
Packit 0652a1
 * modify it under the terms of the GNU Library General Public
Packit 0652a1
 * License as published by the Free Software Foundation; either
Packit 0652a1
 * version 2 of the License, or (at your option) any later version.
Packit 0652a1
 *
Packit 0652a1
 * This library is distributed in the hope that it will be useful,
Packit 0652a1
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 0652a1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 0652a1
 * Library General Public License for more details.
Packit 0652a1
 *
Packit 0652a1
 * You should have received a copy of the GNU Library General Public
Packit 0652a1
 * License along with this library; if not, write to the
Packit 0652a1
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit 0652a1
 * Boston, MA 02110-1301, USA.
Packit 0652a1
 */
Packit 0652a1
Packit 0652a1
#ifndef __GST_RTCPBUFFER_H__
Packit 0652a1
#define __GST_RTCPBUFFER_H__
Packit 0652a1
Packit 0652a1
#include <gst/gst.h>
Packit 0652a1
#include <gst/rtp/rtp-prelude.h>
Packit 0652a1
Packit 0652a1
G_BEGIN_DECLS
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_VERSION:
Packit 0652a1
 *
Packit 0652a1
 * The supported RTCP version 2.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_VERSION 2
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GstRTCPType:
Packit 0652a1
 * @GST_RTCP_TYPE_INVALID: Invalid type
Packit 0652a1
 * @GST_RTCP_TYPE_SR: Sender report
Packit 0652a1
 * @GST_RTCP_TYPE_RR: Receiver report
Packit 0652a1
 * @GST_RTCP_TYPE_SDES: Source description
Packit 0652a1
 * @GST_RTCP_TYPE_BYE: Goodbye
Packit 0652a1
 * @GST_RTCP_TYPE_APP: Application defined
Packit 0652a1
 * @GST_RTCP_TYPE_RTPFB: Transport layer feedback.
Packit 0652a1
 * @GST_RTCP_TYPE_PSFB: Payload-specific feedback.
Packit 0652a1
 * @GST_RTCP_TYPE_XR: Extended report.
Packit 0652a1
 *
Packit 0652a1
 * Different RTCP packet types.
Packit 0652a1
 */
Packit 0652a1
typedef enum
Packit 0652a1
{
Packit 0652a1
  GST_RTCP_TYPE_INVALID = 0,
Packit 0652a1
  GST_RTCP_TYPE_SR      = 200,
Packit 0652a1
  GST_RTCP_TYPE_RR      = 201,
Packit 0652a1
  GST_RTCP_TYPE_SDES    = 202,
Packit 0652a1
  GST_RTCP_TYPE_BYE     = 203,
Packit 0652a1
  GST_RTCP_TYPE_APP     = 204,
Packit 0652a1
  GST_RTCP_TYPE_RTPFB   = 205,
Packit 0652a1
  GST_RTCP_TYPE_PSFB    = 206,
Packit 0652a1
  GST_RTCP_TYPE_XR      = 207
Packit 0652a1
} GstRTCPType;
Packit 0652a1
Packit 0652a1
/* FIXME 2.0: backwards compatibility define for enum typo */
Packit 0652a1
#define GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GstRTCPFBType:
Packit 0652a1
 * @GST_RTCP_FB_TYPE_INVALID: Invalid type
Packit 0652a1
 * @GST_RTCP_RTPFB_TYPE_NACK: Generic NACK
Packit 0652a1
 * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request
Packit 0652a1
 * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate
Packit 0652a1
 *    Notification
Packit 0652a1
 * @GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ: Request an SR packet for early
Packit 0652a1
 *    synchronization
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_RPSI: Reference Picture Selection Indication
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_AFB: Application layer Feedback
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_FIR: Full Intra Request Command
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_TSTR: Temporal-Spatial Trade-off Request
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_TSTN: Temporal-Spatial Trade-off Notification
Packit 0652a1
 * @GST_RTCP_PSFB_TYPE_VBCN: Video Back Channel Message
Packit 0652a1
 *
Packit 0652a1
 * Different types of feedback messages.
Packit 0652a1
 */
Packit 0652a1
typedef enum
Packit 0652a1
{
Packit 0652a1
  /* generic */
Packit 0652a1
  GST_RTCP_FB_TYPE_INVALID        = 0,
Packit 0652a1
  /* RTPFB types */
Packit 0652a1
  GST_RTCP_RTPFB_TYPE_NACK        = 1,
Packit 0652a1
  /* RTPFB types assigned in RFC 5104 */
Packit 0652a1
  GST_RTCP_RTPFB_TYPE_TMMBR       = 3,
Packit 0652a1
  GST_RTCP_RTPFB_TYPE_TMMBN       = 4,
Packit 0652a1
  /* RTPFB types assigned in RFC 6051 */
Packit 0652a1
  GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ = 5,
Packit 0652a1
  /* PSFB types */
Packit 0652a1
  GST_RTCP_PSFB_TYPE_PLI          = 1,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_SLI          = 2,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_RPSI         = 3,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_AFB          = 15,
Packit 0652a1
  /* PSFB types assigned in RFC 5104 */
Packit 0652a1
  GST_RTCP_PSFB_TYPE_FIR          = 4,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_TSTR         = 5,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_TSTN         = 6,
Packit 0652a1
  GST_RTCP_PSFB_TYPE_VBCN         = 7,
Packit 0652a1
} GstRTCPFBType;
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GstRTCPSDESType:
Packit 0652a1
 * @GST_RTCP_SDES_INVALID: Invalid SDES entry
Packit 0652a1
 * @GST_RTCP_SDES_END: End of SDES list
Packit 0652a1
 * @GST_RTCP_SDES_CNAME: Canonical name
Packit 0652a1
 * @GST_RTCP_SDES_NAME: User name
Packit 0652a1
 * @GST_RTCP_SDES_EMAIL: User's electronic mail address
Packit 0652a1
 * @GST_RTCP_SDES_PHONE: User's phone number
Packit 0652a1
 * @GST_RTCP_SDES_LOC: Geographic user location
Packit 0652a1
 * @GST_RTCP_SDES_TOOL: Name of application or tool
Packit 0652a1
 * @GST_RTCP_SDES_NOTE: Notice about the source
Packit 0652a1
 * @GST_RTCP_SDES_PRIV: Private extensions
Packit 0652a1
 *
Packit 0652a1
 * Different types of SDES content.
Packit 0652a1
 */
Packit 0652a1
typedef enum
Packit 0652a1
{
Packit 0652a1
  GST_RTCP_SDES_INVALID  = -1,
Packit 0652a1
  GST_RTCP_SDES_END      = 0,
Packit 0652a1
  GST_RTCP_SDES_CNAME    = 1,
Packit 0652a1
  GST_RTCP_SDES_NAME     = 2,
Packit 0652a1
  GST_RTCP_SDES_EMAIL    = 3,
Packit 0652a1
  GST_RTCP_SDES_PHONE    = 4,
Packit 0652a1
  GST_RTCP_SDES_LOC      = 5,
Packit 0652a1
  GST_RTCP_SDES_TOOL     = 6,
Packit 0652a1
  GST_RTCP_SDES_NOTE     = 7,
Packit 0652a1
  GST_RTCP_SDES_PRIV     = 8
Packit 0652a1
} GstRTCPSDESType;
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GstRTCPXRType:
Packit 0652a1
 * @GST_RTCP_XR_TYPE_INVALID: Invalid XR Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_LRLE: Loss RLE Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_DRLE: Duplicate RLE Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_PRT: Packet Receipt Times Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_RRT: Receiver Reference Time Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_DLRR: Delay since the last Receiver Report
Packit 0652a1
 * @GST_RTCP_XR_TYPE_SSUMM: Statistics Summary Report Block
Packit 0652a1
 * @GST_RTCP_XR_TYPE_VOIP_METRICS: VoIP Metrics Report Block
Packit 0652a1
 *
Packit 0652a1
 * Types of RTCP Extended Reports, those are defined in RFC 3611 and other RFCs
Packit 0652a1
 * according to the [IANA registry](https://www.iana.org/assignments/rtcp-xr-block-types/rtcp-xr-block-types.xhtml).
Packit 0652a1
 *
Packit 0652a1
 * Since: 1.16
Packit 0652a1
 */
Packit 0652a1
typedef enum
Packit 0652a1
{
Packit 0652a1
  GST_RTCP_XR_TYPE_INVALID      = -1,
Packit 0652a1
  GST_RTCP_XR_TYPE_LRLE         = 1,
Packit 0652a1
  GST_RTCP_XR_TYPE_DRLE         = 2,
Packit 0652a1
  GST_RTCP_XR_TYPE_PRT          = 3,
Packit 0652a1
  GST_RTCP_XR_TYPE_RRT          = 4,
Packit 0652a1
  GST_RTCP_XR_TYPE_DLRR         = 5,
Packit 0652a1
  GST_RTCP_XR_TYPE_SSUMM        = 6,
Packit 0652a1
  GST_RTCP_XR_TYPE_VOIP_METRICS = 7
Packit 0652a1
} GstRTCPXRType;
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_MAX_SDES:
Packit 0652a1
 *
Packit 0652a1
 * The maximum text length for an SDES item.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_MAX_SDES 255
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_MAX_RB_COUNT:
Packit 0652a1
 *
Packit 0652a1
 * The maximum amount of Receiver report blocks in RR and SR messages.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_MAX_RB_COUNT   31
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_MAX_SDES_ITEM_COUNT:
Packit 0652a1
 *
Packit 0652a1
 * The maximum amount of SDES items.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_MAX_SDES_ITEM_COUNT   31
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_MAX_BYE_SSRC_COUNT:
Packit 0652a1
 *
Packit 0652a1
 * The maximum amount of SSRCs in a BYE packet.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_MAX_BYE_SSRC_COUNT   31
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_VALID_MASK:
Packit 0652a1
 *
Packit 0652a1
 * Mask for version, padding bit and packet type pair
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_REDUCED_SIZE_VALID_MASK:
Packit 0652a1
 *
Packit 0652a1
 * Mask for version, padding bit and packet type pair allowing reduced size
Packit 0652a1
 * packets, basically it accepts other types than RR and SR
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_REDUCED_SIZE_VALID_MASK (0xc000 | 0x2000 | 0xf8)
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GST_RTCP_VALID_VALUE:
Packit 0652a1
 *
Packit 0652a1
 * Valid value for the first two bytes of an RTCP packet after applying
Packit 0652a1
 * #GST_RTCP_VALID_MASK to them.
Packit 0652a1
 */
Packit 0652a1
#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)
Packit 0652a1
Packit 0652a1
typedef struct _GstRTCPBuffer GstRTCPBuffer;
Packit 0652a1
typedef struct _GstRTCPPacket GstRTCPPacket;
Packit 0652a1
Packit 0652a1
struct _GstRTCPBuffer
Packit 0652a1
{
Packit 0652a1
  GstBuffer   *buffer;
Packit 0652a1
  GstMapInfo   map;
Packit 0652a1
};
Packit 0652a1
Packit 0652a1
#define GST_RTCP_BUFFER_INIT { NULL, GST_MAP_INFO_INIT }
Packit 0652a1
Packit 0652a1
/**
Packit 0652a1
 * GstRTCPPacket:
Packit 0652a1
 * @rtcp: pointer to RTCP buffer
Packit 0652a1
 * @offset: offset of packet in buffer data
Packit 0652a1
 *
Packit 0652a1
 * Data structure that points to a packet at @offset in @buffer.
Packit 0652a1
 * The size of the structure is made public to allow stack allocations.
Packit 0652a1
 */
Packit 0652a1
struct _GstRTCPPacket
Packit 0652a1
{
Packit 0652a1
  /*< public >*/
Packit 0652a1
  GstRTCPBuffer *rtcp;
Packit 0652a1
  guint          offset;
Packit 0652a1
Packit 0652a1
  /*< private >*/
Packit 0652a1
  gboolean       padding;      /* padding field of current packet */
Packit 0652a1
  guint8         count;        /* count field of current packet */
Packit 0652a1
  GstRTCPType    type;         /* type of current packet */
Packit 0652a1
  guint16        length;       /* length of current packet in 32-bits words minus one, this is validated when doing _get_first_packet() and _move_to_next() */
Packit 0652a1
Packit 0652a1
  guint          item_offset;  /* current item offset for navigating SDES */
Packit 0652a1
  guint          item_count;   /* current item count */
Packit 0652a1
  guint          entry_offset; /* current entry offset for navigating SDES items */
Packit 0652a1
};
Packit 0652a1
Packit 0652a1
/* creating buffers */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstBuffer*      gst_rtcp_buffer_new_take_data     (gpointer data, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstBuffer*      gst_rtcp_buffer_new_copy_data     (gconstpointer data, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_validate_data     (guint8 *data, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_validate          (GstBuffer *buffer);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_validate_data_reduced   (guint8 *data, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_validate_reduced        (GstBuffer *buffer);
Packit 0652a1
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstBuffer*      gst_rtcp_buffer_new               (guint mtu);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_map               (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_unmap             (GstRTCPBuffer *rtcp);
Packit 0652a1
Packit 0652a1
/* adding/retrieving packets */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint           gst_rtcp_buffer_get_packet_count  (GstRTCPBuffer *rtcp);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_get_first_packet  (GstRTCPBuffer *rtcp, GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_move_to_next      (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_buffer_add_packet        (GstRTCPBuffer *rtcp, GstRTCPType type,
Packit 0652a1
                                                   GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_remove            (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
/* working with packets */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_get_padding       (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint8          gst_rtcp_packet_get_count         (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstRTCPType     gst_rtcp_packet_get_type          (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint16         gst_rtcp_packet_get_length        (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
Packit 0652a1
/* sender reports */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_sr_get_sender_info    (GstRTCPPacket *packet, guint32 *ssrc,
Packit 0652a1
                                                       guint64 *ntptime, guint32 *rtptime,
Packit 0652a1
                                                       guint32 *packet_count, guint32 *octet_count);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_sr_set_sender_info    (GstRTCPPacket *packet, guint32 ssrc,
Packit 0652a1
                                                       guint64 ntptime, guint32 rtptime,
Packit 0652a1
                                                       guint32 packet_count, guint32 octet_count);
Packit 0652a1
/* receiver reports */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_rr_get_ssrc           (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_rr_set_ssrc           (GstRTCPPacket *packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
Packit 0652a1
/* report blocks for SR and RR */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint           gst_rtcp_packet_get_rb_count          (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_get_rb                (GstRTCPPacket *packet, guint nth, guint32 *ssrc,
Packit 0652a1
                                                       guint8 *fractionlost, gint32 *packetslost,
Packit 0652a1
                                                       guint32 *exthighestseq, guint32 *jitter,
Packit 0652a1
                                                       guint32 *lsr, guint32 *dlsr);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_add_rb                (GstRTCPPacket *packet, guint32 ssrc,
Packit 0652a1
                                                       guint8 fractionlost, gint32 packetslost,
Packit 0652a1
                                                       guint32 exthighestseq, guint32 jitter,
Packit 0652a1
                                                       guint32 lsr, guint32 dlsr);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_set_rb                (GstRTCPPacket *packet, guint nth, guint32 ssrc,
Packit 0652a1
                                                       guint8 fractionlost, gint32 packetslost,
Packit 0652a1
                                                       guint32 exthighestseq, guint32 jitter,
Packit 0652a1
                                                       guint32 lsr, guint32 dlsr);
Packit 0652a1
Packit 0652a1
/* profile-specific extensions for SR and RR */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_add_profile_specific_ext        (GstRTCPPacket * packet,
Packit 0652a1
                                                                 const guint8 * data, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint16         gst_rtcp_packet_get_profile_specific_ext_length (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_get_profile_specific_ext        (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 ** data, guint * len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_copy_profile_specific_ext       (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 ** data, guint * len);
Packit 0652a1
Packit 0652a1
/* source description packet */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint           gst_rtcp_packet_sdes_get_item_count   (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_first_item       (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_next_item        (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_sdes_get_ssrc         (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_first_entry      (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_next_entry       (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_get_entry        (GstRTCPPacket *packet,
Packit 0652a1
                                                       GstRTCPSDESType *type, guint8 *len,
Packit 0652a1
                                                       guint8 **data);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_copy_entry       (GstRTCPPacket *packet,
Packit 0652a1
                                                       GstRTCPSDESType *type, guint8 *len,
Packit 0652a1
                                                       guint8 **data);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_add_item         (GstRTCPPacket *packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_sdes_add_entry        (GstRTCPPacket *packet, GstRTCPSDESType type,
Packit 0652a1
                                                       guint8 len, const guint8 *data);
Packit 0652a1
Packit 0652a1
/* bye packet */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint           gst_rtcp_packet_bye_get_ssrc_count    (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_bye_get_nth_ssrc      (GstRTCPPacket *packet, guint nth);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_bye_add_ssrc          (GstRTCPPacket *packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_bye_add_ssrcs         (GstRTCPPacket *packet, guint32 *ssrc, guint len);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint8          gst_rtcp_packet_bye_get_reason_len    (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gchar*          gst_rtcp_packet_bye_get_reason        (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_bye_set_reason        (GstRTCPPacket *packet, const gchar *reason);
Packit 0652a1
Packit 0652a1
/* app packets */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_app_set_subtype       (GstRTCPPacket * packet, guint8 subtype);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint8          gst_rtcp_packet_app_get_subtype       (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_app_set_ssrc          (GstRTCPPacket * packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_app_get_ssrc          (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_app_set_name          (GstRTCPPacket * packet, const gchar *name);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
const gchar*    gst_rtcp_packet_app_get_name          (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint16         gst_rtcp_packet_app_get_data_length   (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_app_set_data_length   (GstRTCPPacket * packet, guint16 wordlen);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint8*         gst_rtcp_packet_app_get_data          (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
/* feedback packets */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_fb_get_sender_ssrc    (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_fb_set_sender_ssrc    (GstRTCPPacket *packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_fb_get_media_ssrc     (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_fb_set_media_ssrc     (GstRTCPPacket *packet, guint32 ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstRTCPFBType   gst_rtcp_packet_fb_get_type           (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
void            gst_rtcp_packet_fb_set_type           (GstRTCPPacket *packet, GstRTCPFBType type);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint16         gst_rtcp_packet_fb_get_fci_length     (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_fb_set_fci_length     (GstRTCPPacket *packet, guint16 wordlen);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint8 *        gst_rtcp_packet_fb_get_fci            (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
/* helper functions */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint64         gst_rtcp_ntp_to_unix                  (guint64 ntptime);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint64         gst_rtcp_unix_to_ntp                  (guint64 unixtime);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
const gchar *   gst_rtcp_sdes_type_to_name            (GstRTCPSDESType type);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstRTCPSDESType gst_rtcp_sdes_name_to_type            (const gchar *name);
Packit 0652a1
Packit 0652a1
/* extended report */
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint32         gst_rtcp_packet_xr_get_ssrc           (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_first_rb           (GstRTCPPacket *packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_next_rb            (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
GstRTCPXRType   gst_rtcp_packet_xr_get_block_type     (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
guint16         gst_rtcp_packet_xr_get_block_length   (GstRTCPPacket * packet);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_rle_info       (GstRTCPPacket * packet,
Packit 0652a1
                                                       guint32 * ssrc, guint8 * thinning,
Packit 0652a1
                                                       guint16 * begin_seq, guint16 * end_seq,
Packit 0652a1
                                                       guint32 * chunk_count);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_rle_nth_chunk  (GstRTCPPacket * packet, guint nth,
Packit 0652a1
                                                       guint16 * chunk);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_prt_info       (GstRTCPPacket * packet,
Packit 0652a1
                                                       guint32 * ssrc, guint8 * thinning,
Packit 0652a1
                                                       guint16 * begin_seq, guint16 * end_seq);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_prt_by_seq     (GstRTCPPacket * packet, guint16 seq,
Packit 0652a1
                                                       guint32 * receipt_time);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_rrt            (GstRTCPPacket * packet, guint64 * timestamp);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_dlrr_block     (GstRTCPPacket * packet,
Packit 0652a1
                                                       guint nth, guint32 * ssrc,
Packit 0652a1
                                                       guint32 * last_rr, guint32 * delay);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_summary_info   (GstRTCPPacket * packet, guint32 * ssrc,
Packit 0652a1
                                                       guint16 * begin_seq, guint16 * end_seq);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_summary_pkt    (GstRTCPPacket * packet,
Packit 0652a1
                                                       guint32 * lost_packets, guint32 * dup_packets);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_summary_jitter (GstRTCPPacket * packet,
Packit 0652a1
                                                       guint32 * min_jitter, guint32 * max_jitter,
Packit 0652a1
                                                       guint32 * mean_jitter, guint32 * dev_jitter);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_summary_ttl    (GstRTCPPacket * packet, gboolean * is_ipv4,
Packit 0652a1
                                                       guint8 * min_ttl, guint8 * max_ttl,
Packit 0652a1
                                                       guint8 * mean_ttl, guint8 * dev_ttl);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_metrics_ssrc        (GstRTCPPacket * packet, guint32 * ssrc);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_packet_metrics      (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 * loss_rate, guint8 * discard_rate);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_burst_metrics       (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 * burst_density, guint8 * gap_density,
Packit 0652a1
                                                                 guint16 * burst_duration, guint16 * gap_duration);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_delay_metrics       (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint16 * roundtrip_delay,
Packit 0652a1
                                                                 guint16 * end_system_delay);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_signal_metrics      (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 * signal_level, guint8 * noise_level,
Packit 0652a1
                                                                 guint8 * rerl, guint8 * gmin);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_quality_metrics     (GstRTCPPacket * packet,
Packit 0652a1
                                                                 guint8 * r_factor, guint8 * ext_r_factor,
Packit 0652a1
                                                                 guint8 * mos_lq, guint8 * mos_cq);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_configuration_params        (GstRTCPPacket * packet,
Packit 0652a1
                                                                         guint8 * gmin, guint8 * rx_config);
Packit 0652a1
Packit 0652a1
GST_RTP_API
Packit 0652a1
gboolean        gst_rtcp_packet_xr_get_voip_jitter_buffer_params        (GstRTCPPacket * packet,
Packit 0652a1
                                                                         guint16 * jb_nominal,
Packit 0652a1
                                                                         guint16 * jb_maximum,
Packit 0652a1
                                                                         guint16 * jb_abs_max);
Packit 0652a1
Packit 0652a1
G_END_DECLS
Packit 0652a1
Packit 0652a1
#endif /* __GST_RTCPBUFFER_H__ */
Packit 0652a1