QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MavlinkCameraControlInterface.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtCore/QPointF>
5#include <QtCore/QRectF>
6#include <QtCore/QSizeF>
7
8#include "FactGroup.h"
9
10#include <QtQmlIntegration/QtQmlIntegration>
11
15class Vehicle;
16
19{
20 Q_OBJECT
21 QML_ELEMENT
22 QML_UNCREATABLE("")
23 Q_MOC_INCLUDE("QGCVideoStreamInfo.h")
24 Q_MOC_INCLUDE("QmlObjectListModel.h")
25 Q_PROPERTY(Fact* exposureMode READ exposureMode NOTIFY parametersReady)
26 Q_PROPERTY(Fact* ev READ ev NOTIFY parametersReady)
27 Q_PROPERTY(Fact* iso READ iso NOTIFY parametersReady)
28 Q_PROPERTY(Fact* shutterSpeed READ shutterSpeed NOTIFY parametersReady)
29 Q_PROPERTY(Fact* aperture READ aperture NOTIFY parametersReady)
30 Q_PROPERTY(Fact* wb READ wb NOTIFY parametersReady)
31 Q_PROPERTY(Fact* mode READ mode NOTIFY parametersReady)
32
33 Q_PROPERTY(int version READ version NOTIFY infoChanged)
34 Q_PROPERTY(QString modelName READ modelName NOTIFY infoChanged)
35 Q_PROPERTY(QString vendor READ vendor NOTIFY infoChanged)
36 Q_PROPERTY(QString firmwareVersion READ firmwareVersion NOTIFY infoChanged)
37 Q_PROPERTY(qreal focalLength READ focalLength NOTIFY infoChanged)
38 Q_PROPERTY(QSizeF sensorSize READ sensorSize NOTIFY infoChanged)
39 Q_PROPERTY(QSize resolution READ resolution NOTIFY infoChanged)
40 Q_PROPERTY(bool hasModes READ hasModes NOTIFY infoChanged)
41 Q_PROPERTY(bool hasZoom READ hasZoom NOTIFY infoChanged)
42 Q_PROPERTY(bool hasFocus READ hasFocus NOTIFY infoChanged)
43 Q_PROPERTY(bool hasVideoStream READ hasVideoStream NOTIFY infoChanged)
44 Q_PROPERTY(bool hasTracking READ hasTracking NOTIFY infoChanged)
46 Q_PROPERTY(bool supportsTrackingRect READ supportsTrackingRect NOTIFY infoChanged)
47 Q_PROPERTY(bool photosInVideoMode READ photosInVideoMode NOTIFY infoChanged)
48 Q_PROPERTY(bool videoInPhotoMode READ videoInPhotoMode NOTIFY infoChanged)
49 Q_PROPERTY(bool isBasic READ isBasic NOTIFY infoChanged)
50
51
53
54 Q_PROPERTY(quint32 storageFree READ storageFree NOTIFY storageFreeChanged)
55 Q_PROPERTY(QString storageFreeStr READ storageFreeStr NOTIFY storageFreeChanged)
56 Q_PROPERTY(quint32 storageTotal READ storageTotal NOTIFY storageTotalChanged)
59 Q_PROPERTY(bool paramComplete READ paramComplete NOTIFY parametersReady)
60 Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
61 Q_PROPERTY(qreal focusLevel READ focusLevel WRITE setFocusLevel NOTIFY focusLevelChanged)
62 Q_PROPERTY(QStringList activeSettings READ activeSettings NOTIFY activeSettingsChanged)
64 Q_PROPERTY(qreal photoLapse READ photoLapse WRITE setPhotoLapse NOTIFY photoLapseChanged)
68 Q_PROPERTY(bool autoStream READ autoStream NOTIFY autoStreamChanged)
69 Q_PROPERTY(QmlObjectListModel* streams READ streams NOTIFY streamsChanged)
72 Q_PROPERTY(quint32 recordTime READ recordTime NOTIFY recordTimeChanged)
73 Q_PROPERTY(QString recordTimeStr READ recordTimeStr NOTIFY recordTimeChanged)
74 Q_PROPERTY(QStringList streamLabels READ streamLabels NOTIFY streamLabelsChanged)
76 Q_PROPERTY(double thermalOpacity READ thermalOpacity WRITE setThermalOpacity NOTIFY thermalOpacityChanged)
77
78 // Camera tracking properties
85
86 // These properties are used to determine what controls to show in the UI and are based on both the camera capabilities as well as the video manager status.
87 // They are not necessarily directly related to the MAVLink camera capabilities.
88 Q_PROPERTY(bool capturesVideo READ capturesVideo NOTIFY infoChanged)
89 Q_PROPERTY(bool capturesPhotos READ capturesPhotos NOTIFY infoChanged)
90
91 // These are "virtual" states which take into account both the mavlink camera capabilities as well as the gstreamer ability to locally record video
92 // as well as to do a photo grab from the video stream. These are what the UI should use to determine what options to present to the user and are updated
93 // based on both the camera info as well as the video manager status.
96
97 friend class QGCCameraParamIO;
98
99public:
100 explicit MavlinkCameraControlInterface(Vehicle *vehicle, QObject *parent = nullptr);
102
109 Q_ENUM(CameraMode)
110
115 Q_ENUM(PhotoCaptureMode)
116
122 Q_ENUM(CaptureVideoState)
123
130 Q_ENUM(CapturePhotosState)
131
133 STORAGE_EMPTY = STORAGE_STATUS_EMPTY,
134 STORAGE_UNFORMATTED = STORAGE_STATUS_UNFORMATTED,
135 STORAGE_READY = STORAGE_STATUS_READY,
136 STORAGE_NOT_SUPPORTED = STORAGE_STATUS_NOT_SUPPORTED
137 };
138 Q_ENUM(StorageStatus)
139
146 Q_ENUM(ThermalViewMode)
147
148
149 Q_INVOKABLE virtual void setCameraModeVideo() = 0;
150 Q_INVOKABLE virtual void setCameraModePhoto() = 0;
151 Q_INVOKABLE virtual void toggleCameraMode() = 0;
152 Q_INVOKABLE virtual bool takePhoto() = 0;
153 Q_INVOKABLE virtual bool stopTakePhoto() = 0;
154 Q_INVOKABLE virtual bool startVideoRecording() = 0;
155 Q_INVOKABLE virtual bool stopVideoRecording() = 0;
156 Q_INVOKABLE virtual bool toggleVideoRecording() = 0;
157 Q_INVOKABLE virtual void resetSettings() = 0;
158 Q_INVOKABLE virtual void formatCard(int id = 1) = 0;
159 Q_INVOKABLE virtual void stepZoom(int direction) = 0;
160 Q_INVOKABLE virtual void startZoom(int direction) = 0;
161 Q_INVOKABLE virtual void stopZoom() = 0;
162 Q_INVOKABLE virtual void stepFocus(int direction) = 0;
163 Q_INVOKABLE virtual void startFocus(int direction) = 0;
164 Q_INVOKABLE virtual void stopFocus() = 0;
165 Q_INVOKABLE virtual void stopStream() = 0;
166 Q_INVOKABLE virtual void resumeStream() = 0;
167 Q_INVOKABLE virtual void startTrackingRect(QRectF rec) = 0;
168 Q_INVOKABLE virtual void startTrackingPoint(QPointF point, double radius) = 0;
169 Q_INVOKABLE virtual void stopTracking() = 0;
170
171 virtual int version() const = 0;
172 virtual QString modelName() const = 0;
173 virtual QString vendor() const = 0;
174 virtual QString firmwareVersion() const = 0;
175 virtual qreal focalLength() const = 0;
176 virtual QSizeF sensorSize() const = 0;
177 virtual QSize resolution() const = 0;
178 virtual bool capturesVideo() const = 0;
179 virtual bool capturesPhotos() const = 0;
180 virtual bool hasModes() const = 0;
181 virtual bool hasZoom() const = 0;
182 virtual bool hasFocus() const = 0;
183 virtual bool hasTracking() const = 0;
184 virtual bool supportsTrackingPoint() const = 0;
185 virtual bool supportsTrackingRect() const = 0;
186 virtual bool hasVideoStream() const = 0;
187 virtual bool photosInVideoMode() const = 0;
188 virtual bool videoInPhotoMode() const = 0;
191
192 virtual int compID() const = 0;
193 virtual bool isBasic() const = 0;
195 virtual qreal photoLapse() const { return _photoLapse; }
196 virtual int photoLapseCount() const { return _photoLapseCount; }
197 virtual CameraMode cameraMode() const { return _cameraMode; }
198 virtual StorageStatus storageStatus() const = 0;
199 virtual QStringList activeSettings() const = 0;
200 virtual quint32 storageFree() const = 0;
201 virtual QString storageFreeStr() const = 0;
202 virtual quint32 storageTotal() const = 0;
203 virtual int batteryRemaining() const = 0;
204 virtual QString batteryRemainingStr() const = 0;
205 virtual bool paramComplete() const = 0;
206 virtual qreal zoomLevel() const = 0;
207 virtual qreal focusLevel() const = 0;
208
212 virtual int currentStream() const = 0;
213 virtual void setCurrentStream(int stream) = 0;
214 virtual bool autoStream() const = 0;
215 virtual quint32 recordTime() const = 0;
216 virtual QString recordTimeStr() const = 0;
217
218 virtual Fact *exposureMode() = 0;
219 virtual Fact *ev() = 0;
220 virtual Fact *iso() = 0;
221 virtual Fact *shutterSpeed() = 0;
222 virtual Fact *aperture() = 0;
223 virtual Fact *wb() = 0;
224 virtual Fact *mode() = 0;
225
226 virtual QStringList streamLabels() const = 0;
227
228 virtual ThermalViewMode thermalMode() const = 0;
230 virtual double thermalOpacity() const = 0;
231 virtual void setThermalOpacity(double val) = 0;
232
233 virtual void setZoomLevel(qreal level) = 0;
234 virtual void setFocusLevel(qreal level) = 0;
237 virtual void setPhotoLapse(qreal interval) = 0;
238 virtual void setPhotoLapseCount(int count) = 0;
239
240 virtual bool trackingEnabled() const = 0;
241 virtual void setTrackingEnabled(bool set) = 0;
242
243 virtual bool trackingImageIsActive() const = 0;
244 virtual bool trackingImageIsPoint() const = 0;
245 virtual QRectF trackingImageRect() const = 0;
246 virtual QPointF trackingImagePoint() const = 0;
247 virtual qreal trackingImageRadius() const = 0;
248
249 virtual void factChanged(Fact *pFact) = 0;
250 virtual bool incomingParameter(Fact *pFact, QVariant &newValue) = 0;
251 virtual bool validateParameter(Fact *pFact, QVariant &newValue) = 0;
252
253 virtual void handleBatteryStatus(const mavlink_battery_status_t &bs) = 0;
254 virtual void handleCameraCaptureStatus(const mavlink_camera_capture_status_t &cameraCaptureStatus) = 0;
255 virtual void handleParamExtAck(const mavlink_param_ext_ack_t &paramExtAck) = 0;
256 virtual void handleParamExtValue(const mavlink_param_ext_value_t &paramExtValue) = 0;
257 virtual void handleCameraSettings(const mavlink_camera_settings_t &settings) = 0;
258 virtual void handleStorageInformation(const mavlink_storage_information_t &storageInformation) = 0;
259 virtual void handleTrackingImageStatus(const mavlink_camera_tracking_image_status_t &trackingImageStatus) = 0;
260 virtual void handleVideoStreamInformation(const mavlink_video_stream_information_t &videoStreamInformation) = 0;
261 virtual void handleVideoStreamStatus(const mavlink_video_stream_status_t &videoStreamStatus) = 0;
262
264 QString captureImageStatusToStr(uint8_t image_status);
265 QString captureVideoStatusToStr(uint8_t video_status);
266 QString storageStatusToStr(uint8_t status);
267
268signals:
280 void dataReady(const QByteArray &data);
301
302protected slots:
303 virtual void _paramDone() = 0;
304
305protected:
312
321
324
325 Vehicle *_vehicle = nullptr;
330 qreal _photoLapse = 1.0;
333};
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:15
A Fact is used to hold a single value within the system.
Definition Fact.h:16
Abstract base class for all camera controls: real and simulated.
virtual int batteryRemaining() const =0
virtual StorageStatus storageStatus() const =0
virtual QStringList streamLabels() const =0
Stream names to show the user (for selection)
virtual void formatCard(int id=1)=0
virtual void setCameraModePhoto()=0
virtual QGCVideoStreamInfo * thermalStreamInstance()=0
virtual QmlObjectListModel * streams()=0
virtual void setZoomLevel(qreal level)=0
virtual QSize resolution() const =0
virtual QString recordTimeStr() const =0
virtual void handleBatteryStatus(const mavlink_battery_status_t &bs)=0
virtual QString firmwareVersion() const =0
virtual quint32 storageFree() const =0
virtual void handleTrackingImageStatus(const mavlink_camera_tracking_image_status_t &trackingImageStatus)=0
virtual void resumeStream()=0
virtual void setThermalMode(ThermalViewMode mode)=0
virtual Fact * shutterSpeed()=0
virtual void setTrackingEnabled(bool set)=0
virtual void setCameraModeVideo()=0
virtual bool capturesPhotos() const =0
virtual void handleCameraSettings(const mavlink_camera_settings_t &settings)=0
virtual CaptureVideoState captureVideoState() const =0
virtual QString modelName() const =0
virtual void stopTracking()=0
virtual QPointF trackingImagePoint() const =0
virtual Fact * exposureMode()=0
virtual void setPhotoLapse(qreal interval)=0
virtual QStringList activeSettings() const =0
virtual bool startVideoRecording()=0
virtual bool stopVideoRecording()=0
virtual void setPhotoLapseCount(int count)=0
virtual bool trackingImageIsActive() const =0
virtual quint32 storageTotal() const =0
virtual bool capturesVideo() const =0
virtual void factChanged(Fact *pFact)=0
Notify controller a parameter has changed.
virtual bool stopTakePhoto()=0
virtual qreal trackingImageRadius() const =0
virtual qreal focusLevel() const =0
virtual void handleVideoStreamInformation(const mavlink_video_stream_information_t &videoStreamInformation)=0
virtual void stepFocus(int direction)=0
PhotoCaptureStatus _photoCaptureStatus() const
virtual void toggleCameraMode()=0
virtual bool incomingParameter(Fact *pFact, QVariant &newValue)=0
Allow controller to modify or invalidate incoming parameter.
virtual void handleStorageInformation(const mavlink_storage_information_t &storageInformation)=0
virtual QString batteryRemainingStr() const =0
virtual PhotoCaptureMode photoCaptureMode() const
virtual QSizeF sensorSize() const =0
virtual qreal focalLength() const =0
virtual bool hasZoom() const =0
virtual void startTrackingRect(QRectF rec)=0
virtual void setCameraMode(CameraMode cameraMode)=0
virtual int compID() const =0
virtual void handleParamExtValue(const mavlink_param_ext_value_t &paramExtValue)=0
virtual double thermalOpacity() const =0
virtual bool videoInPhotoMode() const =0
virtual bool hasFocus() const =0
virtual bool supportsTrackingPoint() const =0
virtual void setPhotoCaptureMode(PhotoCaptureMode mode)=0
virtual void setThermalOpacity(double val)=0
QString captureImageStatusToStr(uint8_t image_status)
virtual bool paramComplete() const =0
virtual QString vendor() const =0
virtual void stepZoom(int direction)=0
virtual void setFocusLevel(qreal level)=0
virtual quint32 recordTime() const =0
virtual bool supportsTrackingRect() const =0
virtual void startFocus(int direction)=0
virtual QGCVideoStreamInfo * currentStreamInstance()=0
virtual bool autoStream() const =0
virtual void handleVideoStreamStatus(const mavlink_video_stream_status_t &videoStreamStatus)=0
virtual bool validateParameter(Fact *pFact, QVariant &newValue)=0
Allow controller to modify or invalidate parameter change.
virtual void setCurrentStream(int stream)=0
virtual int currentStream() const =0
virtual void handleParamExtAck(const mavlink_param_ext_ack_t &paramExtAck)=0
VideoCaptureStatus _videoCaptureStatus() const
virtual qreal zoomLevel() const =0
virtual QRectF trackingImageRect() const =0
virtual bool isBasic() const =0
virtual bool trackingImageIsPoint() const =0
virtual bool hasModes() const =0
virtual void startTrackingPoint(QPointF point, double radius)=0
virtual bool trackingEnabled() const =0
virtual Fact * aperture()=0
virtual void startZoom(int direction)=0
virtual int version() const =0
virtual bool toggleVideoRecording()=0
virtual QString storageFreeStr() const =0
virtual ThermalViewMode thermalMode() const =0
virtual bool photosInVideoMode() const =0
virtual CapturePhotosState capturePhotosState() const =0
virtual void handleCameraCaptureStatus(const mavlink_camera_capture_status_t &cameraCaptureStatus)=0
virtual bool hasVideoStream() const =0
virtual bool hasTracking() const =0
virtual void resetSettings()=0
QString captureVideoStatusToStr(uint8_t video_status)
void dataReady(const QByteArray &data)
Camera parameter handler.
Definition QGCCameraIO.h:13
Encapsulates the contents of a VIDEO_STREAM_INFORMATION message.