diff --git a/daemon/call.c b/daemon/call.c index f0a87ff6b..c842fea28 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1650,9 +1650,7 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams, } if (flags->ptime > 0) media->ptime = flags->ptime; - codec_rtp_payload_types(media, other_media, &sp->rtp_payload_types, - flags->codec_strip, &flags->codec_offer, &flags->codec_transcode, - flags->codec_mask); + codec_rtp_payload_types(media, other_media, &sp->rtp_payload_types, flags); codec_handlers_update(media, other_media, flags); /* send and recv are from our POV */ diff --git a/daemon/codec.c b/daemon/codec.c index 54c9537a6..a66cf5815 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -925,9 +925,7 @@ static int __revert_codec_strip(GHashTable *removed, const str *codec, return 1; } void codec_rtp_payload_types(struct call_media *media, struct call_media *other_media, - GQueue *types, GHashTable *strip, - const GQueue *offer, const GQueue *transcode, - GHashTable *mask) + GQueue *types, const struct sdp_ng_flags *flags) { // 'media' = receiver of this offer/answer; 'other_media' = sender of this offer/answer struct call *call = media->call; @@ -946,9 +944,9 @@ void codec_rtp_payload_types(struct call_media *media, struct call_media *other_ g_hash_table_remove_all(other_media->codecs_send); g_hash_table_remove_all(other_media->codec_names_send); - if (strip && g_hash_table_lookup(strip, &str_all)) + if (flags->codec_strip && g_hash_table_lookup(flags->codec_strip, &str_all)) strip_all = 1; - if (mask && g_hash_table_lookup(mask, &str_all)) + if (flags->codec_mask && g_hash_table_lookup(flags->codec_mask, &str_all)) mask_all = 1; /* we steal the entire list to avoid duplicate allocs */ @@ -956,9 +954,9 @@ void codec_rtp_payload_types(struct call_media *media, struct call_media *other_ __rtp_payload_type_dup(call, pt); // this takes care of string allocation // codec stripping - if (strip) { - if (strip_all || g_hash_table_lookup(strip, &pt->encoding) - || g_hash_table_lookup(strip, &pt->encoding_with_params)) + if (flags->codec_strip) { + if (strip_all || g_hash_table_lookup(flags->codec_strip, &pt->encoding) + || g_hash_table_lookup(flags->codec_strip, &pt->encoding_with_params)) { ilog(LOG_DEBUG, "Stripping codec '" STR_FORMAT "'", STR_FMT(&pt->encoding_with_params)); @@ -969,22 +967,22 @@ void codec_rtp_payload_types(struct call_media *media, struct call_media *other_ continue; } } - if (!mask_all && (!mask || !g_hash_table_lookup(mask, &pt->encoding)) - && (!mask || !g_hash_table_lookup(mask, &pt->encoding_with_params))) + if (!mask_all && (!flags->codec_mask || !g_hash_table_lookup(flags->codec_mask, &pt->encoding)) + && (!flags->codec_mask || !g_hash_table_lookup(flags->codec_mask, &pt->encoding_with_params))) __rtp_payload_type_add(media, other_media, pt); else __rtp_payload_type_add_send(other_media, pt); } // now restore codecs that have been removed, but should be offered - for (GList *l = offer ? offer->head : NULL; l; l = l->next) { + for (GList *l = flags->codec_offer.head; l; l = l->next) { str *codec = l->data; __revert_codec_strip(removed, codec, media, other_media); } #ifdef WITH_TRANSCODING // add transcode codecs - for (GList *l = transcode ? transcode->head : NULL; l; l = l->next) { + for (GList *l = flags->codec_transcode.head; l; l = l->next) { str *codec = l->data; // if we wish to 'transcode' to a codec that was offered originally // and removed by a strip=all option, diff --git a/include/codec.h b/include/codec.h index 278275c66..a223d6a0b 100644 --- a/include/codec.h +++ b/include/codec.h @@ -41,9 +41,7 @@ void codec_add_raw_packet(struct media_packet *mp); void codec_packet_free(void *); void codec_rtp_payload_types(struct call_media *media, struct call_media *other_media, - GQueue *types, GHashTable *strip, - const GQueue *offer, const GQueue *transcode, - GHashTable *mask); + GQueue *types, const struct sdp_ng_flags *flags); // special return value `(void *) 0x1` to signal type mismatch struct rtp_payload_type *codec_make_payload_type(const str *codec_str, struct call_media *media); diff --git a/t/transcode-test.c b/t/transcode-test.c index ce5ee227e..74f2960ba 100644 --- a/t/transcode-test.c +++ b/t/transcode-test.c @@ -72,18 +72,14 @@ static void __sdp_pt_fmt(int num, str codec, int clockrate, str full_codec, str #define sdp_pt(num, codec, clockrate) sdp_pt_fmt(num, codec, clockrate, "") static void offer() { - codec_rtp_payload_types(media_B, media_A, &rtp_types, - flags.codec_strip, &flags.codec_offer, &flags.codec_transcode, - flags.codec_mask); + codec_rtp_payload_types(media_B, media_A, &rtp_types, &flags); codec_handlers_update(media_B, media_A, &flags); g_queue_clear(&rtp_types); memset(&flags, 0, sizeof(flags)); } static void answer() { - codec_rtp_payload_types(media_A, media_B, &rtp_types, - flags.codec_strip, &flags.codec_offer, &flags.codec_transcode, - flags.codec_mask); + codec_rtp_payload_types(media_A, media_B, &rtp_types, &flags); codec_handlers_update(media_A, media_B, &flags); }