54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
import logging
|
|
from multiprocessing import Process, Queue, Event
|
|
|
|
from platypush.plugins.camera.model.writer import VideoWriter
|
|
from platypush.plugins.camera.model.writer.preview import PreviewWriter
|
|
|
|
logger = logging.getLogger('cam-preview')
|
|
|
|
|
|
class WxPreviewWriter(PreviewWriter, Process):
|
|
"""
|
|
General class for managing previews from camera devices or sources of images.
|
|
"""
|
|
|
|
def __init__(self, camera, plugin, *args, **kwargs):
|
|
Process.__init__(self, *args, **kwargs)
|
|
VideoWriter.__init__(self, camera=camera, plugin=plugin)
|
|
self.app = None
|
|
self.bitmap_queue = Queue()
|
|
self.stopped_event = Event()
|
|
|
|
def run(self) -> None:
|
|
import wx
|
|
from platypush.plugins.camera.model.writer.preview.wx.ui import Frame
|
|
|
|
self.app = wx.App()
|
|
frame = Frame(self)
|
|
frame.Center()
|
|
frame.Show()
|
|
self.app.MainLoop()
|
|
|
|
def close(self):
|
|
if not self.app:
|
|
return
|
|
|
|
self.app.ExitMainLoop()
|
|
self.app = None
|
|
self.camera.preview = None
|
|
self.bitmap_queue.close()
|
|
self.bitmap_queue = None
|
|
self.stopped_event.set()
|
|
|
|
def write(self, image):
|
|
if self.stopped_event.is_set():
|
|
return
|
|
|
|
try:
|
|
self.bitmap_queue.put(image)
|
|
except Exception as e:
|
|
logger.warning('Could not add an image to the preview queue: {}'.format(str(e)))
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|