diff --git a/lib/codeclib.c b/lib/codeclib.c index d4bfde56a..0d5393abc 100644 --- a/lib/codeclib.c +++ b/lib/codeclib.c @@ -887,13 +887,16 @@ void (*codeclib_thread_cleanup)(void); void (*codeclib_thread_loop)(void); -static GHashTable *codecs_ht; -static GHashTable *codecs_ht_by_av; +TYPED_GHASHTABLE(codecs_by_name, str, struct codec_def_s, str_case_hash, str_case_equal, NULL, NULL) +TYPED_GHASHTABLE(codecs_by_id, void, struct codec_def_s, g_direct_hash, g_direct_equal, NULL, NULL) + +static codecs_by_name codecs_ht; +static codecs_by_id codecs_ht_by_av; codec_def_t *codec_find(const str *name, enum media_type type) { - codec_def_t *ret = g_hash_table_lookup(codecs_ht, name); + codec_def_t *ret = t_hash_table_lookup(codecs_ht, name); if (!ret) return NULL; if (type && type != ret->media_type) @@ -902,7 +905,7 @@ codec_def_t *codec_find(const str *name, enum media_type type) { } codec_def_t *codec_find_by_av(enum AVCodecID id) { - return g_hash_table_lookup(codecs_ht_by_av, GINT_TO_POINTER(id)); + return t_hash_table_lookup(codecs_ht_by_av, GINT_TO_POINTER(id)); } @@ -1360,8 +1363,8 @@ static void avc_def_init(struct codec_def_s *def) { static void cc_cleanup(void); void codeclib_free(void) { - g_hash_table_destroy(codecs_ht); - g_hash_table_destroy(codecs_ht_by_av); + t_hash_table_destroy(codecs_ht); + t_hash_table_destroy(codecs_ht_by_av); avformat_network_deinit(); cc_cleanup(); if (evs_lib_handle) @@ -1575,8 +1578,8 @@ void codeclib_init(int print) { avformat_network_init(); av_log_set_callback(avlog_ilog); - codecs_ht = g_hash_table_new((GHashFunc) str_case_hash, (GEqualFunc) str_case_equal); - codecs_ht_by_av = g_hash_table_new(g_direct_hash, g_direct_equal); + codecs_ht = codecs_by_name_new(); + codecs_ht_by_av = codecs_by_id_new(); cc_init(); @@ -1584,12 +1587,12 @@ void codeclib_init(int print) { // add to hash table struct codec_def_s *def = &__codec_defs[i]; def->rtpname_str = STR(def->rtpname); - assert(g_hash_table_lookup(codecs_ht, &def->rtpname_str) == NULL); - g_hash_table_insert(codecs_ht, &def->rtpname_str, def); + assert(t_hash_table_lookup(codecs_ht, &def->rtpname_str) == NULL); + t_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); + if (t_hash_table_lookup(codecs_ht_by_av, GINT_TO_POINTER(def->avcodec_id)) == NULL) + t_hash_table_insert(codecs_ht_by_av, GINT_TO_POINTER(def->avcodec_id), def); } // init undefined member vars