Skip to content

CameraVideoReceiver

plantimager.controller.camera.CameraVideoReceiver Link

CameraVideoReceiver Link

CameraVideoReceiver(parent=None)

Bases: QObject

Receives frames from remote camera using PyAVReceiver. Sets received frame to videoSink.

Source code in plantimager/controller/camera/CameraVideoReceiver.py
110
111
112
113
114
115
116
117
118
119
def __init__(self, parent=None):
    super().__init__(parent)
    self._source: str = None
    self._format: str = None
    self._videoSink: QVideoSink = None
    self._auto_play: bool = False
    self._rotation: int = 0  # degrees
    self.receiver: PyAVReceiver = None
    self.worker: ReceiverWorker = None
    finalize(self, self._delete_worker)

componentComplete Link

componentComplete()

Must be from QML in the signal Component. At this point all static values and binding values have been assigned to the class.

This is an awful fix required because QQmlParserStatus does not work Meant to use https://doc.qt.io/qtforpython-6/PySide6/QtQml/QQmlParserStatus.html instead :return:

Source code in plantimager/controller/camera/CameraVideoReceiver.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
@Slot()
def componentComplete(self, /):
    """
    Must be from QML in the signal Component.
    At this point all static values and binding values have been assigned to the class.

    This is an awful fix required because QQmlParserStatus does not work
    Meant to use https://doc.qt.io/qtforpython-6/PySide6/QtQml/QQmlParserStatus.html instead
    :return:
    """
    if self._source and self._format:
        self._new_media()
    if self._auto_play and self._videoSink:
        self.play()
    self.videoSinkChanged.connect(lambda : self.play() if self._auto_play else None)
    self.sourceChanged.connect(self._new_media)