/**************************************************************************** * * (c) 2009-2016 QGROUNDCONTROL PROJECT * * QGroundControl is licensed according to the terms in the file * COPYING.md in the root of the source code directory. * ****************************************************************************/ import QtQuick 2.11 import QtQuick.Controls 2.4 import QGroundControl 1.0 import QGroundControl.FlightDisplay 1.0 import QGroundControl.FlightMap 1.0 import QGroundControl.ScreenTools 1.0 import QGroundControl.Controls 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Vehicle 1.0 import QGroundControl.Controllers 1.0 Item { id: root property double _ar: QGroundControl.videoManager.aspectRatio property bool _showGrid: QGroundControl.settingsManager.videoSettings.gridLines.rawValue > 0 property var _videoReceiver: QGroundControl.videoManager.videoReceiver property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property var _dynamicCameras: _activeVehicle ? _activeVehicle.dynamicCameras : null property bool _connected: _activeVehicle ? !_activeVehicle.connectionLost : false property int _curCameraIndex: _dynamicCameras ? _dynamicCameras.currentCamera : 0 property bool _isCamera: _dynamicCameras ? _dynamicCameras.cameras.count > 0 : false property var _camera: _isCamera ? _dynamicCameras.cameras.get(_curCameraIndex) : null property bool _hasZoom: _camera && _camera.hasZoom property int _fitMode: QGroundControl.settingsManager.videoSettings.videoFit.rawValue Rectangle { id: noVideo anchors.fill: parent color: Qt.rgba(0,0,0,0.75) visible: !(_videoReceiver && _videoReceiver.videoRunning) QGCLabel { text: QGroundControl.settingsManager.videoSettings.streamEnabled.rawValue ? qsTr("WAITING FOR VIDEO") : qsTr("VIDEO DISABLED") font.family: ScreenTools.demiboldFontFamily color: "white" font.pointSize: _mainIsMap ? ScreenTools.smallFontPointSize : ScreenTools.largeFontPointSize anchors.centerIn: parent } MouseArea { anchors.fill: parent onDoubleClicked: { QGroundControl.videoManager.fullScreen = !QGroundControl.videoManager.fullScreen } } } Rectangle { anchors.fill: parent color: "black" visible: _videoReceiver && _videoReceiver.videoRunning function getWidth() { //-- Fit Width or Stretch if(_fitMode === 0 || _fitMode === 2) { return parent.width } //-- Fit Height return _ar != 0.0 ? parent.height * _ar : parent.width } function getHeight() { //-- Fit Height or Stretch if(_fitMode === 1 || _fitMode === 2) { return parent.height } //-- Fit Width return _ar != 0.0 ? parent.width * (1 / _ar) : parent.height } Component { id: videoBackgroundComponent QGCVideoBackground { id: videoContent receiver: _videoReceiver display: _videoReceiver && _videoReceiver.videoSurface Connections { target: _videoReceiver onImageFileChanged: { videoContent.grabToImage(function(result) { if (!result.saveToFile(_videoReceiver.imageFile)) { console.error('Error capturing video frame'); } }); } } Rectangle { color: Qt.rgba(1,1,1,0.5) height: parent.height width: 1 x: parent.width * 0.33 visible: _showGrid && !QGroundControl.videoManager.fullScreen } Rectangle { color: Qt.rgba(1,1,1,0.5) height: parent.height width: 1 x: parent.width * 0.66 visible: _showGrid && !QGroundControl.videoManager.fullScreen } Rectangle { color: Qt.rgba(1,1,1,0.5) width: parent.width height: 1 y: parent.height * 0.33 visible: _showGrid && !QGroundControl.videoManager.fullScreen } Rectangle { color: Qt.rgba(1,1,1,0.5) width: parent.width height: 1 y: parent.height * 0.66 visible: _showGrid && !QGroundControl.videoManager.fullScreen } } } Loader { // GStreamer is causing crashes on Lenovo laptop OpenGL Intel drivers. In order to workaround this // we don't load a QGCVideoBackground object when video is disabled. This prevents any video rendering // code from running. Setting QGCVideoBackground.receiver/display = null does not work to prevent any // video OpenGL from being generated. Hence the Loader to completely remove it. height: parent.getHeight() width: parent.getWidth() anchors.centerIn: parent visible: _videoReceiver && _videoReceiver.videoRunning sourceComponent: videoDisabled ? null : videoBackgroundComponent property bool videoDisabled: QGroundControl.settingsManager.videoSettings.videoSource.rawValue === QGroundControl.settingsManager.videoSettings.disabledVideoSource } MouseArea { anchors.fill: parent onDoubleClicked: { QGroundControl.videoManager.fullScreen = !QGroundControl.videoManager.fullScreen } } PinchArea { id: pinchZoom enabled: _hasZoom anchors.fill: parent onPinchStarted: pinchZoom.zoom = 0 onPinchUpdated: { if(_hasZoom) { var z = 0 if(pinch.scale < 1) { z = Math.round(pinch.scale * -10) } else { z = Math.round(pinch.scale) } if(pinchZoom.zoom != z) { _camera.stepZoom(z) } } } property int zoom: 0 } } }