From 5c6978b70a82fc94a0a489cc23bda7d6ffdef204 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Thu, 24 Aug 2023 01:01:56 +0300 Subject: [PATCH] Don't use canvas pool with the recorder --- pkg/worker/caged/libretro/frontend.go | 14 +++++++++----- pkg/worker/coordinatorhandlers.go | 4 ++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pkg/worker/caged/libretro/frontend.go b/pkg/worker/caged/libretro/frontend.go index 1f56804a6..224ae8067 100644 --- a/pkg/worker/caged/libretro/frontend.go +++ b/pkg/worker/caged/libretro/frontend.go @@ -64,7 +64,8 @@ type Frontend struct { // draw threads th int - canvas *image.Canvas + Canvas *image.Canvas + DisableCanvasPool bool done chan struct{} log *logger.Logger @@ -222,10 +223,10 @@ func (f *Frontend) handleVideo(data []byte, delta int64, fi nanoarch.FrameInfo) } // !to fix possible nil pointer dereference // when the internal pool can be nil during first Get??? - fr.Data = f.canvas.Draw(pixFmt, rot, fi.W, fi.H, fi.Packed, bpp, data, f.th) + fr.Data = f.Canvas.Draw(pixFmt, rot, fi.W, fi.H, fi.Packed, bpp, data, f.th) fr.Duration = time.Duration(delta) f.onVideo(fr) - f.canvas.Put(fr.Data) + f.Canvas.Put(fr.Data) videoPool.Put(fr) } @@ -233,7 +234,7 @@ func (f *Frontend) Shutdown() { f.log.Debug().Msgf("run loop cleanup") f.mu.Lock() f.nano.Shutdown() - f.canvas.Clear() + f.Canvas.Clear() f.SetAudio(noAudio) f.SetVideo(noVideo) f.mu.Unlock() @@ -305,7 +306,10 @@ func (f *Frontend) SetViewport(width int, height int, scale int) { f.vw, f.vh = width, height mw, mh := f.nano.GeometryMax() size := mw * scale * mh * scale - f.canvas = image.NewCanvas(width, height, size) + f.Canvas = image.NewCanvas(width, height, size) + if f.DisableCanvasPool { + f.Canvas.SetEnabled(false) + } f.mu.Unlock() } func (f *Frontend) SetVideo(ff func(*GameFrame)) { f.onVideo = ff } diff --git a/pkg/worker/coordinatorhandlers.go b/pkg/worker/coordinatorhandlers.go index 01e9bb6e8..492d03e8b 100644 --- a/pkg/worker/coordinatorhandlers.go +++ b/pkg/worker/coordinatorhandlers.go @@ -92,6 +92,10 @@ func (c *coordinator) HandleGameStart(rq api.StartGameRequest[com.Uid], w *Worke } fe.SaveOnClose = true + if w.conf.Recording.Enabled { + fe.DisableCanvasPool = true + } + var nano libretro.Emulator = fe if w.conf.Recording.Enabled {