mirror of
https://github.com/qrtc/ffmpeg-dev-go.git
synced 2025-09-26 20:01:22 +08:00
62 lines
1.8 KiB
Go
62 lines
1.8 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/tree.h>
|
|
|
|
typedef int (*av_tree_cmp_func)(void *opaque, void *elem);
|
|
typedef int (*av_tree_enu_func)(void *opaque, void *elem);
|
|
|
|
*/
|
|
import "C"
|
|
import "unsafe"
|
|
|
|
// AVTreeNode
|
|
type AVTreeNode C.struct_AVTreeNode
|
|
|
|
// typedef int (*av_tree_cmp_func)(void *opaque, void *elem);
|
|
type AvTreeCmpFunc = C.av_tree_cmp_func
|
|
|
|
// typedef int (*av_tree_enu_func)(void *opaque, void *elem);
|
|
type AvTreeEnuFunc = C.av_tree_enu_func
|
|
|
|
// AvTreeNodeAlloc allocates an AVTreeNode.
|
|
func AvTreeNodeAlloc() *AVTreeNode {
|
|
return (*AVTreeNode)(C.av_tree_node_alloc())
|
|
}
|
|
|
|
// AvTreeFind finds an element.
|
|
func AvTreeFind(root *AVTreeNode, key CVoidPointer,
|
|
cmp AvTreeCmpFunc, next []unsafe.Pointer) unsafe.Pointer {
|
|
if next != nil && len(next) < 2 {
|
|
panic("next len < 2")
|
|
}
|
|
return (unsafe.Pointer)(C.av_tree_find((*C.struct_AVTreeNode)(root),
|
|
VoidPointer(key), (C.av_tree_cmp_func)(cmp),
|
|
(*unsafe.Pointer)(unsafe.Pointer(&next[0]))))
|
|
}
|
|
|
|
// AvTreeInsert inserts or removes an element.
|
|
func AvTreeInsert(rootp **AVTreeNode, key CVoidPointer,
|
|
cmp AvTreeCmpFunc, next **AVTreeNode) unsafe.Pointer {
|
|
return (unsafe.Pointer)(C.av_tree_insert(
|
|
(**C.struct_AVTreeNode)(unsafe.Pointer(rootp)),
|
|
VoidPointer(key), (C.av_tree_cmp_func)(cmp),
|
|
(**C.struct_AVTreeNode)(unsafe.Pointer(next))))
|
|
}
|
|
|
|
// AvTreeDestroy
|
|
func AvTreeDestroy(t *AVTreeNode) {
|
|
C.av_tree_destroy((*C.struct_AVTreeNode)(t))
|
|
}
|
|
|
|
// AvTreeEnumerate applies enu(opaque, &elem) to all the elements in the tree in a given range.
|
|
func AvTreeEnumerate(t *AVTreeNode, opaque CVoidPointer,
|
|
cmp AvTreeCmpFunc, enu AvTreeEnuFunc) {
|
|
C.av_tree_enumerate((*C.struct_AVTreeNode)(t), VoidPointer(opaque),
|
|
(C.av_tree_cmp_func)(cmp), (C.av_tree_enu_func)(enu))
|
|
}
|