mirror of
https://github.com/qrtc/ffmpeg-dev-go.git
synced 2025-10-27 01:10:26 +08:00
142 lines
4.4 KiB
Go
142 lines
4.4 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/executor.h>
|
|
|
|
typedef int (*av_executor_priority_higher_func)(const AVTask *a, const AVTask *b);
|
|
|
|
typedef int (*av_executor_ready_func)(const AVTask *t, void *user_data);
|
|
|
|
typedef int (*av_executor_run_func)(AVTask *t, void *local_context, void *user_data);
|
|
|
|
*/
|
|
import "C"
|
|
import "unsafe"
|
|
|
|
// AVExecutor
|
|
type AVExecutor C.struct_AVExecutor
|
|
|
|
// AVTask
|
|
type AVTask C.struct_AVTask
|
|
|
|
// GetNext gets `AVTask.next` value.
|
|
func (t *AVTask) GetNext() *AVTask {
|
|
return (*AVTask)(t.next)
|
|
}
|
|
|
|
// SetNext sets `AVTask.next` value.
|
|
func (t *AVTask) SetNext(v *AVTask) {
|
|
t.next = (*C.struct_AVTask)(v)
|
|
}
|
|
|
|
// GetNextAddr gets `AVTask.next` address.
|
|
func (t *AVTask) GetNextAddr() **AVTask {
|
|
return (**AVTask)(unsafe.Pointer(&t.next))
|
|
}
|
|
|
|
// AVTaskCallbacks
|
|
type AVTaskCallbacks C.struct_AVTaskCallbacks
|
|
|
|
// typedef int (*av_executor_priority_higher_func)(const AVTask *a, const AVTask *b);
|
|
type AvExecutorPriorityHigherFunc = C.av_executor_priority_higher_func
|
|
|
|
// typedef int (*av_executor_ready_func)(const AVTask *t, void *user_data);
|
|
type AvExecutorReadyFunc = C.av_executor_ready_func
|
|
|
|
// typedef int (*av_executor_run_func)(AVTask *t, void *local_context, void *user_data);
|
|
type AvExecutorRunFunc = C.av_executor_run_func
|
|
|
|
// GetUserData gets `AVTaskCallbacks.user_data` value.
|
|
func (cbs *AVTaskCallbacks) GetUserData() unsafe.Pointer {
|
|
return cbs.user_data
|
|
}
|
|
|
|
// SetUserData sets `AVTaskCallbacks.user_data` value.
|
|
func (cbs *AVTaskCallbacks) SetUserData(v CVoidPointer) {
|
|
cbs.user_data = VoidPointer(v)
|
|
}
|
|
|
|
// GetUserDataAddr gets `AVTaskCallbacks.user_data` address.
|
|
func (cbs *AVTaskCallbacks) GetUserDataAddr() *unsafe.Pointer {
|
|
return (*unsafe.Pointer)(&cbs.user_data)
|
|
}
|
|
|
|
// GetLocalContextSize gets `AVTaskCallbacks.local_context_size` value.
|
|
func (cbs *AVTaskCallbacks) GetLocalContextSize() int32 {
|
|
return (int32)(cbs.local_context_size)
|
|
}
|
|
|
|
// SetLocalContextSize sets `AVTaskCallbacks.local_context_size` value.
|
|
func (cbs *AVTaskCallbacks) SetLocalContextSize(v int32) {
|
|
cbs.local_context_size = (C.int)(v)
|
|
}
|
|
|
|
// GetLocalContextSizeAddr gets `AVTaskCallbacks.local_context_size` address.
|
|
func (cbs *AVTaskCallbacks) GetLocalContextSizeAddr() *int32 {
|
|
return (*int32)(&cbs.local_context_size)
|
|
}
|
|
|
|
// GetPriorityHigher gets `AVTaskCallbacks.priority_higher` value.
|
|
func (cbs *AVTaskCallbacks) GetPriorityHigher() AvExecutorPriorityHigherFunc {
|
|
return (AvExecutorPriorityHigherFunc)(cbs.priority_higher)
|
|
}
|
|
|
|
// SetPriorityHigher sets `AVTaskCallbacks.priority_higher` value.
|
|
func (cbs *AVTaskCallbacks) SetPriorityHigher(v AvExecutorPriorityHigherFunc) {
|
|
cbs.priority_higher = (C.av_executor_priority_higher_func)(v)
|
|
}
|
|
|
|
// GetPriorityHigherAddr gets `AVTaskCallbacks.priority_higher` address.
|
|
func (cbs *AVTaskCallbacks) GetPriorityHigherAddr() *AvExecutorPriorityHigherFunc {
|
|
return (*AvExecutorPriorityHigherFunc)(&cbs.priority_higher)
|
|
}
|
|
|
|
// GetReady gets `AVTaskCallbacks.ready` value.
|
|
func (cbs *AVTaskCallbacks) GetReady() AvExecutorReadyFunc {
|
|
return (AvExecutorReadyFunc)(cbs.ready)
|
|
}
|
|
|
|
// SetReady sets `AVTaskCallbacks.ready` value.
|
|
func (cbs *AVTaskCallbacks) SetReady(v AvExecutorReadyFunc) {
|
|
cbs.ready = (C.av_executor_ready_func)(v)
|
|
}
|
|
|
|
// GetReadyAddr gets `AVTaskCallbacks.ready` address.
|
|
func (cbs *AVTaskCallbacks) GetReadyAddr() *AvExecutorReadyFunc {
|
|
return (*AvExecutorReadyFunc)(&cbs.ready)
|
|
}
|
|
|
|
// GetRun gets `AVTaskCallbacks.run` value.
|
|
func (cbs *AVTaskCallbacks) GetRun() AvExecutorRunFunc {
|
|
return (AvExecutorRunFunc)(cbs.run)
|
|
}
|
|
|
|
// SetRun sets `AVTaskCallbacks.run` value.
|
|
func (cbs *AVTaskCallbacks) SetRun(v AvExecutorRunFunc) {
|
|
cbs.run = (C.av_executor_run_func)(v)
|
|
}
|
|
|
|
// GetRunAddr gets `AVTaskCallbacks.run` address.
|
|
func (cbs *AVTaskCallbacks) GetRunAddr() *AvExecutorRunFunc {
|
|
return (*AvExecutorRunFunc)(&cbs.run)
|
|
}
|
|
|
|
// AvExecutorAlloc allocates executor.
|
|
func AvExecutorAlloc(callbacks *AVTaskCallbacks, threadCount int32) *AVExecutor {
|
|
return (*AVExecutor)(C.av_executor_alloc((*C.struct_AVTaskCallbacks)(callbacks), (C.int)(threadCount)))
|
|
}
|
|
|
|
// AvExecutorFree frees executor.
|
|
func AvExecutorFree(e **AVExecutor) {
|
|
C.av_executor_free((**C.struct_AVExecutor)(unsafe.Pointer(e)))
|
|
}
|
|
|
|
// AvExecutorExecute adds task to executor.
|
|
func AvExecutorExecute(e *AVExecutor, t *AVTask) {
|
|
C.av_executor_execute((*C.struct_AVExecutor)(e), (*C.struct_AVTask)(t))
|
|
}
|