Files
go-gst/examples/plugins/basetransform/main.go
RSWilli a4e83d3900 regenerate, remove interface virtuals, manually implement BusSyncHandler
* correctly borrow Message Source
* prevent leaks in Bus.Messages() by changing (un-)reffing
2025-09-16 22:36:09 +02:00

61 lines
1.1 KiB
Go

package main
import (
"context"
"fmt"
"os"
"os/signal"
"runtime"
"time"
"github.com/diamondburned/gotk4/pkg/core/profile"
"github.com/go-gst/go-gst/examples/plugins/basetransform/internal/customtransform"
"github.com/go-gst/go-gst/pkg/gst"
)
func run(ctx context.Context) error {
ctx, cancel := signal.NotifyContext(ctx, os.Interrupt)
defer cancel()
gst.Init()
customtransform.Register()
ret, err := gst.ParseLaunch("audiotestsrc ! gocustomtransform ! fakesink")
if err != nil {
return err
}
pipeline := ret.(gst.Pipeline)
pipeline.SetState(gst.StatePlaying)
<-ctx.Done()
pipeline.BlockSetState(gst.StateNull, gst.ClockTime(time.Second))
return ctx.Err()
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
err := run(ctx)
for range 10 {
runtime.GC()
}
if profile.Count() > 0 {
fmt.Fprintf(os.Stderr, "Memory leak detected: %d objects still tracked\n", profile.Count())
} else {
fmt.Fprintln(os.Stderr, "No memory leaks detected")
}
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}