From 8a4edc38f9df35b1d0e6af944b954077d9036d48 Mon Sep 17 00:00:00 2001 From: Nathan Woodrow Date: Mon, 14 Sep 2020 15:14:45 +1000 Subject: [PATCH] Unload camera widget correctly --- src/roam/editorwidgets/camerawidget.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/roam/editorwidgets/camerawidget.py b/src/roam/editorwidgets/camerawidget.py index f0c12ad3..b0841417 100644 --- a/src/roam/editorwidgets/camerawidget.py +++ b/src/roam/editorwidgets/camerawidget.py @@ -38,7 +38,7 @@ def __init__(self, parent=None): self.capturebutton.pressed.connect(self.capture) self.actionCancel = self.toolbar.addAction(QIcon(":/icons/cancel"), "Cancel") - self.actionCancel.triggered.connect(self.cancel.emit) + self.actionCancel.triggered.connect(self._cancel) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.toolbar) @@ -47,6 +47,16 @@ def __init__(self, parent=None): self.viewfinder.show() + def __del__(self): + if self.camera: + self.camera.unload() + + def _cancel(self): + if self.camera: + self.camera.unload() + + self.cancel.emit() + @property def list_of_cameras(self): return QCameraInfo.availableCameras() @@ -77,11 +87,14 @@ def camera_res(self): def imageCaptured(self, frameid, image): # TODO Doing a pixmap convert here is a waste but downstream needs a qpixmap for now # refactor later + if self.camera: + self.camera.unload() self.imagecaptured.emit(QPixmap.fromImage(image)) def start(self, dev=1): if self.camera: - self.camera.stop() + self.camera.unload() + cameras = QCameraInfo.availableCameras() self.camera = QCamera(cameras[dev]) self.camera.setViewfinder(self.viewfinder)