MT#60403 bandwidth: add support of AS for session level

Added support of the AS bandwidth attribute for the
SDP session level. Will be required later for the SDP
formatting in `sdp_create()`.

Change-Id: I1bde4659679de6e60bdad12c0578ced2c1983300
pull/1848/head
Donat Zenichev 9 months ago
parent 7d4dc39dbb
commit 9b3cd95045

@ -2659,6 +2659,8 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c
flags->session_timing.len);
/* sdp bandwidth per session level
* 0 value is supported (e.g. b=RR:0 and b=RS:0), to be able to disable rtcp */
if (flags->session_as >= 0)
ml->sdp_session_as = flags->session_as;
if (flags->session_rr >= 0)
ml->sdp_session_rr = flags->session_rr;
if (flags->session_rs >= 0)
@ -4218,7 +4220,7 @@ struct call_monologue *__monologue_create(call_t *call) {
ret->ssrc_hash = create_ssrc_hash_call();
ret->sdp_attr_print = sdp_insert_monologue_attributes;
/* explicitely set b=RR/b=RS to -1 so it's not considered as 0 inadvertently */
ret->sdp_session_rr = ret->sdp_session_rs = -1;
ret->sdp_session_as = ret->sdp_session_rr = ret->sdp_session_rs = -1;
gettimeofday(&ret->started, NULL);

@ -106,7 +106,7 @@ struct sdp_session {
str session_name;
str session_timing; /* t= */
struct sdp_connection connection;
int rr, rs;
int as, rr, rs;
struct sdp_attributes attributes;
sdp_media_q media_streams;
};
@ -1299,7 +1299,7 @@ new_session:
t_queue_push_tail(sessions, session);
media = NULL;
session->s.s = b;
session->rr = session->rs = -1;
session->as = session->rr = session->rs = -1;
break;
@ -1366,9 +1366,10 @@ new_session:
/* RR:0 */
if (line_end - value < 4)
break;
/* AS only supported per media */
if (media && !memcmp(value, "AS:", 3)) {
*(&media->as) = strtol((value + 3), NULL, 10);
/* AS, RR, RS */
if (!memcmp(value, "AS:", 3)) {
*(media ? &media->as : &session->as) = strtol((value + 3), NULL, 10);
}
else if (!memcmp(value, "RR:", 3)) {
*(media ? &media->rr : &session->rr) = strtol((value + 3), NULL, 10);
@ -1843,6 +1844,7 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f
if (!flags->session_sdp_orig.parsed)
flags->session_sdp_orig = session->origin;
flags->session_sdp_name = session->session_name;
flags->session_as = session->as;
flags->session_rr = session->rr;
flags->session_rs = session->rs;
flags->session_timing = session->session_timing;
@ -3616,6 +3618,8 @@ static void sdp_out_add_bandwidth(GString *out, struct call_monologue *monologue
struct media_subscription *ms = call_get_top_media_subscription(monologue);
if (!ms || !ms->monologue)
return;
if (ms->monologue->sdp_session_as >= 0)
g_string_append_printf(out, "b=AS:%d\r\n", ms->monologue->sdp_session_as);
if (ms->monologue->sdp_session_rr >= 0)
g_string_append_printf(out, "b=RR:%d\r\n", ms->monologue->sdp_session_rr);
if (ms->monologue->sdp_session_rs >= 0)

@ -570,7 +570,7 @@ struct call_monologue {
GHashTable *media_ids;
struct media_player *player;
struct media_player *rec_player;
int sdp_session_rr, sdp_session_rs;
int sdp_session_as, sdp_session_rr, sdp_session_rs;
str last_in_sdp;
sdp_sessions_q last_in_sdp_parsed; /* last parsed `sdp_session` */
sdp_streams_q last_in_sdp_streams; /* last parsed `stream_params` */

@ -66,7 +66,7 @@ struct sdp_ng_flags {
str session_sdp_name;
str session_timing; /* t= line */
int session_rr, session_rs; /* b= bandwidth per session level */
int session_as, session_rr, session_rs; /* b= bandwidth per session level */
/* commands to manipulate attr lines in SDP */
struct sdp_manipulations * sdp_manipulations[__MT_MAX];

Loading…
Cancel
Save