Merge branch 'github-master'
Some checks failed
docker / Docker (push) Has been cancelled
test / Docker Test (push) Has been cancelled

This commit is contained in:
Failure 2025-12-06 17:14:52 -08:00
commit f1dd9fc2ed
167 changed files with 2002 additions and 513 deletions

56
ffmpeg/callback.go Normal file
View file

@ -0,0 +1,56 @@
package ffmpeg
// #include "ffmpeg.h"
import "C"
import (
"io"
"reflect"
"unsafe"
"github.com/cshum/vipsgen/pointer"
)
//export goPacketRead
func goPacketRead(opaque unsafe.Pointer, buffer *C.uint8_t, bufSize C.int) C.int {
ctx, ok := pointer.Restore(opaque).(*AVContext)
if !ok || ctx.reader == nil {
return C.int(ErrUnknown)
}
size := int(bufSize)
sh := &reflect.SliceHeader{
Data: uintptr(unsafe.Pointer(buffer)),
Len: size,
Cap: size,
}
buf := *(*[]byte)(unsafe.Pointer(sh))
n, err := ctx.reader.Read(buf)
if err == io.EOF {
if n == 0 {
return C.int(ErrEOF)
}
} else if err != nil {
return C.int(ErrUnknown)
}
return C.int(n)
}
//export goPacketSeek
func goPacketSeek(opaque unsafe.Pointer, offset C.int64_t, whence C.int) C.int64_t {
ctx, ok := pointer.Restore(opaque).(*AVContext)
if !ok || ctx.seeker == nil {
return C.int64_t(ErrUnknown)
}
if whence == C.AVSEEK_SIZE {
return C.int64_t(ctx.size)
}
n, err := ctx.seeker.Seek(int64(offset), int(whence))
if err != nil {
return C.int64_t(ErrUnknown)
}
return C.int64_t(n)
}
//export goAVLoggingHandler
func goAVLoggingHandler(level C.int, cstr *C.char) {
log(AVLogLevel(level), C.GoString(cstr))
}