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