summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qmediadevices.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/qmediadevices.cpp')
-rw-r--r--src/multimedia/qmediadevices.cpp288
1 files changed, 288 insertions, 0 deletions
diff --git a/src/multimedia/qmediadevices.cpp b/src/multimedia/qmediadevices.cpp
new file mode 100644
index 000000000..1d77f4de8
--- /dev/null
+++ b/src/multimedia/qmediadevices.cpp
@@ -0,0 +1,288 @@
+// Copyright (C) 2016 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 "qmediadevices.h"
+#include "private/qplatformmediaintegration_p.h"
+#include "private/qplatformmediadevices_p.h"
+
+#include <qaudiodevice.h>
+#include <qcameradevice.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QMediaDevices
+ \brief The QMediaDevices class provides information about available
+ multimedia input and output devices.
+ \ingroup multimedia
+ \inmodule QtMultimedia
+
+ The QMediaDevices class provides information about the available multimedia
+ devices and the system defaults. It monitors the following three groups:
+ \list
+ \li Audio input devices (Microphones)
+ \li Audio output devices (Speakers, Headsets)
+ \li Video input devices (Cameras)
+ \endlist
+
+ QMediaDevices provides a separate list for each device group. If it detects that a
+ new device has been connected to the system or an attached device has been disconnected
+ from the system, it will update the corresponding device list and emit a signal
+ notifying about the change.
+
+ The QMediaDevices::audioInputs and QMediaDevices::audioOutputs functions can be used
+ to enumerate all microphones and speakers/headsets on the system. This example first
+ gets a list of all connected microphones, and then prints their identifier, description,
+ and if it is the default device or not.
+
+ \snippet multimedia-snippets/devices.cpp Media Audio Input Device Enumeration
+
+ Similarly, the QMediaDevices::videoInputs will return a list of all connected cameras.
+ In this example we list all connected cameras and their identifier, description, and
+ if it is the default camera or not.
+
+ \snippet multimedia-snippets/devices.cpp Media Video Input Device Enumeration
+
+ QMediaDevices monitors the system defaults for each device group. It will notify about
+ any changes done through the system settings. For example, if the user selects a new
+ default audio output in the system settings, QMediaDevices will update the default audio
+ output accordingly and emit a signal. If the system does not provide a default for a
+ camera or an audio input, QMediaDevices will select the first device from the list as
+ the default device.
+
+ While using the default input and output devices is often sufficient for
+ playing back or recording multimedia, there is often a need to explicitly
+ select the device to be used.
+
+ QMediaDevices is a singleton object and all getters are thread-safe.
+*/
+
+/*!
+ \qmltype MediaDevices
+ \since 6.2
+ \instantiates QMediaDevices
+ \brief MediaDevices provides information about available
+ multimedia input and output devices.
+ \inqmlmodule QtMultimedia
+ \ingroup multimedia_qml
+
+ The MediaDevices type provides information about the available multimedia
+ devices and the system defaults. It monitors the following three groups:
+ \list
+ \li Audio input devices (Microphones)
+ \li Audio output devices (Speakers, Headsets)
+ \li Video input devices (Cameras)
+ \endlist
+
+ MediaDevices provides a separate list for each device group. If it detects that a
+ new device has been connected to the system or an attached device has been disconnected
+ from the system, it will update the corresponding device list and emit a signal
+ notifying about the change.
+
+ MediaDevices monitors the system defaults for each device group. It will notify about
+ any changes done through the system settings. For example, if the user selects a new
+ default audio output in the system settings, MediaDevices will update the default audio
+ output accordingly and emit a signal. If the system does not provide a default for a
+ camera or an audio input, MediaDevices will select the first device from the list as
+ the default device.
+
+ While using the default input and output devices is often sufficient for
+ playing back or recording multimedia, there is often a need to explicitly
+ select the device to be used.
+
+ For example, the snippet below will ensure that the media player always uses
+ the systems default audio output device for playback:
+
+ \qml
+ MediaDevices {
+ id: devices
+ }
+ MediaPlayer {
+ ...
+ audioOutput: AudioOutput {
+ device: devices.defaultAudioOutput
+ }
+ }
+ \endqml
+
+ \sa Camera, AudioInput, VideoOutput
+*/
+
+/*!
+ \qmlproperty list<audioDevice> QtMultimedia::MediaDevices::audioInputs
+ Contains a list of available audio input devices on the system.
+
+ Those devices are usually microphones. Devices can be either built-in, or
+ connected through for example USB or Bluetooth.
+*/
+
+/*!
+ \property QMediaDevices::audioInputs
+
+ Returns a list of available audio input devices on the system.
+
+ Those devices are usually microphones. Devices can be either built-in, or
+ connected through for example USB or Bluetooth.
+*/
+QList<QAudioDevice> QMediaDevices::audioInputs()
+{
+ return QPlatformMediaIntegration::instance()->mediaDevices()->audioInputs();
+}
+
+/*!
+ \qmlproperty list<audioDevice> QtMultimedia::MediaDevices::audioOutputs
+ Contains a list of available audio output devices on the system.
+
+ Those devices are usually loudspeakers or head sets. Devices can be either
+ built-in, or connected through for example USB or Bluetooth.
+*/
+
+/*!
+ \property QMediaDevices::audioOutputs
+
+ Returns a list of available audio output devices on the system.
+
+ Those devices are usually loudspeakers or head sets. Devices can be either
+ built-in, or connected through for example USB or Bluetooth.
+*/
+QList<QAudioDevice> QMediaDevices::audioOutputs()
+{
+ return QPlatformMediaIntegration::instance()->mediaDevices()->audioOutputs();
+}
+
+/*!
+ \qmlproperty list<cameraDevice> QtMultimedia::MediaDevices::videoInputs
+ Contains a list of cameras on the system.
+*/
+
+/*!
+ \property QMediaDevices::videoInputs
+
+ Returns a list of available cameras on the system.
+*/
+QList<QCameraDevice> QMediaDevices::videoInputs()
+{
+ QPlatformMediaIntegration::instance()->mediaDevices()->initVideoDevicesConnection();
+ return QPlatformMediaIntegration::instance()->videoInputs();
+}
+
+/*!
+ \qmlproperty audioDevice QtMultimedia::MediaDevices::defaultAudioInput
+ Returns the default audio input device.
+
+ The default device can change during the runtime of the application. The value
+ of this property will automatically adjust itself to such changes.
+*/
+
+/*!
+ \property QMediaDevices::defaultAudioInput
+
+ Returns the default audio input device.
+
+ The default device can change during the runtime of the application.
+ The audioInputsChanged() signal is emitted in this case.
+*/
+QAudioDevice QMediaDevices::defaultAudioInput()
+{
+ const auto inputs = audioInputs();
+ if (inputs.isEmpty())
+ return {};
+ for (const auto &info : inputs)
+ if (info.isDefault())
+ return info;
+ return inputs.value(0);
+}
+
+/*!
+ \qmlproperty audioDevice QtMultimedia::MediaDevices::defaultAudioOutput
+ Returns the default audio output device.
+
+ The default device can change during the runtime of the application. The value
+ of this property will automatically adjust itself to such changes.
+*/
+
+/*!
+ \property QMediaDevices::defaultAudioOutput
+
+ Returns the default audio output device.
+
+ The default device can change during the runtime of the application. The
+ audioOutputsChanged() signal is emitted in this case.
+*/
+QAudioDevice QMediaDevices::defaultAudioOutput()
+{
+ const auto outputs = audioOutputs();
+ if (outputs.isEmpty())
+ return {};
+ for (const auto &info : outputs)
+ if (info.isDefault())
+ return info;
+ return outputs.value(0);
+}
+
+/*!
+ \qmlproperty cameraDevice QtMultimedia::MediaDevices::defaultVideoInput
+ Returns the default camera on the system.
+
+ \note The returned object should be checked using isNull() before being used,
+ in case there is no camera available.
+
+ The default device can change during the runtime of the application. The value
+ of this property will automatically adjust itself to such changes.
+*/
+
+/*!
+ \property QMediaDevices::defaultVideoInput
+
+ Returns the default camera on the system.
+
+ \note The returned object should be checked using isNull() before being used,
+ in case there is no default camera or no cameras at all.
+
+ The default device can change during the runtime of the application. The
+ videoInputsChanged() signal is emitted in that case.
+
+ \sa videoInputs()
+*/
+QCameraDevice QMediaDevices::defaultVideoInput()
+{
+ const auto inputs = videoInputs();
+ if (inputs.isEmpty())
+ return {};
+ for (const auto &info : inputs)
+ if (info.isDefault())
+ return info;
+ return inputs.value(0);
+}
+
+/*!
+ \internal
+*/
+QMediaDevices::QMediaDevices(QObject *parent)
+ : QObject(parent)
+{
+ auto platformDevices = QPlatformMediaIntegration::instance()->mediaDevices();
+ connect(platformDevices, &QPlatformMediaDevices::videoInputsChanged, this,
+ &QMediaDevices::videoInputsChanged);
+ connect(platformDevices, &QPlatformMediaDevices::audioInputsChanged, this,
+ &QMediaDevices::audioInputsChanged);
+ connect(platformDevices, &QPlatformMediaDevices::audioOutputsChanged, this,
+ &QMediaDevices::audioOutputsChanged);
+}
+
+/*!
+ \internal
+*/
+QMediaDevices::~QMediaDevices() = default;
+
+void QMediaDevices::connectNotify(const QMetaMethod &signal)
+{
+ if (signal == QMetaMethod::fromSignal(&QMediaDevices::videoInputsChanged))
+ QPlatformMediaIntegration::instance()->mediaDevices()->initVideoDevicesConnection();
+
+ QObject::connectNotify(signal);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qmediadevices.cpp"