Browse Source

MT#63317 use monologue-local extmap storage

Change-Id: I8a341718f3944b276cd2838aaf37d26bb5ca1e0c
pull/2008/head
Richard Fuchs 4 months ago
parent
commit
f349cc7ee7
3 changed files with 52 additions and 9 deletions
  1. +34
    -8
      daemon/call.c
  2. +1
    -1
      daemon/sdp.c
  3. +17
    -0
      t/auto-daemon-tests-websocket.py

+ 34
- 8
daemon/call.c View File

@ -2861,6 +2861,17 @@ static void media_set_siprec_label(struct call_media *other_media, struct call_m
other_media->label = media->label;
}
__attribute__((nonnull(1)))
static void media_reset_extmap(struct call_media *media) {
// empty out old queue
t_queue_clear_full(&media->extmap, rtp_extension_free);
t_hash_table_remove_all(media->ext_name_ht);
t_hash_table_remove_all(media->extmap_ht);
memset(media->extmap_a, 0, sizeof(media->extmap_a));
media->extmap_lookup = call_media_ext_lookup_array;
}
__attribute__((nonnull(1, 2)))
static void media_init_extmap(struct call_media *media, struct rtp_extension *ext) {
ext->name = call_str_cpy(&ext->name);
@ -2876,19 +2887,31 @@ static void media_init_extmap(struct call_media *media, struct rtp_extension *ex
__attribute__((nonnull(1, 2)))
static void media_update_extmap(struct call_media *media, struct stream_params *sp) {
// empty out old queue and take over from `sp`
t_queue_clear_full(&media->extmap, rtp_extension_free);
media_reset_extmap(media);
// take over from `sp`
media->extmap = sp->extmap;
t_queue_init(&sp->extmap);
t_hash_table_remove_all(media->ext_name_ht);
t_hash_table_remove_all(media->extmap_ht);
memset(media->extmap_a, 0, sizeof(media->extmap_a));
media->extmap_lookup = call_media_ext_lookup_array;
// init entries
for (__auto_type ll = media->extmap.head; ll; ll = ll->next) {
__auto_type ext = ll->data;
media_init_extmap(media, ext);
}
}
__attribute__((nonnull(1, 2)))
static void media_set_extmap(struct call_media *media, const extmap_q *emq) {
media_reset_extmap(media);
// copy entries
for (__auto_type ll = emq->head; ll; ll = ll->next) {
__auto_type ext_o = ll->data;
__auto_type ext = g_new(__typeof(*ext_o), 1);
*ext = *ext_o;
t_queue_push_tail(&media->extmap, ext);
media_init_extmap(media, ext);
}
}
@ -3131,7 +3154,7 @@ static struct call_media * monologue_add_zero_media(struct call_monologue *sende
media_update_attrs(sender_media, sp);
media_update_format(sender_media, sp);
media_set_ptime(sender_media, sp, flags->rev_ptime, flags->ptime);
media_update_extmap(sender_media, sp);
media_set_extmap(sender_media, &sp->extmap);
*num_ports_other = proto_num_ports(sp->num_ports, sender_media, flags,
(flags->rtcp_mux_demux || flags->rtcp_mux_accept) ? true : false);
__disable_streams(sender_media, *num_ports_other);
@ -3263,6 +3286,7 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
media_set_ptime(sender_media, sp, flags->rev_ptime, flags->ptime);
media_set_ptime(receiver_media, sp, flags->ptime, flags->rev_ptime);
media_update_extmap(sender_media, sp);
media_set_extmap(receiver_media, &sender_media->extmap);
if (flags->opmode == OP_OFFER) {
ilog(LOG_DEBUG, "Setting media recording slots to %u", flags->media_rec_slot_offer);
@ -3775,6 +3799,7 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca
media_set_address_family(dst_media, src_media, flags);
media_set_ptime(src_media, sp, flags->rev_ptime, flags->ptime);
media_set_ptime(dst_media, sp, flags->ptime, flags->rev_ptime);
media_set_extmap(dst_media, &src_media->extmap);
codec_store_populate(&dst_media->codecs, &src_media->codecs,
.allow_asymmetric = !!flags->allow_asymmetric_codecs);
@ -3884,6 +3909,7 @@ int monologue_subscribe_answer(struct call_monologue *dst_ml, sdp_ng_flags *flag
media_update_crypto(dst_media, sp, flags);
media_update_format(dst_media, sp);
media_set_ptime(dst_media, sp, flags->ptime, 0);
media_update_extmap(dst_media, sp);
if (flags->allow_transcoding) {
codec_store_populate(&dst_media->codecs, &sp->codecs,


+ 1
- 1
daemon/sdp.c View File

@ -2852,7 +2852,7 @@ static void print_sdp_media_section(GString *s, struct call_media *media,
if (proto_is_rtp(media->protocol))
insert_codec_parameters(s, media, flags);
sdp_print_extmap(s, source_media, flags);
sdp_print_extmap(s, media, flags);
/* all unknown type attributes will be added here */
media->sdp_attr_print(s, media, source_media, flags);


+ 17
- 0
t/auto-daemon-tests-websocket.py View File

@ -1688,6 +1688,12 @@ class TestVideoroom(unittest.TestCase):
"a=rtpmap:111 opus/48000/2\r\n"
"a=fmtp:111 useinbandfec=1; minptime=10\r\n"
"a=rtcp-fb:111 transport-cc\r\n"
"a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n"
"a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n"
"a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n"
"a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n"
"a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\n"
"a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\n"
"a=recvonly\r\n"
"a=rtcp:\\d+\r\n"
"a=rtcp-mux\r\n"
@ -1708,6 +1714,17 @@ class TestVideoroom(unittest.TestCase):
"a=rtcp-fb:96 ccm fir\r\n"
"a=rtcp-fb:96 nack\r\n"
"a=rtcp-fb:96 nack pli\r\n"
"a=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\n"
"a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n"
"a=extmap:13 urn:3gpp:video-orientation\r\n"
"a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n"
"a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\n"
"a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\n"
"a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\n"
"a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\n"
"a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n"
"a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\n"
"a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\n"
"a=recvonly\r\n"
"a=rtcp:\\d+\r\n"
"a=rtcp-mux\r\n"


Loading…
Cancel
Save