本文对AVDictionary结构体部分相关函数代码进行了介绍
- 本文研究分析AVDictionary相关代码
- struct AVDictionary {
- int count;
- AVDictionaryEntry *elems;
- };
- typedef struct AVDictionaryEntry {
- char *key;
- char *value;
- } AVDictionaryEntry;
- /*
- *这就是一个键值对或者叫键值对数组。为了create一个AVDictionary,
- *用到了av_dict_set()函数,将一个空指针传入该函数,这个空指针为
- *空的AVDictionary。生成AVDictionary后,可以通过av_dict_get()函
- *来找回一个数组或者递归所有数组,最后用av_dict_free()来释放。
- */
- AVDictionary *d = NULL; // "create" an empty dictionary
- AVDictionaryEntry *t = NULL;
- av_dict_set(&d, "foo", "bar", 0); // add an entry
- char *k = av_strdup("key"); // if your strings are already allocated,
- char *v = av_strdup("value"); // you can avoid copying them like this
- av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
- while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
- <....> // iterate over all entries in d
- }
- av_dict_free(&d);
- /*
- *介绍主要函数
- */
- /*
- *这个函数是把给定的key/value放入*pm中,如果数组已存在则覆盖
- *Note:增加一个新的数组到dictionary中会使之前由av_dict_get()返回的数组失效
- * pm 指向一个dictionary的指针的指针。如果*pm是空,那么一个dictionary结构将
- * 由函数分配并放入*pm
- * key 数组中的key值要加入*pm,由av_strduped设置一个值或者根据一个flag增加
- * value 数组中的value值要加入*pm,由av_strduped设置一个值或者根据一个flag增加
- *
- * 函数成功执行返回0,否则返回<0
- */
- int av_dict_set ( AVDictionary ** pm,
- const char * key,
- const char * value,
- int flags )
- /*
- *通过匹配的key值得到一个dictionary entry,返回的entry key或value值不能被修改
- *为递归所有dictionary entry,可以set the matching key to null,并且set the
- *AV_DICT_IGNORE_SUFFIX flag
- * prev Set to the previous matching element to find the next.If set to null
- * the first matching element is returned
- * key matching key
- * flags a collection of AV_DICT_ *flags,控制着如何检索数组
- *
- * 执行结果是:found entry or NULL in case no matching entry was found in the dictionary
- */
- AVDictionaryEntry* av_dict_get ( const AVDictionary * m,
- const char * key,
- const AVDictionaryEntry * prev,
- int flags )
- /*
- *对av_dict_set的一个包装处理,将其参数value转换成一个string类型并存储下来
- */
- int av_dict_set_int ( AVDictionary ** pm,
- const char * key,
- int64_t value,
- int flags )
- <pre name="code" class="cpp">/*
- *拷贝entries从一个AVDictionary到另一个AVDictionary
- * dst 指向一个AVDictionary结构体
- * src 指向原AVDictionary结构体
- * flag 在set dst中的entries时用到
- * 成功返回0,失败返回负。
- */
- int av_dict_copy ( AVDictionary ** dst,
- const AVDictionary * src,
- int flags )