Browse Source

simplify parameters passed to codec_rtp_payload_types()

Change-Id: I8a9147bb527b3084ed9f4acfa82868fc26b0d8c2
changes/47/21747/1
Richard Fuchs 8 years ago
parent
commit
f1b81b649e
4 changed files with 14 additions and 24 deletions
  1. +1
    -3
      daemon/call.c
  2. +10
    -12
      daemon/codec.c
  3. +1
    -3
      include/codec.h
  4. +2
    -6
      t/transcode-test.c

+ 1
- 3
daemon/call.c View File

@ -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 */


+ 10
- 12
daemon/codec.c View File

@ -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,


+ 1
- 3
include/codec.h View File

@ -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);


+ 2
- 6
t/transcode-test.c View File

@ -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);
}


Loading…
Cancel
Save