gboolean timeout_inactive_sources;
} ReportData;
-static void
+static gboolean
session_start_rtcp (RTPSession * sess, ReportData * data)
{
GstRTCPPacket *packet = &data->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,
- &ntptime, &rtptime, &packet_count, &octet_count);
+ if (!rtp_source_get_new_sr (own, data->ntpnstime, data->running_time,
+ &ntptime, &rtptime, &packet_count, &octet_count)) {
+ gst_rtcp_buffer_unmap (&data->rtcpbuf);
+ return FALSE;
+ }
/* store stats */
rtp_source_process_sr (own, data->current_time, ntptime, rtptime,
packet_count, octet_count);
gst_rtcp_buffer_add_packet (rtcp, GST_RTCP_TYPE_RR, packet);
gst_rtcp_packet_rr_set_ssrc (packet, own->ssrc);
}
+
+ return TRUE;
}
/* construct a Sender or Receiver Report */
data->source = source;
/* open packet */
- session_start_rtcp (sess, data);
+ if (!session_start_rtcp (sess, data)) {
+ GST_WARNING ("source %08x can not generate RTCP", source->ssrc);
+ return;
+ }
if (source->marked_bye) {
/* send BYE */
}
if (src->clock_rate != -1) {
+ /* if no running time has been set yet we wait until we get one */
+ if (src->last_rtime == -1) {
+ GST_WARNING ("running time not set, can not create SR for SSRC %u",
+ src->ssrc);
+ return FALSE;
+ }
+
/* get the diff between the clock running_time and the buffer running_time.
* This is the elapsed time, as measured against the pipeline clock, between
* when the rtp timestamp was observed and the current running_time.