diff --git a/go.mod b/go.mod index 06dc690f0..cf19a9916 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( codeberg.org/gruf/go-debug v1.3.0 codeberg.org/gruf/go-errors/v2 v2.3.2 codeberg.org/gruf/go-fastcopy v1.1.2 - codeberg.org/gruf/go-ffmpreg v0.2.2 + codeberg.org/gruf/go-ffmpreg v0.2.3 codeberg.org/gruf/go-iotools v0.0.0-20240710125620-934ae9c654cf codeberg.org/gruf/go-kv v1.6.4 codeberg.org/gruf/go-list v0.0.0-20240425093752-494db03d641f diff --git a/go.sum b/go.sum index 4f46fa3da..a956ea78e 100644 --- a/go.sum +++ b/go.sum @@ -52,8 +52,8 @@ codeberg.org/gruf/go-fastcopy v1.1.2 h1:YwmYXPsyOcRBxKEE2+w1bGAZfclHVaPijFsOVOcn codeberg.org/gruf/go-fastcopy v1.1.2/go.mod h1:GDDYR0Cnb3U/AIfGM3983V/L+GN+vuwVMvrmVABo21s= codeberg.org/gruf/go-fastpath/v2 v2.0.0 h1:iAS9GZahFhyWEH0KLhFEJR+txx1ZhMXxYzu2q5Qo9c0= codeberg.org/gruf/go-fastpath/v2 v2.0.0/go.mod h1:3pPqu5nZjpbRrOqvLyAK7puS1OfEtQvjd6342Cwz56Q= -codeberg.org/gruf/go-ffmpreg v0.2.2 h1:K4I/7+BuzPLOVjL3hzTFdL8Z9wC0oRCK3xMKNVE86TE= -codeberg.org/gruf/go-ffmpreg v0.2.2/go.mod h1:oPMfBkOK7xmR/teT/dKW6SeMFpRos9ceR/OuUrxBfcQ= +codeberg.org/gruf/go-ffmpreg v0.2.3 h1:6nKpR4KzAhyWHe5E1YatqogZUZbmCmUjwv6qST/P1Ks= +codeberg.org/gruf/go-ffmpreg v0.2.3/go.mod h1:oPMfBkOK7xmR/teT/dKW6SeMFpRos9ceR/OuUrxBfcQ= codeberg.org/gruf/go-iotools v0.0.0-20240710125620-934ae9c654cf h1:84s/ii8N6lYlskZjHH+DG6jyia8w2mXMZlRwFn8Gs3A= codeberg.org/gruf/go-iotools v0.0.0-20240710125620-934ae9c654cf/go.mod h1:zZAICsp5rY7+hxnws2V0ePrWxE0Z2Z/KXcN3p/RQCfk= codeberg.org/gruf/go-kv v1.6.4 h1:3NZiW8HVdBM3kpOiLb7XfRiihnzZWMAixdCznguhILk= diff --git a/internal/media/ffmpeg/ffmpeg.go b/internal/media/ffmpeg/ffmpeg.go index 357289fcc..253323989 100644 --- a/internal/media/ffmpeg/ffmpeg.go +++ b/internal/media/ffmpeg/ffmpeg.go @@ -21,11 +21,9 @@ import ( "context" ffmpeglib "codeberg.org/gruf/go-ffmpreg/embed/ffmpeg" - "codeberg.org/gruf/go-ffmpreg/util" "codeberg.org/gruf/go-ffmpreg/wasm" "github.com/tetratelabs/wazero" - "github.com/tetratelabs/wazero/api" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" ) @@ -60,13 +58,6 @@ var ffmpegPool = wasmInstancePool{ // Prepare default "env" host module. env := rt.NewHostModuleBuilder("env") - env = env.NewFunctionBuilder(). - WithGoModuleFunction( - api.GoModuleFunc(util.Wasm_Tempnam), - []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, - []api.ValueType{api.ValueTypeI32}, - ). - Export("tempnam") // Instantiate "env" module in our runtime. _, err := env.Instantiate(context.Background()) diff --git a/internal/media/ffmpeg/ffprobe.go b/internal/media/ffmpeg/ffprobe.go index 0b9660e60..19582450f 100644 --- a/internal/media/ffmpeg/ffprobe.go +++ b/internal/media/ffmpeg/ffprobe.go @@ -21,11 +21,9 @@ import ( "context" ffprobelib "codeberg.org/gruf/go-ffmpreg/embed/ffprobe" - "codeberg.org/gruf/go-ffmpreg/util" "codeberg.org/gruf/go-ffmpreg/wasm" "github.com/tetratelabs/wazero" - "github.com/tetratelabs/wazero/api" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" ) @@ -60,13 +58,6 @@ var ffprobePool = wasmInstancePool{ // Prepare default "env" host module. env := rt.NewHostModuleBuilder("env") - env = env.NewFunctionBuilder(). - WithGoModuleFunction( - api.GoModuleFunc(util.Wasm_Tempnam), - []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, - []api.ValueType{api.ValueTypeI32}, - ). - Export("tempnam") // Instantiate "env" module in our runtime. _, err := env.Instantiate(context.Background()) diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/ffmpeg.wasm b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/ffmpeg.wasm index 36626ca05..a6f89abb7 100644 Binary files a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/ffmpeg.wasm and b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/ffmpeg.wasm differ diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/lib.go b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/lib.go index 4c1400114..127d11fde 100644 --- a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/lib.go +++ b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffmpeg/lib.go @@ -5,7 +5,6 @@ import ( "os" "github.com/tetratelabs/wazero/api" - "github.com/tetratelabs/wazero/experimental" ) func init() { @@ -31,8 +30,7 @@ const CoreFeatures = api.CoreFeatureSIMD | api.CoreFeatureNonTrappingFloatToIntConversion | api.CoreFeatureMutableGlobal | api.CoreFeatureReferenceTypes | - api.CoreFeatureSignExtensionOps | - experimental.CoreFeaturesThreads + api.CoreFeatureSignExtensionOps //go:embed ffmpeg.wasm var B []byte diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/ffprobe.wasm b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/ffprobe.wasm index ebef6767a..7522d9472 100644 Binary files a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/ffprobe.wasm and b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/ffprobe.wasm differ diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/lib.go b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/lib.go index b2ffb3c54..d73d9bed5 100644 --- a/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/lib.go +++ b/vendor/codeberg.org/gruf/go-ffmpreg/embed/ffprobe/lib.go @@ -5,7 +5,6 @@ import ( "os" "github.com/tetratelabs/wazero/api" - "github.com/tetratelabs/wazero/experimental" ) func init() { @@ -31,8 +30,7 @@ const CoreFeatures = api.CoreFeatureSIMD | api.CoreFeatureNonTrappingFloatToIntConversion | api.CoreFeatureMutableGlobal | api.CoreFeatureReferenceTypes | - api.CoreFeatureSignExtensionOps | - experimental.CoreFeaturesThreads + api.CoreFeatureSignExtensionOps //go:embed ffprobe.wasm var B []byte diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/util/funcs.go b/vendor/codeberg.org/gruf/go-ffmpreg/util/funcs.go deleted file mode 100644 index 4b584cf41..000000000 --- a/vendor/codeberg.org/gruf/go-ffmpreg/util/funcs.go +++ /dev/null @@ -1,65 +0,0 @@ -package util - -import ( - "context" - "os" - "path" - "strconv" - "time" - - "github.com/tetratelabs/wazero/api" -) - -// Wasm_Tempnam wraps Go_Tempnam to fulfill wazero's api.GoModuleFunc, -// the argument definition is (i32, i32) and return definition is (i32). -// NOTE: the calling module MUST have access to exported malloc / free. -func Wasm_Tempnam(ctx context.Context, mod api.Module, stack []uint64) { - dirptr := api.DecodeU32(stack[0]) - pfxptr := api.DecodeU32(stack[1]) - dir := readString(ctx, mod, dirptr, 0) - pfx := readString(ctx, mod, pfxptr, 0) - tmpstr := Go_Tempnam(dir, pfx) - tmpptr := writeString(ctx, mod, tmpstr) - stack[0] = api.EncodeU32(tmpptr) -} - -// Go_Tempname is functionally similar to C's tempnam. -func Go_Tempnam(dir, prefix string) string { - now := time.Now().Unix() - prefix = path.Join(dir, prefix) - for i := 0; i < 1000; i++ { - n := murmur2(uint32(now + int64(i))) - name := prefix + strconv.FormatUint(uint64(n), 10) - _, err := os.Stat(name) - if err == nil { - continue - } else if os.IsNotExist(err) { - return name - } else { - panic(err) - } - } - panic("too many attempts") -} - -// murmur2 is a simple uint32 murmur2 hash -// impl with fixed seed and input size. -func murmur2(k uint32) (h uint32) { - const ( - // seed ^ bitlen - s = uint32(2147483647) ^ 8 - - M = 0x5bd1e995 - R = 24 - ) - h = s - k *= M - k ^= k >> R - k *= M - h *= M - h ^= k - h ^= h >> 13 - h *= M - h ^= h >> 15 - return -} diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/util/wasm.go b/vendor/codeberg.org/gruf/go-ffmpreg/util/wasm.go deleted file mode 100644 index fce41d0a0..000000000 --- a/vendor/codeberg.org/gruf/go-ffmpreg/util/wasm.go +++ /dev/null @@ -1,81 +0,0 @@ -package util - -import ( - "bytes" - "context" - - "github.com/tetratelabs/wazero/api" -) - -// NOTE: -// the below functions are not very well optimized -// for repeated calls. this is relying on the fact -// that the only place they get used (tempnam), is -// not called very often, should only be once per run -// so calls to ExportedFunction() and Call() instead -// of caching api.Function and using CallWithStack() -// will work out the same (if only called once). - -// maxaddr is the maximum -// wasm32 memory address. -const maxaddr = ^uint32(0) - -func malloc(ctx context.Context, mod api.Module, sz uint32) uint32 { - stack, err := mod.ExportedFunction("malloc").Call(ctx, uint64(sz)) - if err != nil { - panic(err) - } - ptr := api.DecodeU32(stack[0]) - if ptr == 0 { - panic("out of memory") - } - return ptr -} - -func free(ctx context.Context, mod api.Module, ptr uint32) { - if ptr != 0 { - mod.ExportedFunction("free").Call(ctx, uint64(ptr)) - } -} - -func view(ctx context.Context, mod api.Module, ptr uint32, n uint32) []byte { - if n == 0 { - n = maxaddr - ptr - } - mem := mod.Memory() - b, ok := mem.Read(ptr, n) - if !ok { - panic("out of range") - } - return b -} - -func read(ctx context.Context, mod api.Module, ptr, n uint32) []byte { - return bytes.Clone(view(ctx, mod, ptr, n)) -} - -func readString(ctx context.Context, mod api.Module, ptr, n uint32) string { - return string(view(ctx, mod, ptr, n)) -} - -func write(ctx context.Context, mod api.Module, b []byte) uint32 { - mem := mod.Memory() - len := uint32(len(b)) - ptr := malloc(ctx, mod, len) - ok := mem.Write(ptr, b) - if !ok { - panic("out of range") - } - return ptr -} - -func writeString(ctx context.Context, mod api.Module, str string) uint32 { - mem := mod.Memory() - len := uint32(len(str) + 1) - ptr := malloc(ctx, mod, len) - ok := mem.WriteString(ptr, str) - if !ok { - panic("out of range") - } - return ptr -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 1f2ab7c93..eb5fd424b 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -30,11 +30,10 @@ codeberg.org/gruf/go-fastcopy # codeberg.org/gruf/go-fastpath/v2 v2.0.0 ## explicit; go 1.14 codeberg.org/gruf/go-fastpath/v2 -# codeberg.org/gruf/go-ffmpreg v0.2.2 +# codeberg.org/gruf/go-ffmpreg v0.2.3 ## explicit; go 1.22.0 codeberg.org/gruf/go-ffmpreg/embed/ffmpeg codeberg.org/gruf/go-ffmpreg/embed/ffprobe -codeberg.org/gruf/go-ffmpreg/util codeberg.org/gruf/go-ffmpreg/wasm # codeberg.org/gruf/go-iotools v0.0.0-20240710125620-934ae9c654cf ## explicit; go 1.21