AVDictionary結構體相關原始碼介紹
阿新 • • 發佈:2018-11-10
本文對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 )