|
|
|
@ -375,6 +375,7 @@ static codec_def_t __codec_defs[] = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static GHashTable *codecs_ht;
|
|
|
|
|
static GHashTable *codecs_ht_by_av;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -388,13 +389,7 @@ const codec_def_t *codec_find(const str *name, enum media_type type) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const codec_def_t *codec_find_by_av(enum AVCodecID id) {
|
|
|
|
|
// XXX hash this
|
|
|
|
|
for (int i = 0; i < G_N_ELEMENTS(__codec_defs); i++) {
|
|
|
|
|
codec_def_t *def = &__codec_defs[i];
|
|
|
|
|
if (def->avcodec_id == id)
|
|
|
|
|
return def;
|
|
|
|
|
}
|
|
|
|
|
return NULL;
|
|
|
|
|
return g_hash_table_lookup(codecs_ht_by_av, GINT_TO_POINTER(id));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enum media_type codec_get_type(const str *type) {
|
|
|
|
@ -724,6 +719,7 @@ void codeclib_init(int print) {
|
|
|
|
|
av_log_set_callback(avlog_ilog);
|
|
|
|
|
|
|
|
|
|
codecs_ht = g_hash_table_new(str_hash, str_equal);
|
|
|
|
|
codecs_ht_by_av = g_hash_table_new(g_direct_hash, g_direct_equal);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < G_N_ELEMENTS(__codec_defs); i++) {
|
|
|
|
|
// add to hash table
|
|
|
|
@ -732,6 +728,11 @@ void codeclib_init(int print) {
|
|
|
|
|
assert(g_hash_table_lookup(codecs_ht, &def->rtpname_str) == NULL);
|
|
|
|
|
g_hash_table_insert(codecs_ht, &def->rtpname_str, def);
|
|
|
|
|
|
|
|
|
|
if (def->avcodec_id >= 0) {
|
|
|
|
|
if (g_hash_table_lookup(codecs_ht_by_av, GINT_TO_POINTER(def->avcodec_id)) == NULL)
|
|
|
|
|
g_hash_table_insert(codecs_ht_by_av, GINT_TO_POINTER(def->avcodec_id), def);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// init undefined member vars
|
|
|
|
|
if (!def->clockrate_mult)
|
|
|
|
|
def->clockrate_mult = 1;
|
|
|
|
|