mirror of
https://github.com/qrtc/ffmpeg-dev-go.git
synced 2025-10-08 00:51:20 +08:00
2023-11-01 18:52:03 CST W44D3
This commit is contained in:
@@ -180,7 +180,7 @@ func (fltc *AVFilterContext) GetName() string {
|
|||||||
|
|
||||||
// SetName sets `AVFilterContext.name` value.
|
// SetName sets `AVFilterContext.name` value.
|
||||||
func (fltc *AVFilterContext) SetName(v string) {
|
func (fltc *AVFilterContext) SetName(v string) {
|
||||||
C.free(unsafe.Pointer(fltc.name))
|
FreePointer(fltc.name)
|
||||||
fltc.name, _ = StringCasting(v)
|
fltc.name, _ = StringCasting(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1032,7 +1032,7 @@ func (fltio *AVFilterInOut) GetName() string {
|
|||||||
|
|
||||||
// SetName sets `AVFilterInOut.name` value.
|
// SetName sets `AVFilterInOut.name` value.
|
||||||
func (fltio *AVFilterInOut) SetName(v string) {
|
func (fltio *AVFilterInOut) SetName(v string) {
|
||||||
C.free(unsafe.Pointer(fltio.name))
|
FreePointer(fltio.name)
|
||||||
fltio.name, _ = StringCasting(v)
|
fltio.name, _ = StringCasting(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1140,7 +1140,7 @@ func (s *AVFormatContext) GetUrl() string {
|
|||||||
func (s *AVFormatContext) SetUrl(v string) {
|
func (s *AVFormatContext) SetUrl(v string) {
|
||||||
vPtr, _ := StringCasting(v)
|
vPtr, _ := StringCasting(v)
|
||||||
if s.url != nil {
|
if s.url != nil {
|
||||||
C.free(unsafe.Pointer(s.url))
|
FreePointer(s.url)
|
||||||
}
|
}
|
||||||
s.url = (*C.char)(vPtr)
|
s.url = (*C.char)(vPtr)
|
||||||
}
|
}
|
||||||
|
@@ -30,7 +30,7 @@ func AvTempfile(prefix string, logOffset int32, logCtx CVoidPointer) (filename s
|
|||||||
prefixPtr, prefixFunc := StringCasting(prefix)
|
prefixPtr, prefixFunc := StringCasting(prefix)
|
||||||
defer prefixFunc()
|
defer prefixFunc()
|
||||||
var filenamePtr *C.char
|
var filenamePtr *C.char
|
||||||
defer C.free(unsafe.Pointer(filenamePtr))
|
defer FreePointer(filenamePtr)
|
||||||
ret = (int32)(C.av_tempfile((*C.char)(prefixPtr),
|
ret = (int32)(C.av_tempfile((*C.char)(prefixPtr),
|
||||||
(**C.char)(unsafe.Pointer(&filenamePtr)),
|
(**C.char)(unsafe.Pointer(&filenamePtr)),
|
||||||
(C.int)(logOffset),
|
(C.int)(logOffset),
|
||||||
|
@@ -25,6 +25,33 @@ type UnsingedInteger interface {
|
|||||||
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
|
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CVoidPointer represents a (void*) type pointer in the C world.
|
||||||
|
type CVoidPointer any
|
||||||
|
|
||||||
|
// VoidPointer returns a unsafe.Pointer from CVoidPointer.
|
||||||
|
func VoidPointer(a CVoidPointer) unsafe.Pointer {
|
||||||
|
if a == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return unsafe.Pointer(reflect.ValueOf(a).Pointer())
|
||||||
|
}
|
||||||
|
|
||||||
|
// CVoidPointer represents a (void**) type pointer in the C world.
|
||||||
|
type CVoidPointerPointer any
|
||||||
|
|
||||||
|
// VoidPointerPointer returns a *unsafe.Pointer from CVoidPointerPointer.
|
||||||
|
func VoidPointerPointer(a CVoidPointerPointer) *unsafe.Pointer {
|
||||||
|
if a == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return (*unsafe.Pointer)(unsafe.Pointer(reflect.ValueOf(a).Pointer()))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FreePointer frees memory allocated in the C world.
|
||||||
|
func FreePointer(ptr CVoidPointer) {
|
||||||
|
C.free(VoidPointer(ptr))
|
||||||
|
}
|
||||||
|
|
||||||
const NIL = "\\'<nil>'\\"
|
const NIL = "\\'<nil>'\\"
|
||||||
|
|
||||||
// StringCasting casts go string to c world char* with free function.
|
// StringCasting casts go string to c world char* with free function.
|
||||||
@@ -34,7 +61,7 @@ func StringCasting(s string) (allocPtr *C.char, freeFunc func()) {
|
|||||||
return nil, func() {}
|
return nil, func() {}
|
||||||
}
|
}
|
||||||
allocPtr = C.CString(s)
|
allocPtr = C.CString(s)
|
||||||
freeFunc = func() { C.free(unsafe.Pointer(allocPtr)) }
|
freeFunc = func() { FreePointer(allocPtr) }
|
||||||
return allocPtr, freeFunc
|
return allocPtr, freeFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,28 +123,6 @@ func PointerOffset[U any, V Integer](ptr *U, offset V) *U {
|
|||||||
uintptr(unsafe.Sizeof(*ptr))*(uintptr(offset))))
|
uintptr(unsafe.Sizeof(*ptr))*(uintptr(offset))))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CVoidPointer represents a (void*) type pointer in the C world.
|
|
||||||
type CVoidPointer any
|
|
||||||
|
|
||||||
// VoidPointer returns a unsafe.Pointer from CVoidPointer.
|
|
||||||
func VoidPointer(a CVoidPointer) unsafe.Pointer {
|
|
||||||
if a == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return unsafe.Pointer(reflect.ValueOf(a).Pointer())
|
|
||||||
}
|
|
||||||
|
|
||||||
// CVoidPointer represents a (void**) type pointer in the C world.
|
|
||||||
type CVoidPointerPointer any
|
|
||||||
|
|
||||||
// VoidPointerPointer returns a *unsafe.Pointer from CVoidPointerPointer.
|
|
||||||
func VoidPointerPointer(a CVoidPointerPointer) *unsafe.Pointer {
|
|
||||||
if a == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return (*unsafe.Pointer)(unsafe.Pointer(reflect.ValueOf(a).Pointer()))
|
|
||||||
}
|
|
||||||
|
|
||||||
// CondExpr is Conditional Operator like Ternary Operator in the C world.
|
// CondExpr is Conditional Operator like Ternary Operator in the C world.
|
||||||
func CondExpr[T any](cond bool, x, y T) T {
|
func CondExpr[T any](cond bool, x, y T) T {
|
||||||
if cond {
|
if cond {
|
||||||
@@ -126,6 +131,7 @@ func CondExpr[T any](cond bool, x, y T) T {
|
|||||||
return y
|
return y
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlusPlus is ++ like operator.
|
||||||
func PlusPlus[T Integer](x *T) T {
|
func PlusPlus[T Integer](x *T) T {
|
||||||
defer func() { *x++ }()
|
defer func() { *x++ }()
|
||||||
return *x
|
return *x
|
||||||
|
Reference in New Issue
Block a user