diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-02-12 09:39:50 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-02-17 08:27:50 +0000 |
commit | 33186a09048faef5b9a6585b69e0a9cab4182a3e (patch) | |
tree | 28dfc734e1cf5928ae73c834391334713060fbd7 | |
parent | b94b47d472c70124c38d4feb546df26d8015b3be (diff) | |
download | qtmultimedia-33186a09048faef5b9a6585b69e0a9cab4182a3e.tar.gz |
Get rid of QMediaService for the capture interface
Change-Id: I69a3d379bd2f1adbc4d583fd8eadcd3eb624a3af
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
43 files changed, 93 insertions, 372 deletions
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 94efe2c5f..b2bad8e8f 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -86,7 +86,6 @@ public: qmlRegisterType<QDeclarativeAudio>(uri, 5, 0, "MediaPlayer"); qmlRegisterType<QDeclarativeVideoOutput>(uri, 5, 0, "VideoOutput"); qmlRegisterType<QDeclarativeCamera>(uri, 5, 0, "Camera"); - qmlRegisterType<QDeclarativeTorch>(uri, 5, 0, "Torch"); qmlRegisterUncreatableType<QDeclarativeCameraCapture>(uri, 5, 0, "CameraCapture", tr("CameraCapture is provided by Camera")); qmlRegisterUncreatableType<QDeclarativeCameraRecorder>(uri, 5, 0, "CameraRecorder", @@ -97,6 +96,8 @@ public: tr("CameraFocus is provided by Camera")); qmlRegisterUncreatableType<QDeclarativeCameraFlash>(uri, 5, 0, "CameraFlash", tr("CameraFlash is provided by Camera")); + qmlRegisterUncreatableType<QDeclarativeTorch>(uri, 5, 0, "CameraTorch", + tr("CameraTorch is provided by Camera")); qmlRegisterUncreatableType<QDeclarativeCameraImageProcessing>(uri, 5, 0, "CameraImageProcessing", tr("CameraImageProcessing is provided by Camera")); diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp index d334f5122..6536bc5dc 100644 --- a/src/imports/multimedia/qdeclarativecamera.cpp +++ b/src/imports/multimedia/qdeclarativecamera.cpp @@ -42,6 +42,7 @@ #include "qdeclarativecameraexposure_p.h" #include "qdeclarativecameraflash_p.h" +#include "qdeclarativetorch_p.h" #include "qdeclarativecamerafocus_p.h" #include "qdeclarativecameraimageprocessing_p.h" @@ -180,6 +181,7 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) : m_videoRecorder = new QDeclarativeCameraRecorder(m_camera); m_exposure = new QDeclarativeCameraExposure(m_camera); m_flash = new QDeclarativeCameraFlash(m_camera); + m_torch = new QDeclarativeTorch(m_camera); m_focus = new QDeclarativeCameraFocus(m_camera); m_imageProcessing = new QDeclarativeCameraImageProcessing(m_camera); diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h index 0a57e708b..8e21ac290 100644 --- a/src/imports/multimedia/qdeclarativecamera_p.h +++ b/src/imports/multimedia/qdeclarativecamera_p.h @@ -70,6 +70,7 @@ QT_BEGIN_NAMESPACE class QDeclarativeCameraExposure; class QDeclarativeCameraFocus; class QDeclarativeCameraFlash; +class QDeclarativeTorch; class QDeclarativeCameraImageProcessing; class QDeclarativeMediaMetaData; class QDeclarativeCamera : public QObject, public QQmlParserStatus @@ -95,6 +96,7 @@ class QDeclarativeCamera : public QObject, public QQmlParserStatus Q_PROPERTY(QDeclarativeCameraRecorder* videoRecorder READ videoRecorder CONSTANT) Q_PROPERTY(QDeclarativeCameraExposure* exposure READ exposure CONSTANT) Q_PROPERTY(QDeclarativeCameraFlash* flash READ flash CONSTANT) + Q_PROPERTY(QDeclarativeTorch* torch READ torch CONSTANT) Q_PROPERTY(QDeclarativeCameraFocus* focus READ focus CONSTANT) Q_PROPERTY(QDeclarativeCameraImageProcessing* imageProcessing READ imageProcessing CONSTANT) Q_PROPERTY(QDeclarativeMediaMetaData *metaData READ metaData CONSTANT REVISION 1) @@ -213,6 +215,7 @@ public: QDeclarativeCameraRecorder *videoRecorder() { return m_videoRecorder; } QDeclarativeCameraExposure *exposure() { return m_exposure; } QDeclarativeCameraFlash *flash() { return m_flash; } + QDeclarativeTorch *torch() { return m_torch; } QDeclarativeCameraFocus *focus() { return m_focus; } QDeclarativeCameraImageProcessing *imageProcessing() { return m_imageProcessing; } @@ -284,6 +287,7 @@ private: QDeclarativeCameraRecorder *m_videoRecorder; QDeclarativeCameraExposure *m_exposure; QDeclarativeCameraFlash *m_flash; + QDeclarativeTorch *m_torch; QDeclarativeCameraFocus *m_focus; QDeclarativeCameraImageProcessing *m_imageProcessing; QDeclarativeMediaMetaData *m_metaData; diff --git a/src/imports/multimedia/qdeclarativetorch.cpp b/src/imports/multimedia/qdeclarativetorch.cpp index fa634cfcf..c544c0a4e 100644 --- a/src/imports/multimedia/qdeclarativetorch.cpp +++ b/src/imports/multimedia/qdeclarativetorch.cpp @@ -40,6 +40,7 @@ #include <QDebug> #include <QMediaService> #include <private/qmediaplatformcaptureinterface_p.h> +#include <qcameracontrol.h> #include "qdeclarativetorch_p.h" @@ -67,13 +68,14 @@ QT_BEGIN_NAMESPACE \endqml */ -QDeclarativeTorch::QDeclarativeTorch(QObject *parent) - : QObject(parent) +QDeclarativeTorch::QDeclarativeTorch(QCamera *camera) + : QObject(camera), + m_camera(camera) { - m_camera = new QCamera(this); + if (!camera) + return; auto *service = m_camera->captureInterface(); - - m_exposure = service ? service->requestControl<QCameraExposureControl*>() : 0; + m_exposure = service->cameraControl()->exposureControl(); if (m_exposure) connect(m_exposure, SIGNAL(actualValueChanged(int)), SLOT(parameterChanged(int))); diff --git a/src/imports/multimedia/qdeclarativetorch_p.h b/src/imports/multimedia/qdeclarativetorch_p.h index 70ee954f9..2180a5311 100644 --- a/src/imports/multimedia/qdeclarativetorch_p.h +++ b/src/imports/multimedia/qdeclarativetorch_p.h @@ -59,6 +59,8 @@ QT_BEGIN_NAMESPACE +class QDeclarativeCamera; + class QDeclarativeTorch : public QObject { Q_OBJECT @@ -68,7 +70,7 @@ class QDeclarativeTorch : public QObject // Errors? public: - explicit QDeclarativeTorch(QObject *parent = 0); + explicit QDeclarativeTorch(QCamera *parent = 0); ~QDeclarativeTorch(); bool enabled() const; @@ -85,8 +87,8 @@ private slots: void parameterChanged(int parameter); private: - QCamera *m_camera; - QCameraExposureControl *m_exposure; + QCamera *m_camera = nullptr; + QCameraExposureControl *m_exposure = nullptr; }; QT_END_NAMESPACE diff --git a/src/imports/multimedia/qmldir b/src/imports/multimedia/qmldir index e7dcc3dd6..d68049f63 100644 --- a/src/imports/multimedia/qmldir +++ b/src/imports/multimedia/qmldir @@ -4,4 +4,3 @@ classname QMultimediaDeclarativeModule typeinfo plugins.qmltypes typeinfo plugins.qmltypes Video 5.0 Video.qml - diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index 40f0b24fd..665668474 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -155,7 +155,7 @@ void QCameraPrivate::initControls() captureInterface = QMediaPlatformIntegration::instance()->createCaptureInterface(QMediaRecorder::AudioAndVideo); if (captureInterface) { - control = qobject_cast<QCameraControl *>(captureInterface->requestControl(QCameraControl_iid)); + control = captureInterface->cameraControl(); if (control) { q->connect(control, SIGNAL(stateChanged(QCamera::State)), q, SLOT(_q_updateState(QCamera::State))); @@ -177,11 +177,7 @@ void QCameraPrivate::clear() delete cameraExposure; delete cameraFocus; delete imageProcessing; - - if (captureInterface) { - if (control) - captureInterface->releaseControl(control); - } + delete control; cameraExposure = nullptr; cameraFocus = nullptr; diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp index 6b0d4cb9e..72f7fb622 100644 --- a/src/multimedia/camera/qcameraimagecapture.cpp +++ b/src/multimedia/camera/qcameraimagecapture.cpp @@ -140,7 +140,7 @@ QCameraImageCapture::QCameraImageCapture(QCamera *camera) QMediaPlatformCaptureInterface *service = camera->captureInterface(); if (service) { - d->control = qobject_cast<QCameraImageCaptureControl*>(service->requestControl(QCameraImageCaptureControl_iid)); + d->control = service->imageCaptureControl(); if (d->control) { connect(d->control, SIGNAL(imageExposed(int)), diff --git a/src/multimedia/controls/qaudiodecodercontrol.cpp b/src/multimedia/controls/qaudiodecodercontrol.cpp index 6255e2015..bd933dff6 100644 --- a/src/multimedia/controls/qaudiodecodercontrol.cpp +++ b/src/multimedia/controls/qaudiodecodercontrol.cpp @@ -54,24 +54,6 @@ QT_BEGIN_NAMESPACE functionality of a QMediaService. \preliminary - - The functionality provided by this control is exposed to application - code through the QAudioDecoder class. - - The interface name of QAudioDecoderControl is \c org.qt-project.qt.audiodecodercontrol/5.0 as - defined in QAudioDecoderControl_iid. - - \sa QMediaService::requestControl(), QAudioDecoder -*/ - -/*! - \macro QAudioDecoderControl_iid - - \c org.qt-project.qt.audiodecodercontrol/5.0 - - Defines the interface name of the QAudioDecoderControl class. - - \relates QAudioDecoderControl */ /*! diff --git a/src/multimedia/controls/qaudiodecodercontrol.h b/src/multimedia/controls/qaudiodecodercontrol.h index 1422ca333..945a67000 100644 --- a/src/multimedia/controls/qaudiodecodercontrol.h +++ b/src/multimedia/controls/qaudiodecodercontrol.h @@ -93,9 +93,6 @@ protected: explicit QAudioDecoderControl(QObject *parent = nullptr); }; -#define QAudioDecoderControl_iid "org.qt-project.qt.audiodecodercontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QAudioDecoderControl, QAudioDecoderControl_iid) - QT_END_NAMESPACE #endif // QAUDIODECODERCONTROL_H diff --git a/src/multimedia/controls/qcameracontrol.cpp b/src/multimedia/controls/qcameracontrol.cpp index efd0a920a..a55c198ad 100644 --- a/src/multimedia/controls/qcameracontrol.cpp +++ b/src/multimedia/controls/qcameracontrol.cpp @@ -53,26 +53,6 @@ QT_BEGIN_NAMESPACE \inmodule QtMultimedia \ingroup multimedia_control - - This service is provided by a QMediaService object via - QMediaService::control(). It is used by QCamera. - - The interface name of QCameraControl is \c org.qt-project.qt.cameracontrol/5.0 as - defined in QCameraControl_iid. - - - - \sa QMediaService::requestControl(), QCamera -*/ - -/*! - \macro QCameraControl_iid - - \c org.qt-project.qt.cameracontrol/5.0 - - Defines the interface name of the QCameraControl class. - - \relates QCameraControl */ /*! diff --git a/src/multimedia/controls/qcameracontrol.h b/src/multimedia/controls/qcameracontrol.h index f542eefbe..c61e452dc 100644 --- a/src/multimedia/controls/qcameracontrol.h +++ b/src/multimedia/controls/qcameracontrol.h @@ -90,9 +90,6 @@ protected: explicit QCameraControl(QObject *parent = nullptr); }; -#define QCameraControl_iid "org.qt-project.qt.cameracontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraControl, QCameraControl_iid) - QT_END_NAMESPACE diff --git a/src/multimedia/controls/qcameraexposurecontrol.cpp b/src/multimedia/controls/qcameraexposurecontrol.cpp index 8894604cf..fcfd4da22 100644 --- a/src/multimedia/controls/qcameraexposurecontrol.cpp +++ b/src/multimedia/controls/qcameraexposurecontrol.cpp @@ -59,23 +59,10 @@ QT_BEGIN_NAMESPACE You can adjust a number of parameters that will affect images and video taken with the corresponding QCamera object - see the \l {QCameraExposureControl::ExposureParameter}{ExposureParameter} enumeration. - The interface name of QCameraExposureControl is \c org.qt-project.qt.cameraexposurecontrol/5.0 as - defined in QCameraExposureControl_iid. - \sa QCameraExposure, QCamera */ /*! - \macro QCameraExposureControl_iid - - \c org.qt-project.qt.cameraexposurecontrol/5.0 - - Defines the interface name of the QCameraExposureControl class. - - \relates QCameraExposureControl -*/ - -/*! Constructs a camera exposure control object with \a parent. */ QCameraExposureControl::QCameraExposureControl(QObject *parent) diff --git a/src/multimedia/controls/qcameraexposurecontrol.h b/src/multimedia/controls/qcameraexposurecontrol.h index 862355bdb..59b448bd8 100644 --- a/src/multimedia/controls/qcameraexposurecontrol.h +++ b/src/multimedia/controls/qcameraexposurecontrol.h @@ -91,9 +91,6 @@ protected: explicit QCameraExposureControl(QObject *parent = nullptr); }; -#define QCameraExposureControl_iid "org.qt-project.qt.cameraexposurecontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraExposureControl, QCameraExposureControl_iid) - QT_END_NAMESPACE Q_DECLARE_METATYPE(QCameraExposureControl::ExposureParameter) diff --git a/src/multimedia/controls/qcamerafocuscontrol.cpp b/src/multimedia/controls/qcamerafocuscontrol.cpp index 91fbb7bd6..f110b3c89 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.cpp +++ b/src/multimedia/controls/qcamerafocuscontrol.cpp @@ -50,25 +50,9 @@ QT_BEGIN_NAMESPACE focusing related camera parameters. \inmodule QtMultimedia - - \ingroup multimedia_control - The interface name of QCameraFocusControl is \c org.qt-project.qt.camerafocuscontrol/5.0 as - defined in QCameraFocusControl_iid. - - - \sa QMediaService::requestControl(), QCamera -*/ - -/*! - \macro QCameraFocusControl_iid - - \c org.qt-project.qt.camerafocuscontrol/5.0 - - Defines the interface name of the QCameraFocusControl class. - - \relates QCameraFocusControl + \sa QCamera */ /*! diff --git a/src/multimedia/controls/qcamerafocuscontrol.h b/src/multimedia/controls/qcamerafocuscontrol.h index 1d066a1cb..536eb44a7 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.h +++ b/src/multimedia/controls/qcamerafocuscontrol.h @@ -89,9 +89,6 @@ protected: explicit QCameraFocusControl(QObject *parent = nullptr); }; -#define QCameraFocusControl_iid "org.qt-project.qt.camerafocuscontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraFocusControl, QCameraFocusControl_iid) - QT_END_NAMESPACE diff --git a/src/multimedia/controls/qcameraimagecapturecontrol.cpp b/src/multimedia/controls/qcameraimagecapturecontrol.cpp index 9ecd30fc3..a0d7770c4 100644 --- a/src/multimedia/controls/qcameraimagecapturecontrol.cpp +++ b/src/multimedia/controls/qcameraimagecapturecontrol.cpp @@ -50,25 +50,8 @@ QT_BEGIN_NAMESPACE for image capture services. \inmodule QtMultimedia - - \ingroup multimedia_control - The interface name of QCameraImageCaptureControl is \c org.qt-project.qt.cameraimagecapturecontrol/5.0 as - defined in QCameraImageCaptureControl_iid. - - - \sa QMediaService::requestControl() -*/ - -/*! - \macro QCameraImageCaptureControl_iid - - \c org.qt-project.qt.cameraimagecapturecontrol/5.0 - - Defines the interface name of the QCameraImageCaptureControl class. - - \relates QCameraImageCaptureControl */ /*! diff --git a/src/multimedia/controls/qcameraimagecapturecontrol.h b/src/multimedia/controls/qcameraimagecapturecontrol.h index cef317c38..e04be102f 100644 --- a/src/multimedia/controls/qcameraimagecapturecontrol.h +++ b/src/multimedia/controls/qcameraimagecapturecontrol.h @@ -46,12 +46,6 @@ QT_BEGIN_NAMESPACE class QImage; -QT_END_NAMESPACE - -QT_BEGIN_NAMESPACE - -// Required for QDoc workaround -class QString; class Q_MULTIMEDIA_EXPORT QCameraImageCaptureControl : public QObject { @@ -85,9 +79,6 @@ protected: explicit QCameraImageCaptureControl(QObject *parent = nullptr); }; -#define QCameraImageCaptureControl_iid "org.qt-project.qt.cameraimagecapturecontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraImageCaptureControl, QCameraImageCaptureControl_iid) - QT_END_NAMESPACE diff --git a/src/multimedia/controls/qcameraimageprocessingcontrol.cpp b/src/multimedia/controls/qcameraimageprocessingcontrol.cpp index ab840900e..0808d7b5c 100644 --- a/src/multimedia/controls/qcameraimageprocessingcontrol.cpp +++ b/src/multimedia/controls/qcameraimageprocessingcontrol.cpp @@ -61,9 +61,6 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterCameraImageProcessingControlMetaTypes) for controlling image processing parameters, like white balance, contrast, saturation, sharpening and denoising. - The interface name of QCameraImageProcessingControl is \c org.qt-project.qt.cameraimageprocessingcontrol/5.0 as - defined in QCameraImageProcessingControl_iid. - Camera service may choose the parameters of image processing pipeline depending on sensor properties camera settings and capture parameters. @@ -78,17 +75,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterCameraImageProcessingControlMetaTypes) slightly reduces the amount of sharpening applied, while settings the Sharpening parameter to 0 disables sharpening at all. - \sa QMediaService::requestControl(), QCamera -*/ - -/*! - \macro QCameraImageProcessingControl_iid - - \c org.qt-project.qt.cameraimageprocessingcontrol/5.0 - - Defines the interface name of the QCameraImageProcessingControl class. - - \relates QCameraImageProcessingControl + \sa QCamera */ /*! diff --git a/src/multimedia/controls/qcameraimageprocessingcontrol.h b/src/multimedia/controls/qcameraimageprocessingcontrol.h index ce8ed50ad..ad7acbd69 100644 --- a/src/multimedia/controls/qcameraimageprocessingcontrol.h +++ b/src/multimedia/controls/qcameraimageprocessingcontrol.h @@ -84,9 +84,6 @@ protected: explicit QCameraImageProcessingControl(QObject *parent = nullptr); }; -#define QCameraImageProcessingControl_iid "org.qt-project.qt.cameraimageprocessingcontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraImageProcessingControl, QCameraImageProcessingControl_iid) - QT_END_NAMESPACE Q_DECLARE_METATYPE(QCameraImageProcessingControl::ProcessingParameter) diff --git a/src/multimedia/controls/qmediaplayercontrol.cpp b/src/multimedia/controls/qmediaplayercontrol.cpp index 237bf64e1..eb188df6b 100644 --- a/src/multimedia/controls/qmediaplayercontrol.cpp +++ b/src/multimedia/controls/qmediaplayercontrol.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE The interface name of QMediaPlayerControl is \c org.qt-project.qt.mediaplayercontrol/5.0 as defined in QMediaPlayerControl_iid. - \sa QMediaService::requestControl(), QMediaPlayer + \sa QMediaPlayer */ /*! diff --git a/src/multimedia/controls/qmediarecordercontrol.cpp b/src/multimedia/controls/qmediarecordercontrol.cpp index fdee47e1c..5778053d5 100644 --- a/src/multimedia/controls/qmediarecordercontrol.cpp +++ b/src/multimedia/controls/qmediarecordercontrol.cpp @@ -62,21 +62,8 @@ QT_BEGIN_NAMESPACE and record, pause and stop recording via the \l setState() method. It also provides feedback on the \l {duration()}{duration} of the recording. - The interface name of QMediaRecorderControl is \c org.qt-project.qt.mediarecordercontrol/5.0 as - defined in QMediaRecorderControl_iid. + \sa QMediaRecorder - \sa QMediaService::requestControl(), QMediaRecorder - -*/ - -/*! - \macro QMediaRecorderControl_iid - - \c org.qt-project.qt.mediarecordercontrol/5.0 - - Defines the interface name of the QMediaRecorderControl class. - - \relates QMediaRecorderControl */ /*! diff --git a/src/multimedia/controls/qmediarecordercontrol.h b/src/multimedia/controls/qmediarecordercontrol.h index fd972ea84..dfa40f85d 100644 --- a/src/multimedia/controls/qmediarecordercontrol.h +++ b/src/multimedia/controls/qmediarecordercontrol.h @@ -99,9 +99,6 @@ protected: explicit QMediaRecorderControl(QObject *parent = nullptr); }; -#define QMediaRecorderControl_iid "org.qt-project.qt.mediarecordercontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QMediaRecorderControl, QMediaRecorderControl_iid) - QT_END_NAMESPACE diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp index 7e2ff8ac8..fad33fe09 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp @@ -75,22 +75,19 @@ QAndroidCaptureService::~QAndroidCaptureService() delete m_cameraSession; } -QObject *QAndroidCaptureService::requestControl(const char *name) +QCameraControl *QAndroidCaptureService::cameraControl() { - if (qstrcmp(name, QMediaRecorderControl_iid) == 0) - return m_recorderControl; - - if (qstrcmp(name, QCameraControl_iid) == 0) - return m_cameraControl; - - if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0) - return m_imageCaptureControl; + return m_cameraControl; +} - return 0; +QCameraImageCaptureControl *QAndroidCaptureService::imageCaptureControl() +{ + return m_imageCaptureControl; } -void QAndroidCaptureService::releaseControl(QObject *) +QMediaRecorderControl *QAndroidCaptureService::mediaRecorderControl() { + return m_recorderControl; } QT_END_NAMESPACE diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h index e10646a82..c5d6fb238 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h +++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h @@ -72,8 +72,9 @@ public: explicit QAndroidCaptureService(QMediaRecorder::CaptureMode mode); virtual ~QAndroidCaptureService(); - QObject *requestControl(const char *name); - void releaseControl(QObject *); + QCameraControl *cameraControl() override; + QCameraImageCaptureControl *imageCaptureControl() override; + QMediaRecorderControl *mediaRecorderControl() override; bool m_videoEnabled = false; diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm index 3e9f6b873..dc13b08be 100644 --- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm +++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm @@ -99,22 +99,19 @@ AVFCameraService::~AVFCameraService() delete m_session; } -QObject *AVFCameraService::requestControl(const char *name) +QCameraControl *AVFCameraService::cameraControl() { - if (qstrcmp(name, QCameraControl_iid) == 0) - return m_cameraControl; - - if (qstrcmp(name, QMediaRecorderControl_iid) == 0) - return m_recorderControl; - - if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0) - return m_imageCaptureControl; + return m_cameraControl; +} - return nullptr; +QCameraImageCaptureControl *AVFCameraService::imageCaptureControl() +{ + return m_imageCaptureControl; } -void AVFCameraService::releaseControl(QObject *) +QMediaRecorderControl *AVFCameraService::mediaRecorderControl() { + return m_recorderControl; } diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h index a84a5bed2..0cc31bc88 100644 --- a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h +++ b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h @@ -74,13 +74,14 @@ public: AVFCameraService(); ~AVFCameraService(); - QObject *requestControl(const char *name); - void releaseControl(QObject *control); + QCameraControl *cameraControl() override; + QCameraImageCaptureControl *imageCaptureControl() override; + QMediaRecorderControl *mediaRecorderControl() override; AVFCameraSession *session() const { return m_session; } - AVFCameraControl *cameraControl() const { return m_cameraControl; } + AVFCameraControl *avfCameraControl() const { return m_cameraControl; } QMediaRecorderControl *recorderControl() const { return m_recorderControl; } - AVFImageCaptureControl *imageCaptureControl() const { return m_imageCaptureControl; } + AVFImageCaptureControl *avfImageCaptureControl() const { return m_imageCaptureControl; } AVFCameraFocusControl *cameraFocusControl() const { return m_cameraFocusControl; } AVFCameraExposureControl *cameraExposureControl() const { return m_cameraExposureControl; } diff --git a/src/multimedia/platform/darwin/camera/avfcamerasession.mm b/src/multimedia/platform/darwin/camera/avfcamerasession.mm index f6772c5d1..fa062a414 100644 --- a/src/multimedia/platform/darwin/camera/avfcamerasession.mm +++ b/src/multimedia/platform/darwin/camera/avfcamerasession.mm @@ -352,7 +352,7 @@ void AVFCameraSession::attachVideoInputDevice() bool AVFCameraSession::applyImageEncoderSettings() { - if (AVFImageCaptureControl *control = m_service->imageCaptureControl()) + if (AVFImageCaptureControl *control = m_service->avfImageCaptureControl()) return control->applySettings(); return false; diff --git a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm index 27394a2f1..8b0bad60b 100644 --- a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm +++ b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm @@ -56,7 +56,7 @@ AVFImageCaptureControl::AVFImageCaptureControl(AVFCameraService *service, QObjec : QCameraImageCaptureControl(parent) , m_service(service) , m_session(service->session()) - , m_cameraControl(service->cameraControl()) + , m_cameraControl(service->avfCameraControl()) , m_ready(false) , m_lastCaptureId(0) , m_videoConnection(nil) @@ -326,7 +326,7 @@ bool AVFImageCaptureControl::applySettings() return false; if (!m_service->imageCaptureControl() - || !m_service->imageCaptureControl()->stillImageOutput()) { + || !m_service->avfImageCaptureControl()->stillImageOutput()) { qDebugCamera() << Q_FUNC_INFO << "no still image output"; return false; } diff --git a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm index 55938780d..b96e92edd 100644 --- a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm +++ b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm @@ -127,8 +127,7 @@ QT_USE_NAMESPACE AVFMediaRecorderControl::AVFMediaRecorderControl(AVFCameraService *service, QObject *parent) : QMediaRecorderControl(parent) - , m_service(service) - , m_cameraControl(service->cameraControl()) + , m_cameraControl(service->avfCameraControl()) , m_session(service->session()) , m_connected(false) , m_state(QMediaRecorder::StoppedState) diff --git a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h index 02a8581d2..90cdf402e 100644 --- a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h +++ b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h @@ -109,7 +109,6 @@ private Q_SLOTS: void updateStatus(); private: - AVFCameraService *m_service; AVFCameraControl *m_cameraControl; AVFCameraSession *m_session; AVCaptureDevice *m_audioCaptureDevice = nullptr; diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp index cf381a141..deddd59c1 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp @@ -57,16 +57,6 @@ QGstreamerCaptureService::QGstreamerCaptureService(QMediaRecorder::CaptureMode m } else { m_captureSession = new QGstreamerCaptureSession(QGstreamerCaptureSession::AudioAndVideo, this); m_cameraControl = new QGstreamerCameraControl(m_captureSession); - -// m_videoRenderer = new QGstreamerVideoRenderer(this); - -// m_videoWindow = new QGstreamerVideoWindow(this); -// // If the GStreamer video sink is not available, don't provide the video window control since -// // it won't work anyway. -// if (!m_videoWindow->videoSink()) { -// delete m_videoWindow; -// m_videoWindow = 0; -// } } } @@ -74,25 +64,19 @@ QGstreamerCaptureService::~QGstreamerCaptureService() { } -QObject *QGstreamerCaptureService::requestControl(const char *name) +QCameraControl *QGstreamerCaptureService::cameraControl() { - if (!m_captureSession) - return 0; - - if (qstrcmp(name,QMediaRecorderControl_iid) == 0) - return m_captureSession->recorderControl(); - - if (qstrcmp(name,QCameraControl_iid) == 0) - return m_cameraControl; - - if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0) - return m_captureSession->imageCaptureControl(); + return m_cameraControl; +} - return 0; +QCameraImageCaptureControl *QGstreamerCaptureService::imageCaptureControl() +{ + return m_captureSession->imageCaptureControl(); } -void QGstreamerCaptureService::releaseControl(QObject *) +QMediaRecorderControl *QGstreamerCaptureService::mediaRecorderControl() { + return m_captureSession->recorderControl(); } QT_END_NAMESPACE diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice_p.h index 238716681..955fab52c 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice_p.h +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice_p.h @@ -74,19 +74,13 @@ public: QGstreamerCaptureService(QMediaRecorder::CaptureMode mode); virtual ~QGstreamerCaptureService(); - QObject *requestControl(const char *name) override; - void releaseControl(QObject *) override; + QCameraControl *cameraControl() override; + QCameraImageCaptureControl *imageCaptureControl() override; + QMediaRecorderControl *mediaRecorderControl() override; private: - void setAudioPreview(GstElement *); - QGstreamerCaptureSession *m_captureSession = nullptr; QGstreamerCameraControl *m_cameraControl = nullptr; - - QObject *m_videoOutput = nullptr; - - QGstreamerVideoRenderer *m_videoRenderer = nullptr; - QGstreamerVideoWindow *m_videoWindow = nullptr; }; QT_END_NAMESPACE diff --git a/src/multimedia/platform/qmediaplatformcaptureinterface.cpp b/src/multimedia/platform/qmediaplatformcaptureinterface.cpp index e05d33cde..3feb8482e 100644 --- a/src/multimedia/platform/qmediaplatformcaptureinterface.cpp +++ b/src/multimedia/platform/qmediaplatformcaptureinterface.cpp @@ -42,12 +42,6 @@ QT_BEGIN_NAMESPACE -QMediaPlatformCaptureInterface::QMediaPlatformCaptureInterface() - : QMediaService(nullptr) -{ - -} - QMediaPlatformCaptureInterface::~QMediaPlatformCaptureInterface() { diff --git a/src/multimedia/platform/qmediaplatformcaptureinterface_p.h b/src/multimedia/platform/qmediaplatformcaptureinterface_p.h index 4cd73e255..570f83da1 100644 --- a/src/multimedia/platform/qmediaplatformcaptureinterface_p.h +++ b/src/multimedia/platform/qmediaplatformcaptureinterface_p.h @@ -54,12 +54,19 @@ #include <qmediaservice.h> QT_BEGIN_NAMESPACE +class QCameraControl; +class QCameraImageCaptureControl; +class QMediaRecorderControl; -class Q_MULTIMEDIA_EXPORT QMediaPlatformCaptureInterface : public QMediaService +class Q_MULTIMEDIA_EXPORT QMediaPlatformCaptureInterface : public QObject { public: - QMediaPlatformCaptureInterface(); + QMediaPlatformCaptureInterface() = default; virtual ~QMediaPlatformCaptureInterface(); + + virtual QCameraControl *cameraControl() = 0; + virtual QCameraImageCaptureControl *imageCaptureControl() = 0; + virtual QMediaRecorderControl *mediaRecorderControl() = 0; }; QT_END_NAMESPACE diff --git a/src/multimedia/platform/qnx/camera/bbcameraservice.cpp b/src/multimedia/platform/qnx/camera/bbcameraservice.cpp index 4343bb5ad..d8e752f66 100644 --- a/src/multimedia/platform/qnx/camera/bbcameraservice.cpp +++ b/src/multimedia/platform/qnx/camera/bbcameraservice.cpp @@ -73,35 +73,19 @@ BbCameraService::~BbCameraService() { } -QMediaControl* BbCameraService::requestControl(const char *name) +QCameraControl *BbCameraService::cameraControl() { - if (qstrcmp(name, QAudioEncoderSettingsControl_iid) == 0) - return m_cameraAudioEncoderSettingsControl; - else if (qstrcmp(name, QCameraControl_iid) == 0) - return m_cameraControl; - else if (qstrcmp(name, QCameraExposureControl_iid) == 0) - return m_cameraExposureControl; - else if (qstrcmp(name, QCameraFocusControl_iid) == 0) - return m_cameraFocusControl; - else if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0) - return m_cameraImageCaptureControl; - else if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) - return m_cameraImageProcessingControl; - else if (qstrcmp(name, QMediaRecorderControl_iid) == 0) - return m_cameraMediaRecorderControl; - else if (qstrcmp(name, QVideoEncoderSettingsControl_iid) == 0) - return m_cameraVideoEncoderSettingsControl; - else if (qstrcmp(name, QVideoRendererControl_iid) == 0) - return m_videoRendererControl; - - return 0; + return m_cameraControl; } -void BbCameraService::releaseControl(QMediaControl *control) +QCameraImageCaptureControl *BbCameraService::imageCaptureControl() { - Q_UNUSED(control); + return m_cameraImageCaptureControl; +} - // Implemented as a singleton, so we do nothing. +QMediaRecorderControl *BbCameraService::mediaRecorderControl() +{ + return m_cameraMediaRecorderControl; } QT_END_NAMESPACE diff --git a/src/multimedia/platform/qnx/camera/bbcameraservice_p.h b/src/multimedia/platform/qnx/camera/bbcameraservice_p.h index 0ecfb98c8..70d6c37a4 100644 --- a/src/multimedia/platform/qnx/camera/bbcameraservice_p.h +++ b/src/multimedia/platform/qnx/camera/bbcameraservice_p.h @@ -52,7 +52,7 @@ #include <QObject> -#include <qmediaservice.h> +#include <private/qmediaplatformcaptureinterface_p.h> QT_BEGIN_NAMESPACE @@ -67,7 +67,7 @@ class BbCameraSession; class BbCameraVideoEncoderSettingsControl; class BbVideoRendererControl; -class BbCameraService : public QMediaService +class BbCameraService : public QMediaPlatformCaptureInterface { Q_OBJECT diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp index 5190afa8d..031d9a765 100644 --- a/src/multimedia/recording/qmediarecorder.cpp +++ b/src/multimedia/recording/qmediarecorder.cpp @@ -167,7 +167,7 @@ QMediaRecorder::QMediaRecorder(QMediaRecorder::CaptureMode mode, QObject *parent setCamera(new QCamera(this)); } else { auto *captureIface = QMediaPlatformIntegration::instance()->createCaptureInterface(mode); - d->control = qobject_cast<QMediaRecorderControl*>(captureIface->requestControl(QMediaRecorderControl_iid)); + d->control = captureIface->mediaRecorderControl(); } } @@ -269,7 +269,7 @@ bool QMediaRecorder::setCamera(QCamera *object) d->notifyTimer->setInterval(notifyInterval()); connect(this, SIGNAL(notifyIntervalChanged(int)), SLOT(_q_updateNotifyInterval(int))); - d->control = qobject_cast<QMediaRecorderControl*>(service->requestControl(QMediaRecorderControl_iid)); + d->control = service->mediaRecorderControl(); Q_ASSERT(d->control); connect(d->control, SIGNAL(stateChanged(QMediaRecorder::State)), diff --git a/tests/auto/unit/mockbackend/CMakeLists.txt b/tests/auto/unit/mockbackend/CMakeLists.txt index 5b43b75a9..a8fd501d5 100644 --- a/tests/auto/unit/mockbackend/CMakeLists.txt +++ b/tests/auto/unit/mockbackend/CMakeLists.txt @@ -14,7 +14,6 @@ target_link_libraries(QtMultimediaMockBackend INTERFACE ) target_sources(QtMultimediaMockBackend INTERFACE mockaudiodecodercontrol.h - mockaudiodecoderservice.h mockcameracontrol.h mockcameraexposurecontrol.h mockcamerafocuscontrol.h diff --git a/tests/auto/unit/mockbackend/audio.pri b/tests/auto/unit/mockbackend/audio.pri index b5349d5eb..49105a062 100644 --- a/tests/auto/unit/mockbackend/audio.pri +++ b/tests/auto/unit/mockbackend/audio.pri @@ -1,4 +1,3 @@ INCLUDEPATH += $$PWD HEADERS *= \ - $$PWD/mockaudiodecoderservice.h \ $$PWD/mockaudiodecodercontrol.h diff --git a/tests/auto/unit/mockbackend/mockaudiodecoderservice.h b/tests/auto/unit/mockbackend/mockaudiodecoderservice.h deleted file mode 100644 index 85da10d3a..000000000 --- a/tests/auto/unit/mockbackend/mockaudiodecoderservice.h +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MOCKAUDIODECODERSERVICE_H -#define MOCKAUDIODECODERSERVICE_H - -#include "qmediaservice.h" - -#include "mockaudiodecodercontrol.h" - -class MockAudioDecoderService : public QMediaService -{ - Q_OBJECT - -public: - MockAudioDecoderService(QObject *parent = 0) - : QMediaService(parent) - { - mockControl = new MockAudioDecoderControl(this); - validControl = mockControl; - } - - ~MockAudioDecoderService() - { - delete mockControl; - } - - QObject *requestControl(const char *iid) - { - if (qstrcmp(iid, QAudioDecoderControl_iid) == 0) - return mockControl; - return 0; - } - - void releaseControl(QObject *control) - { - Q_UNUSED(control); - } - - void setControlNull() - { - mockControl = 0; - } - - void setControlValid() - { - mockControl = validControl; - } - - MockAudioDecoderControl *mockControl; - MockAudioDecoderControl *validControl; -}; - - - -#endif // MOCKAUDIODECODERSERVICE_H diff --git a/tests/auto/unit/mockbackend/mockmediarecorderservice.h b/tests/auto/unit/mockbackend/mockmediarecorderservice.h index 3ffa4a9c1..540cc1b14 100644 --- a/tests/auto/unit/mockbackend/mockmediarecorderservice.h +++ b/tests/auto/unit/mockbackend/mockmediarecorderservice.h @@ -53,36 +53,14 @@ public: mockCaptureControl = new MockCaptureControl(mockCameraControl, this); mockImageProcessingControl = new MockImageProcessingControl(this); } - - QObject *requestControl(const char *name) + ~MockMediaRecorderService() { - if (!hasControls) - return nullptr; - - if (qstrcmp(name,QMediaRecorderControl_iid) == 0) - return mockControl; - - if (qstrcmp(name, QCameraControl_iid) == 0) - return mockCameraControl; - - if (simpleCamera) - return nullptr; - - if (qstrcmp(name, QCameraExposureControl_iid) == 0) - return mockExposureControl; - if (qstrcmp(name, QCameraFocusControl_iid) == 0) - return mockFocusControl; - if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0) - return mockCaptureControl; - if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) - return mockImageProcessingControl; - - return nullptr; } - void releaseControl(QObject *) - { - } + QCameraControl *cameraControl() override { return hasControls ? mockCameraControl : nullptr; } + QCameraImageCaptureControl *imageCaptureControl() override { return hasControls ? mockCaptureControl : nullptr; } + QMediaRecorderControl *mediaRecorderControl() override { return hasControls ? mockControl : nullptr; } + static bool simpleCamera; diff --git a/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp b/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp index 9601d129a..daac608e5 100644 --- a/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp +++ b/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp @@ -31,7 +31,7 @@ #include <QtTest/QtTest> #include "qaudiodecoder.h" -#include "mockaudiodecoderservice.h" +#include "mockaudiodecodercontrol.h" #include "qmockintegration_p.h" class tst_QAudioDecoder : public QObject |