mirror of
https://github.com/qrtc/ffmpeg-dev-go.git
synced 2025-10-04 07:17:36 +08:00
101 lines
3.7 KiB
Go
101 lines
3.7 KiB
Go
// Copyright (c) 2023 QRTC. All rights reserved.
|
|
// Use of this source code is governed by a MIT
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ffmpeg
|
|
|
|
/*
|
|
#include <libavutil/dict.h>
|
|
*/
|
|
import "C"
|
|
import "unsafe"
|
|
|
|
const (
|
|
AV_DICT_MATCH_CASE = C.AV_DICT_MATCH_CASE
|
|
AV_DICT_IGNORE_SUFFIX = C.AV_DICT_IGNORE_SUFFIX
|
|
AV_DICT_DONT_STRDUP_KEY = C.AV_DICT_DONT_STRDUP_KEY
|
|
AV_DICT_DONT_STRDUP_VAL = C.AV_DICT_DONT_STRDUP_VAL
|
|
AV_DICT_DONT_OVERWRITE = C.AV_DICT_DONT_OVERWRITE
|
|
AV_DICT_APPEND = C.AV_DICT_APPEND
|
|
AV_DICT_MULTIKEY = C.AV_DICT_MULTIKEY
|
|
)
|
|
|
|
type AVDictionaryEntry C.struct_AVDictionaryEntry
|
|
|
|
// GetKey gets `AVDictionaryEntry.key` value.
|
|
func (e *AVDictionaryEntry) GetKey() string {
|
|
return C.GoString(e.key)
|
|
}
|
|
|
|
// GetValue gets `AVDictionaryEntry.value` value.
|
|
func (e *AVDictionaryEntry) GetValue() string {
|
|
return C.GoString(e.value)
|
|
}
|
|
|
|
// AvDictionary gets a dictionary entry with matching key.
|
|
type AVDictionary C.struct_AVDictionary
|
|
|
|
// AvDictGet
|
|
func AvDictGet(m *AVDictionary, key string, prev *AVDictionaryEntry, flags int32) *AVDictionaryEntry {
|
|
keyPtr, keyFunc := StringCasting(key)
|
|
defer keyFunc()
|
|
return (*AVDictionaryEntry)(C.av_dict_get((*C.struct_AVDictionary)(m),
|
|
(*C.char)(keyPtr), (*C.struct_AVDictionaryEntry)(prev), (C.int)(flags)))
|
|
}
|
|
|
|
// AvDictCount gets number of entries in dictionary.
|
|
func AvDictCount(m *AVDictionary) int32 {
|
|
return (int32)(C.av_dict_count((*C.struct_AVDictionary)(m)))
|
|
}
|
|
|
|
// AvDictSet sets the given entry in *pm, overwriting an existing entry.
|
|
func AvDictSet(pm **AVDictionary, key, value string, flags int32) int32 {
|
|
keyPtr, keyFunc := StringCasting(key)
|
|
defer keyFunc()
|
|
valuePtr, valueFunc := StringCasting(value)
|
|
defer valueFunc()
|
|
return (int32)(C.av_dict_set((**C.struct_AVDictionary)(unsafe.Pointer(pm)),
|
|
(*C.char)(keyPtr), (*C.char)(valuePtr), (C.int)(flags)))
|
|
}
|
|
|
|
// AvDictSetInt sets the given entry in *pm, overwriting an existing entry.
|
|
func AvDictSetInt(pm **AVDictionary, key string, value int64, flags int32) int32 {
|
|
keyPtr, keyFunc := StringCasting(key)
|
|
defer keyFunc()
|
|
return (int32)(C.av_dict_set_int((**C.struct_AVDictionary)(unsafe.Pointer(pm)),
|
|
(*C.char)(keyPtr), (C.int64_t)(value), (C.int)(flags)))
|
|
}
|
|
|
|
// AvDictParseString parses the key/value pairs list and add the parsed entries to a dictionary.
|
|
func AvDictParseString(pm **AVDictionary, str, keyValSep, pairsSep string, flags int32) int32 {
|
|
strPtr, strFunc := StringCasting(str)
|
|
defer strFunc()
|
|
keyValSepPtr, keyValSepFunc := StringCasting(keyValSep)
|
|
defer keyValSepFunc()
|
|
pairsSepPtr, pairsSepFunc := StringCasting(pairsSep)
|
|
defer pairsSepFunc()
|
|
return (int32)(C.av_dict_parse_string((**C.struct_AVDictionary)(unsafe.Pointer(pm)),
|
|
(*C.char)(strPtr), (*C.char)(keyValSepPtr), (*C.char)(pairsSepPtr), (C.int)(flags)))
|
|
}
|
|
|
|
// AvDictCopy copies entries from one AVDictionary struct into another.
|
|
func AvDictCopy(dst **AVDictionary, src *AVDictionary, flags int32) int32 {
|
|
return (int32)(C.av_dict_copy((**C.struct_AVDictionary)(unsafe.Pointer(dst)),
|
|
(*C.struct_AVDictionary)(src), (C.int)(flags)))
|
|
}
|
|
|
|
// AvDictFree frees all the memory allocated for an AVDictionary struct and all keys and values.
|
|
func AvDictFree(m **AVDictionary) {
|
|
C.av_dict_free((**C.struct_AVDictionary)(unsafe.Pointer(m)))
|
|
}
|
|
|
|
// AvDictGetString get dictionary entries as a string.
|
|
func AvDictGetString(m *AVDictionary, buffer **int8, keyValSep, pairsSep string) int32 {
|
|
keyValSepPtr, keyValSepFunc := StringCasting(keyValSep)
|
|
defer keyValSepFunc()
|
|
pairsSepPtr, pairsSepFunc := StringCasting(pairsSep)
|
|
defer pairsSepFunc()
|
|
return (int32)(C.av_dict_get_string((*C.struct_AVDictionary)(m),
|
|
(**C.char)(unsafe.Pointer(buffer)), (C.char)(*keyValSepPtr), (C.char)(*pairsSepPtr)))
|
|
}
|