rtp: Add support for multiple memory blocks in RTP
[platform/upstream/gstreamer.git] / gst-libs / gst / rtp / gstrtpbuffer.h
1 /* GStreamer
2  * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
3  *               <2005> Wim Taymans <wim@fluendo.com>
4  *
5  * gstrtpbuffer.h: various helper functions to manipulate buffers
6  *     with RTP payload.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23
24 #ifndef __GST_RTPBUFFER_H__
25 #define __GST_RTPBUFFER_H__
26
27 #include <gst/gst.h>
28 #include <gst/rtp/gstrtppayloads.h>
29
30 G_BEGIN_DECLS
31
32 /**
33  * GST_RTP_VERSION:
34  *
35  * The supported RTP version 2.
36  */
37 #define GST_RTP_VERSION 2
38
39
40 typedef struct _GstRTPBuffer GstRTPBuffer;
41
42 /**
43  * GstRTPBuffer:
44  * @buffer: pointer to RTP buffer
45  * @state: internal state
46  * @n_map: number of mappings in @map
47  * @map: array of #GstMapInfo
48  *
49  * Data structure that points to an RTP packet.
50  * The size of the structure is made public to allow stack allocations.
51  */
52 struct _GstRTPBuffer
53 {
54   GstBuffer   *buffer;
55   guint        state;
56   guint        n_map;
57   gpointer     data[4];
58   gsize        size[4];
59   GstMapInfo   map[4];
60 };
61
62 #define GST_RTP_BUFFER_INIT { NULL, 0, 0, { NULL, NULL, NULL, NULL}, { 0, 0, 0, 0 }, \
63   { GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT, GST_MAP_INFO_INIT} }
64
65 /* creating buffers */
66 void            gst_rtp_buffer_allocate_data         (GstBuffer *buffer, guint payload_len,
67                                                       guint8 pad_len, guint8 csrc_count);
68
69 GstBuffer*      gst_rtp_buffer_new_take_data         (gpointer data, gsize len);
70 GstBuffer*      gst_rtp_buffer_new_copy_data         (gpointer data, gsize len);
71 GstBuffer*      gst_rtp_buffer_new_allocate          (guint payload_len, guint8 pad_len, guint8 csrc_count);
72 GstBuffer*      gst_rtp_buffer_new_allocate_len      (guint packet_len, guint8 pad_len, guint8 csrc_count);
73
74 guint           gst_rtp_buffer_calc_header_len       (guint8 csrc_count);
75 guint           gst_rtp_buffer_calc_packet_len       (guint payload_len, guint8 pad_len, guint8 csrc_count);
76 guint           gst_rtp_buffer_calc_payload_len      (guint packet_len, guint8 pad_len, guint8 csrc_count);
77
78 gboolean        gst_rtp_buffer_map                   (GstBuffer *buffer, GstMapFlags flags, GstRTPBuffer *rtp);
79 void            gst_rtp_buffer_unmap                 (GstRTPBuffer *rtp);
80
81 void            gst_rtp_buffer_set_packet_len        (GstRTPBuffer *rtp, guint len);
82 guint           gst_rtp_buffer_get_packet_len        (GstRTPBuffer *rtp);
83
84 guint           gst_rtp_buffer_get_header_len        (GstRTPBuffer *rtp);
85
86 guint8          gst_rtp_buffer_get_version           (GstRTPBuffer *rtp);
87 void            gst_rtp_buffer_set_version           (GstRTPBuffer *rtp, guint8 version);
88
89 gboolean        gst_rtp_buffer_get_padding           (GstRTPBuffer *rtp);
90 void            gst_rtp_buffer_set_padding           (GstRTPBuffer *rtp, gboolean padding);
91 void            gst_rtp_buffer_pad_to                (GstRTPBuffer *rtp, guint len);
92
93 gboolean        gst_rtp_buffer_get_extension         (GstRTPBuffer *rtp);
94 void            gst_rtp_buffer_set_extension         (GstRTPBuffer *rtp, gboolean extension);
95 gboolean        gst_rtp_buffer_get_extension_data    (GstRTPBuffer *rtp, guint16 *bits,
96                                                       gpointer *data, guint *wordlen);
97 gboolean        gst_rtp_buffer_set_extension_data    (GstRTPBuffer *rtp, guint16 bits, guint16 length);
98
99 guint32         gst_rtp_buffer_get_ssrc              (GstRTPBuffer *rtp);
100 void            gst_rtp_buffer_set_ssrc              (GstRTPBuffer *rtp, guint32 ssrc);
101
102 guint8          gst_rtp_buffer_get_csrc_count        (GstRTPBuffer *rtp);
103 guint32         gst_rtp_buffer_get_csrc              (GstRTPBuffer *rtp, guint8 idx);
104 void            gst_rtp_buffer_set_csrc              (GstRTPBuffer *rtp, guint8 idx, guint32 csrc);
105
106 gboolean        gst_rtp_buffer_get_marker            (GstRTPBuffer *rtp);
107 void            gst_rtp_buffer_set_marker            (GstRTPBuffer *rtp, gboolean marker);
108
109 guint8          gst_rtp_buffer_get_payload_type      (GstRTPBuffer *rtp);
110 void            gst_rtp_buffer_set_payload_type      (GstRTPBuffer *rtp, guint8 payload_type);
111
112 guint16         gst_rtp_buffer_get_seq               (GstRTPBuffer *rtp);
113 void            gst_rtp_buffer_set_seq               (GstRTPBuffer *rtp, guint16 seq);
114
115 guint32         gst_rtp_buffer_get_timestamp         (GstRTPBuffer *rtp);
116 void            gst_rtp_buffer_set_timestamp         (GstRTPBuffer *rtp, guint32 timestamp);
117
118 GstBuffer*      gst_rtp_buffer_get_payload_buffer    (GstRTPBuffer *rtp);
119 GstBuffer*      gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp, guint offset, guint len);
120
121 guint           gst_rtp_buffer_get_payload_len       (GstRTPBuffer *rtp);
122 gpointer        gst_rtp_buffer_get_payload           (GstRTPBuffer *rtp);
123
124 /* some helpers */
125 guint32         gst_rtp_buffer_default_clock_rate    (guint8 payload_type);
126 gint            gst_rtp_buffer_compare_seqnum        (guint16 seqnum1, guint16 seqnum2);
127 guint64         gst_rtp_buffer_ext_timestamp         (guint64 *exttimestamp, guint32 timestamp);
128
129 gboolean        gst_rtp_buffer_get_extension_onebyte_header  (GstRTPBuffer *rtp,
130                                                               guint8 id,
131                                                               guint nth,
132                                                               gpointer * data,
133                                                               guint * size);
134 gboolean        gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp,
135                                                               guint8 * appbits,
136                                                               guint8 id,
137                                                               guint nth,
138                                                               gpointer * data,
139                                                               guint * size);
140
141 gboolean       gst_rtp_buffer_add_extension_onebyte_header  (GstRTPBuffer *rtp,
142                                                              guint8 id,
143                                                              gpointer data,
144                                                              guint size);
145 gboolean       gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp,
146                                                              guint8 appbits,
147                                                              guint8 id,
148                                                              gpointer data,
149                                                              guint size);
150
151
152 G_END_DECLS
153
154 #endif /* __GST_RTPBUFFER_H__ */
155