summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/darwin/qdarwinintegration.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/multimedia/darwin/qdarwinintegration.mm')
-rw-r--r--src/plugins/multimedia/darwin/qdarwinintegration.mm93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/plugins/multimedia/darwin/qdarwinintegration.mm b/src/plugins/multimedia/darwin/qdarwinintegration.mm
new file mode 100644
index 000000000..0e880447e
--- /dev/null
+++ b/src/plugins/multimedia/darwin/qdarwinintegration.mm
@@ -0,0 +1,93 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qdarwinintegration_p.h"
+#include <avfmediaplayer_p.h>
+#include <avfcameraservice_p.h>
+#include <avfcamera_p.h>
+#include <avfimagecapture_p.h>
+#include <avfmediaencoder_p.h>
+#include <qdarwinformatsinfo_p.h>
+#include <avfvideosink_p.h>
+#include <avfaudiodecoder_p.h>
+#include <VideoToolbox/VideoToolbox.h>
+#include <qdebug.h>
+#include <private/qplatformmediaplugin_p.h>
+#include <qavfcamerabase_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDarwinMediaPlugin : public QPlatformMediaPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QPlatformMediaPlugin_iid FILE "darwin.json")
+
+public:
+ QDarwinMediaPlugin()
+ : QPlatformMediaPlugin()
+ {}
+
+ QPlatformMediaIntegration* create(const QString &name) override
+ {
+ if (name == u"darwin")
+ return new QDarwinIntegration;
+ return nullptr;
+ }
+};
+
+QDarwinIntegration::QDarwinIntegration() : QPlatformMediaIntegration(QLatin1String("darwin"))
+{
+#if defined(Q_OS_MACOS) && QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_11_0)
+ if (__builtin_available(macOS 11.0, *))
+ VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9);
+#endif
+}
+
+QPlatformMediaFormatInfo *QDarwinIntegration::createFormatInfo()
+{
+ return new QDarwinFormatInfo();
+}
+
+QPlatformVideoDevices *QDarwinIntegration::createVideoDevices()
+{
+ return new QAVFVideoDevices(this);
+}
+
+QMaybe<QPlatformAudioDecoder *> QDarwinIntegration::createAudioDecoder(QAudioDecoder *decoder)
+{
+ return new AVFAudioDecoder(decoder);
+}
+
+QMaybe<QPlatformMediaCaptureSession *> QDarwinIntegration::createCaptureSession()
+{
+ return new AVFCameraService;
+}
+
+QMaybe<QPlatformMediaPlayer *> QDarwinIntegration::createPlayer(QMediaPlayer *player)
+{
+ return new AVFMediaPlayer(player);
+}
+
+QMaybe<QPlatformCamera *> QDarwinIntegration::createCamera(QCamera *camera)
+{
+ return new AVFCamera(camera);
+}
+
+QMaybe<QPlatformMediaRecorder *> QDarwinIntegration::createRecorder(QMediaRecorder *recorder)
+{
+ return new AVFMediaEncoder(recorder);
+}
+
+QMaybe<QPlatformImageCapture *> QDarwinIntegration::createImageCapture(QImageCapture *imageCapture)
+{
+ return new AVFImageCapture(imageCapture);
+}
+
+QMaybe<QPlatformVideoSink *> QDarwinIntegration::createVideoSink(QVideoSink *sink)
+{
+ return new AVFVideoSink(sink);
+}
+
+QT_END_NAMESPACE
+
+#include "qdarwinintegration.moc"