|
|
|
@ -1322,7 +1322,7 @@ static void transcode_rr(struct rtcp_process_ctx *ctx, struct report_block *rr)
|
|
|
|
|
|
|
|
|
|
// substitute our own values
|
|
|
|
|
|
|
|
|
|
unsigned int packets = atomic64_get(&input_ctx->packets);
|
|
|
|
|
unsigned int packets = atomic64_get(&input_ctx->stats->packets);
|
|
|
|
|
|
|
|
|
|
// we might not be keeping track of stats for this SSRC (handler_func_passthrough_ssrc).
|
|
|
|
|
// just leave the values in place.
|
|
|
|
@ -1352,7 +1352,7 @@ static void transcode_rr(struct rtcp_process_ctx *ctx, struct report_block *rr)
|
|
|
|
|
else
|
|
|
|
|
rr->fraction_lost = tot_lost * 256 / (packets + lost);
|
|
|
|
|
|
|
|
|
|
rr->high_seq_received = htonl(atomic64_get(&input_ctx->last_seq));
|
|
|
|
|
rr->high_seq_received = htonl(atomic_get_na(&input_ctx->stats->ext_seq));
|
|
|
|
|
// XXX jitter, last SR
|
|
|
|
|
|
|
|
|
|
out:
|
|
|
|
@ -1367,7 +1367,7 @@ static void transcode_sr(struct rtcp_process_ctx *ctx, struct sender_report_pack
|
|
|
|
|
return;
|
|
|
|
|
if (!ctx->mp->ssrc_out)
|
|
|
|
|
return;
|
|
|
|
|
unsigned int packets = atomic64_get(&ctx->mp->ssrc_out->packets);
|
|
|
|
|
unsigned int packets = atomic64_get(&ctx->mp->ssrc_out->stats->packets);
|
|
|
|
|
|
|
|
|
|
// we might not be keeping track of stats for this SSRC (handler_func_passthrough_ssrc).
|
|
|
|
|
// just leave the values in place.
|
|
|
|
@ -1375,9 +1375,9 @@ static void transcode_sr(struct rtcp_process_ctx *ctx, struct sender_report_pack
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// substitute our own values
|
|
|
|
|
sr->octet_count = htonl(atomic64_get(&ctx->mp->ssrc_out->octets));
|
|
|
|
|
sr->octet_count = htonl(atomic64_get(&ctx->mp->ssrc_out->stats->bytes));
|
|
|
|
|
sr->packet_count = htonl(packets);
|
|
|
|
|
sr->timestamp = htonl(atomic64_get(&ctx->mp->ssrc_out->last_ts));
|
|
|
|
|
sr->timestamp = htonl(atomic_get_na(&ctx->mp->ssrc_out->stats->timestamp));
|
|
|
|
|
// XXX NTP timestamp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1465,7 +1465,7 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr,
|
|
|
|
|
mutex_unlock(&se->h.lock);
|
|
|
|
|
|
|
|
|
|
uint64_t lost = se->packets_lost;
|
|
|
|
|
uint64_t tot = atomic64_get(&s->packets);
|
|
|
|
|
uint64_t tot = atomic64_get(&s->stats->packets);
|
|
|
|
|
|
|
|
|
|
*rr = (struct report_block) {
|
|
|
|
|
.ssrc = htonl(s->parent->h.ssrc),
|
|
|
|
@ -1473,7 +1473,7 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr,
|
|
|
|
|
.number_lost[0] = (lost >> 16) & 0xff,
|
|
|
|
|
.number_lost[1] = (lost >> 8) & 0xff,
|
|
|
|
|
.number_lost[2] = lost & 0xff,
|
|
|
|
|
.high_seq_received = htonl(atomic64_get(&s->last_seq)),
|
|
|
|
|
.high_seq_received = htonl(atomic_get_na(&s->stats->ext_seq)),
|
|
|
|
|
.lsr = htonl(ntp_middle_bits),
|
|
|
|
|
.dlsr = htonl(tv_diff * 65536 / 1000000),
|
|
|
|
|
.jitter = htonl(jitter >> 4),
|
|
|
|
@ -1486,7 +1486,7 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr,
|
|
|
|
|
.ssrc = s->parent->h.ssrc,
|
|
|
|
|
.fraction_lost = lost * 256 / (tot + lost),
|
|
|
|
|
.packets_lost = lost,
|
|
|
|
|
.high_seq_received = atomic64_get(&s->last_seq),
|
|
|
|
|
.high_seq_received = atomic_get_na(&s->stats->ext_seq),
|
|
|
|
|
.lsr = ntp_middle_bits,
|
|
|
|
|
.dlsr = tv_diff * 65536 / 1000000,
|
|
|
|
|
.jitter = jitter >> 4,
|
|
|
|
@ -1544,7 +1544,7 @@ void rtcp_receiver_reports(GQueue *out, struct ssrc_hash *hash, struct call_mono
|
|
|
|
|
struct ssrc_ctx *i = &e->input_ctx;
|
|
|
|
|
if (i->ref != ml)
|
|
|
|
|
continue;
|
|
|
|
|
if (!atomic64_get(&i->packets))
|
|
|
|
|
if (!atomic64_get_na(&i->stats->packets))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
ssrc_ctx_hold(i);
|
|
|
|
@ -1590,9 +1590,9 @@ void rtcp_send_report(struct call_media *media, struct ssrc_ctx *ssrc_out) {
|
|
|
|
|
|
|
|
|
|
GString *sr = rtcp_sender_report(&ssr, ssrc_out->parent->h.ssrc,
|
|
|
|
|
ssrc_out->ssrc_map_out ? : ssrc_out->parent->h.ssrc,
|
|
|
|
|
atomic64_get(&ssrc_out->last_ts),
|
|
|
|
|
atomic64_get(&ssrc_out->packets),
|
|
|
|
|
atomic64_get(&ssrc_out->octets),
|
|
|
|
|
atomic_get_na(&ssrc_out->stats->timestamp),
|
|
|
|
|
atomic64_get_na(&ssrc_out->stats->packets),
|
|
|
|
|
atomic64_get(&ssrc_out->stats->bytes),
|
|
|
|
|
&rrs, &srrs);
|
|
|
|
|
|
|
|
|
|
// handle crypto
|
|
|
|
|