TT#30901 use hash table to look up RFC specified codecs

Change-Id: I471dc77d0c4bdbdf66dc4b021d77202ec0ddbb39
changes/68/18768/5
Richard Fuchs 8 years ago
parent ff0a46a053
commit 71b3762f13

@ -622,14 +622,16 @@ static struct rtp_payload_type *codec_make_payload_type(const str *codec, struct
const codec_def_t *dec = codec_find(codec); const codec_def_t *dec = codec_find(codec);
if (!dec) if (!dec)
return NULL; return NULL;
const struct rtp_payload_type *rfc_pt = rtp_get_rfc_codec(codec); if (dec->rfc_payload_type >= 0) {
if (!rfc_pt) const struct rtp_payload_type *rfc_pt = rtp_get_rfc_payload_type(dec->rfc_payload_type);
return codec_make_dynamic_payload_type(dec, call); if (rfc_pt) {
struct rtp_payload_type *ret = __rtp_payload_type_copy(rfc_pt);
struct rtp_payload_type *ret = __rtp_payload_type_copy(rfc_pt); ret->codec_def = dec;
ret->codec_def = dec; return ret;
}
}
return codec_make_dynamic_payload_type(dec, call);
return ret;
} }

@ -7,6 +7,7 @@
#include "log.h" #include "log.h"
#include "loglib.h" #include "loglib.h"
#include "resample.h" #include "resample.h"
#include "rtplib.h"
@ -556,6 +557,12 @@ void codeclib_init() {
str_init(&def->rtpname_str, (char *) def->rtpname); str_init(&def->rtpname_str, (char *) def->rtpname);
assert(g_hash_table_lookup(codecs_ht, &def->rtpname_str) == NULL); assert(g_hash_table_lookup(codecs_ht, &def->rtpname_str) == NULL);
g_hash_table_insert(codecs_ht, &def->rtpname_str, def); g_hash_table_insert(codecs_ht, &def->rtpname_str, def);
const struct rtp_payload_type *pt = rtp_get_rfc_codec(&def->rtpname_str);
if (pt)
def->rfc_payload_type = pt->payload_type;
else
def->rfc_payload_type = -1;
} }
} }

@ -40,7 +40,9 @@ struct codec_def_s {
const int default_ptime; const int default_ptime;
packetizer_f * const packetizer; packetizer_f * const packetizer;
const int bits_per_sample; const int bits_per_sample;
str rtpname_str; str rtpname_str;
int rfc_payload_type;
}; };
struct format_s { struct format_s {

@ -130,7 +130,7 @@ const struct rtp_payload_type *rtp_get_rfc_payload_type(unsigned int type) {
return rtp_pt; return rtp_pt;
} }
// XXX use hash table // for one-time init only - better use rtp_get_rfc_payload_type(codec_def->rfc_payload_type)
const struct rtp_payload_type *rtp_get_rfc_codec(const str *codec) { const struct rtp_payload_type *rtp_get_rfc_codec(const str *codec) {
for (int i = 0; i < num_rfc_rtp_payload_types; i++) { for (int i = 0; i < num_rfc_rtp_payload_types; i++) {
if (!rfc_rtp_payload_types[i].encoding.s) if (!rfc_rtp_payload_types[i].encoding.s)

Loading…
Cancel
Save