typedef struct
{
+ GstRTCPBuffer rtcpbuf;
RTPSession *sess;
GstBuffer *rtcp;
GstClockTime current_time;
{
GstRTCPPacket *packet = &data->packet;
RTPSource *own = sess->source;
- GstRTCPBuffer rtcp = { NULL, };
+ GstRTCPBuffer *rtcp = &data->rtcpbuf;
data->rtcp = gst_rtcp_buffer_new (sess->mtu);
- gst_rtcp_buffer_map (data->rtcp, GST_MAP_WRITE, &rtcp);
+ gst_rtcp_buffer_map (data->rtcp, GST_MAP_READWRITE, rtcp);
if (RTP_SOURCE_IS_SENDER (own)) {
guint64 ntptime;
/* we are a sender, create SR */
GST_DEBUG ("create SR for SSRC %08x", own->ssrc);
- gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_SR, packet);
+ gst_rtcp_buffer_add_packet (rtcp, GST_RTCP_TYPE_SR, packet);
/* get latest stats */
rtp_source_get_new_sr (own, data->ntpnstime, data->running_time,
} else {
/* we are only receiver, create RR */
GST_DEBUG ("create RR for SSRC %08x", own->ssrc);
- gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_RR, packet);
+ gst_rtcp_buffer_add_packet (rtcp, GST_RTCP_TYPE_RR, packet);
gst_rtcp_packet_rr_set_ssrc (packet, own->ssrc);
}
-
- gst_rtcp_buffer_unmap (&rtcp);
}
/* construct a Sender or Receiver Report */
GstRTCPPacket *packet = &data->packet;
const GstStructure *sdes;
gint i, n_fields;
- GstRTCPBuffer rtcp = { NULL, };
-
- gst_rtcp_buffer_map (data->rtcp, GST_MAP_WRITE, &rtcp);
+ GstRTCPBuffer *rtcp = &data->rtcpbuf;
/* add SDES packet */
- gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_SDES, packet);
+ gst_rtcp_buffer_add_packet (rtcp, GST_RTCP_TYPE_SDES, packet);
gst_rtcp_packet_sdes_add_item (packet, sess->source->ssrc);
}
data->has_sdes = TRUE;
-
- gst_rtcp_buffer_unmap (&rtcp);
}
/* schedule a BYE packet */
session_bye (RTPSession * sess, ReportData * data)
{
GstRTCPPacket *packet = &data->packet;
- GstRTCPBuffer rtcp = { NULL, };
+ GstRTCPBuffer *rtcp = &data->rtcpbuf;
/* open packet */
session_start_rtcp (sess, data);
/* add SDES */
session_sdes (sess, data);
- gst_rtcp_buffer_map (data->rtcp, GST_MAP_WRITE, &rtcp);
-
/* add a BYE packet */
- gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_BYE, packet);
+ gst_rtcp_buffer_add_packet (rtcp, GST_RTCP_TYPE_BYE, packet);
gst_rtcp_packet_bye_add_ssrc (packet, sess->source->ssrc);
if (sess->bye_reason)
gst_rtcp_packet_bye_set_reason (packet, sess->bye_reason);
/* we have a BYE packet now */
data->is_bye = TRUE;
-
- gst_rtcp_buffer_unmap (&rtcp);
}
static gboolean
guint64 ntpnstime, GstClockTime running_time)
{
GstFlowReturn result = GST_FLOW_OK;
- ReportData data;
+ ReportData data = { GST_RTCP_BUFFER_INIT };
RTPSource *own;
GHashTable *table_copy;
gboolean notify = FALSE;
if (data.rtcp) {
gboolean do_not_suppress;
+ gst_rtcp_buffer_unmap (&data.rtcpbuf);
+
/* Give the user a change to add its own packet */
g_signal_emit (sess, rtp_session_signals[SIGNAL_ON_SENDING_RTCP], 0,
data.rtcp, data.is_early, &do_not_suppress);
RTP_SESSION_LOCK (sess);
- gst_rtcp_buffer_map (buffer, GST_MAP_WRITE, &rtcp);
+ gst_rtcp_buffer_map (buffer, GST_MAP_READWRITE, &rtcp);
g_hash_table_iter_init (&iter, sess->ssrcs[sess->mask_idx]);
while (g_hash_table_iter_next (&iter, &key, &value)) {