mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Fix memory leak issues in minitor page
Issue was that QT (incorrectly?) asserted that there was a binding loop between width and height in the `NetworkMJPGImage` component. This caused the height to evalualte to `infinity`, making QT create a buffer with an infinite amount of memory. Solved by calculating a serpeate `img_scale_factor` which both the width and height uses. CURA-11180
This commit is contained in:
parent
e5e941aeba
commit
0e1262126a
2 changed files with 24 additions and 15 deletions
|
@ -1,6 +1,8 @@
|
|||
# Copyright (c) 2018 Aldo Hoeben / fieldOfView
|
||||
# NetworkMJPGImage is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from PyQt6.QtCore import QUrl, pyqtProperty, pyqtSignal, pyqtSlot, QRect, QByteArray
|
||||
from PyQt6.QtGui import QImage, QPainter
|
||||
from PyQt6.QtQuick import QQuickPaintedItem
|
||||
|
@ -19,9 +21,9 @@ class NetworkMJPGImage(QQuickPaintedItem):
|
|||
|
||||
self._stream_buffer = QByteArray()
|
||||
self._stream_buffer_start_index = -1
|
||||
self._network_manager = None # type: QNetworkAccessManager
|
||||
self._image_request = None # type: QNetworkRequest
|
||||
self._image_reply = None # type: QNetworkReply
|
||||
self._network_manager: Optional[QNetworkAccessManager] = None
|
||||
self._image_request: Optional[QNetworkRequest] = None
|
||||
self._image_reply: Optional[QNetworkReply] = None
|
||||
self._image = QImage()
|
||||
self._image_rect = QRect()
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2023 UltiMaker
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
|
@ -6,7 +6,7 @@ import UM 1.3 as UM
|
|||
import Cura 1.0 as Cura
|
||||
|
||||
Item {
|
||||
property var cameraUrl: "";
|
||||
property string cameraUrl: "";
|
||||
|
||||
Rectangle {
|
||||
anchors.fill:parent;
|
||||
|
@ -34,22 +34,29 @@ Item {
|
|||
|
||||
Cura.NetworkMJPGImage {
|
||||
id: cameraImage
|
||||
anchors.horizontalCenter: parent.horizontalCenter;
|
||||
anchors.verticalCenter: parent.verticalCenter;
|
||||
height: Math.round((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth);
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
if (cameraUrl != "") {
|
||||
start();
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
readonly property real img_scale_factor: {
|
||||
if (imageWidth > maximumWidth || imageHeight > maximumHeight) {
|
||||
return Math.min(maximumWidth / imageWidth, maximumHeight / imageHeight);
|
||||
}
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
width: imageWidth === 0 ? 800 * screenScaleFactor : imageWidth * img_scale_factor
|
||||
height: imageHeight === 0 ? 600 * screenScaleFactor : imageHeight * img_scale_factor
|
||||
|
||||
onVisibleChanged: {
|
||||
if (cameraUrl === "") return;
|
||||
|
||||
if (visible) {
|
||||
start();
|
||||
} else {
|
||||
if (cameraUrl != "") {
|
||||
stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
source: cameraUrl
|
||||
width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth);
|
||||
z: 1
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue