Browse Source

TT#92250 keep supp codecs last when transcoding in reverse

Change-Id: I20d9b6e54c38ab92dcbe4e706ed04bca7145c373
(cherry picked from commit 2502b44ff8)
mr9.0.1
Richard Fuchs 5 years ago
parent
commit
fbdd2fd4c4
2 changed files with 18 additions and 4 deletions
  1. +14
    -0
      daemon/codec.c
  2. +4
    -4
      t/auto-daemon-tests.pl

+ 14
- 0
daemon/codec.c View File

@ -536,6 +536,7 @@ static void __accept_transcode_codecs(struct call_media *receiver, struct call_m
STR_FMT(&pt->encoding_with_params)); STR_FMT(&pt->encoding_with_params));
MEDIA_SET(receiver, TRANSCODE); MEDIA_SET(receiver, TRANSCODE);
// we need a new pt entry // we need a new pt entry
pt = __rtp_payload_type_copy(pt); pt = __rtp_payload_type_copy(pt);
pt->for_transcoding = 1; pt->for_transcoding = 1;
@ -543,6 +544,19 @@ static void __accept_transcode_codecs(struct call_media *receiver, struct call_m
// this somewhat duplicates __rtp_payload_type_add_recv // this somewhat duplicates __rtp_payload_type_add_recv
g_hash_table_insert(receiver->codecs_recv, &pt->payload_type, pt); g_hash_table_insert(receiver->codecs_recv, &pt->payload_type, pt);
__rtp_payload_type_add_name(receiver->codec_names_recv, pt); __rtp_payload_type_add_name(receiver->codec_names_recv, pt);
// keep supplemental codecs last
ensure_codec_def(pt, receiver);
if (!pt->codec_def || !pt->codec_def->supplemental) {
while (insert_pos) {
struct rtp_payload_type *ipt = insert_pos->data;
ensure_codec_def(ipt, receiver);
if (!ipt->codec_def || !ipt->codec_def->supplemental)
break;
insert_pos = insert_pos->prev;
}
}
if (!insert_pos) { if (!insert_pos) {
g_queue_push_head(&receiver->codecs_prefs_recv, pt); g_queue_push_head(&receiver->codecs_prefs_recv, pt);
insert_pos = receiver->codecs_prefs_recv.head; insert_pos = receiver->codecs_prefs_recv.head;


+ 4
- 4
t/auto-daemon-tests.pl View File

@ -327,12 +327,12 @@ o=dev 5418 9648 IN IP4 8.8.8.60
s=SIP Call s=SIP Call
c=IN IP4 8.8.8.60 c=IN IP4 8.8.8.60
t=0 0 t=0 0
m=audio PORT RTP/AVP 101 0 8 3
m=audio PORT RTP/AVP 0 8 3 101
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=rtpmap:101 telephone-event/8000
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000 a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000 a=rtpmap:3 GSM/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15 a=fmtp:101 0-15
a=sendrecv a=sendrecv
a=rtcp:PORT a=rtcp:PORT
@ -2449,13 +2449,13 @@ s=pjmedia
b=AS:117 b=AS:117
t=0 0 t=0 0
a=X-nat:0 a=X-nat:0
m=audio PORT RTP/AVP 107 101 8
m=audio PORT RTP/AVP 107 8 101
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
b=TIAS:96000 b=TIAS:96000
a=ssrc:243811319 cname:04389d431bdd5c52 a=ssrc:243811319 cname:04389d431bdd5c52
a=rtpmap:107 opus/48000/2 a=rtpmap:107 opus/48000/2
a=rtpmap:101 telephone-event/8000
a=rtpmap:8 PCMA/8000 a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:107 useinbandfec=1 a=fmtp:107 useinbandfec=1
a=fmtp:101 0-16 a=fmtp:101 0-16
a=sendrecv a=sendrecv


Loading…
Cancel
Save