Renamed for potential other options later

This commit is contained in:
Martyn 2021-12-17 22:38:57 +01:00
parent d21603ae80
commit fd1f81c6e7
1 changed files with 28 additions and 28 deletions

View File

@ -1,4 +1,4 @@
package webcam package gocvwebcam
import ( import (
"image" "image"
@ -11,82 +11,82 @@ import (
"gocv.io/x/gocv" "gocv.io/x/gocv"
) )
var _ fyne.WidgetRenderer = (*webcamRenderer)(nil) var _ fyne.WidgetRenderer = (*gocvGocvWebcamRenderer)(nil)
type Webcam struct { type GocvWebcam struct {
widget.BaseWidget widget.BaseWidget
WebcamID int64 GocvWebcamID int64
UpdateFPS int64 UpdateFPS int64
fpsTimer *time.Ticker fpsTimer *time.Ticker
} }
func NewWebcam() *Webcam { func NewGocvWebcam() *GocvWebcam {
w := &Webcam{} w := &GocvWebcam{}
w.ExtendBaseWidget(w) w.ExtendBaseWidget(w)
w.WebcamID = 0 w.GocvWebcamID = 0
w.UpdateFPS = 25 w.UpdateFPS = 25
return w return w
} }
func (w *Webcam) Resize(s fyne.Size) { func (w *GocvWebcam) Resize(s fyne.Size) {
w.BaseWidget.Resize(s) w.BaseWidget.Resize(s)
} }
func (w *Webcam) CreateRenderer() fyne.WidgetRenderer { func (w *GocvWebcam) CreateRenderer() fyne.WidgetRenderer {
fpsTimer := time.NewTicker(time.Duration(1000/25) * time.Millisecond) fpsTimer := time.NewTicker(time.Duration(1000/25) * time.Millisecond)
go func(w *Webcam) { go func(w *GocvWebcam) {
for { for {
_ = <-fpsTimer.C _ = <-fpsTimer.C
w.Refresh() w.Refresh()
} }
}(w) }(w)
return newWebcamRenderer(w) return newGocvWebcamRenderer(w)
} }
type webcamRenderer struct { type gocvGocvWebcamRenderer struct {
webcam *Webcam gocvGocvWebcam *GocvWebcam
background *canvas.Rectangle background *canvas.Rectangle
currentframe *canvas.Raster currentframe *canvas.Raster
goCVVideoCapture *gocv.VideoCapture goCVVideoCapture *gocv.VideoCapture
} }
func (r *webcamRenderer) actualrenderframe(w, h int) image.Image { func (r *gocvGocvWebcamRenderer) actualrenderframe(w, h int) image.Image {
webcam, _ := gocv.VideoCaptureDevice(int(r.webcam.WebcamID)) gocvGocvWebcam, _ := gocv.VideoCaptureDevice(int(r.gocvGocvWebcam.GocvWebcamID))
img := gocv.NewMat() img := gocv.NewMat()
webcam.Read(&img) gocvGocvWebcam.Read(&img)
frameImage, _ := img.ToImage() //no point doing anything other than returning anyway! frameImage, _ := img.ToImage() //no point doing anything other than returning anyway!
return frameImage return frameImage
} }
func newWebcamRenderer(w *Webcam) *webcamRenderer { func newGocvWebcamRenderer(w *GocvWebcam) *gocvGocvWebcamRenderer {
renderer := &webcamRenderer{ renderer := &gocvGocvWebcamRenderer{
webcam: w, gocvGocvWebcam: w,
background: canvas.NewRectangle(color.RGBA{255, 0, 255, 255}), background: canvas.NewRectangle(color.RGBA{255, 0, 255, 255}),
} }
renderer.currentframe = canvas.NewRaster(renderer.actualrenderframe) renderer.currentframe = canvas.NewRaster(renderer.actualrenderframe)
return renderer return renderer
} }
func (r *webcamRenderer) Objects() []fyne.CanvasObject { func (r *gocvGocvWebcamRenderer) Objects() []fyne.CanvasObject {
// The order is critical, rect is drawn first then currentframe // The order is critical, rect is drawn first then currentframe
return []fyne.CanvasObject{r.background, r.currentframe} return []fyne.CanvasObject{r.background, r.currentframe}
} }
func (r *webcamRenderer) Layout(s fyne.Size) { func (r *gocvGocvWebcamRenderer) Layout(s fyne.Size) {
r.background.Resize(s) r.background.Resize(s)
r.currentframe.Resize(s) r.currentframe.Resize(s)
} }
func (r *webcamRenderer) MinSize() fyne.Size { func (r *gocvGocvWebcamRenderer) MinSize() fyne.Size {
return fyne.NewSize(200, 200) return fyne.NewSize(200, 200)
} }
func (r *webcamRenderer) Refresh() { func (r *gocvGocvWebcamRenderer) Refresh() {
r.currentframe.Refresh() r.currentframe.Refresh()
} }
func (r *webcamRenderer) Destroy() { func (r *gocvGocvWebcamRenderer) Destroy() {
r.webcam.fpsTimer.Stop() r.gocvGocvWebcam.fpsTimer.Stop()
} // Called when the renderer is destroyed } // Called when the renderer is destroyed