summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-05-10 16:26:05 +0200
committerLars Knoll <lars.knoll@qt.io>2021-05-17 10:32:11 +0000
commit00b1c899b77f39f54f4d2a8d610a2c1b7a1d8a50 (patch)
treeb86157b87595d1d2aeecb6bcbbd21fb63a4ea894 /src/multimedia/platform
parent989f00a15d3bb8ee0e5e25a0d07c921539e8bfcd (diff)
Code cleanup in the gstreamer plugin
Pass the GstDevice around instead of a string based id that is then used again to get back to the device. Change-Id: I10d4053ae8d1d5df51bc6e82217b3b071a22bb87 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia/platform')
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer.cpp63
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer_p.h2
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer.cpp11
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer_p.h3
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer.cpp8
-rw-r--r--src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer_p.h2
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamermediadevices.cpp6
7 files changed, 48 insertions, 47 deletions
diff --git a/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer.cpp b/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer.cpp
index 5e4c45cdc..67de0a97d 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer.cpp
+++ b/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer.cpp
@@ -45,43 +45,42 @@
QT_BEGIN_NAMESPACE
-QGStreamerAudioDeviceInfo::QGStreamerAudioDeviceInfo(const QByteArray &device, QAudio::Mode mode)
- : QAudioDeviceInfoPrivate(device, mode)
+QGStreamerAudioDeviceInfo::QGStreamerAudioDeviceInfo(GstDevice *d, const QByteArray &device, QAudio::Mode mode)
+ : QAudioDeviceInfoPrivate(device, mode),
+ gstDevice(d)
{
- auto *devices = static_cast<QGstreamerMediaDevices *>(QPlatformMediaIntegration::instance()->devices());
- gstDevice = devices->audioDevice(device, mode);
- if (gstDevice) {
- gst_object_ref(gstDevice);
- auto *n = gst_device_get_display_name(gstDevice);
- description = QString::fromUtf8(n);
- g_free(n);
+ Q_ASSERT(gstDevice);
+ gst_object_ref(gstDevice);
- QGstCaps caps = gst_device_get_caps(gstDevice);
- int size = caps.size();
- for (int i = 0; i < size; ++i) {
- auto c = caps.at(i);
- if (c.name() == "audio/x-raw") {
- auto rate = c["rate"].toIntRange();
- if (rate) {
- minimumSampleRate = rate->min;
- minimumSampleRate = rate->max;
- }
- auto channels = c["channels"].toIntRange();
- if (channels) {
- minimumChannelCount = channels->min;
- maximumChannelCount = channels->max;
- }
- supportedSampleFormats = c["format"].getSampleFormats();
+ auto *n = gst_device_get_display_name(gstDevice);
+ description = QString::fromUtf8(n);
+ g_free(n);
+
+ QGstCaps caps = gst_device_get_caps(gstDevice);
+ int size = caps.size();
+ for (int i = 0; i < size; ++i) {
+ auto c = caps.at(i);
+ if (c.name() == "audio/x-raw") {
+ auto rate = c["rate"].toIntRange();
+ if (rate) {
+ minimumSampleRate = rate->min;
+ minimumSampleRate = rate->max;
+ }
+ auto channels = c["channels"].toIntRange();
+ if (channels) {
+ minimumChannelCount = channels->min;
+ maximumChannelCount = channels->max;
}
+ supportedSampleFormats = c["format"].getSampleFormats();
}
-
- preferredFormat.setChannelCount(qBound(minimumChannelCount, 2, maximumChannelCount));
- preferredFormat.setSampleRate(qBound(minimumSampleRate, 48000, maximumSampleRate));
- QAudioFormat::SampleFormat f = QAudioFormat::Int16;
- if (!supportedSampleFormats.contains(f))
- f = supportedSampleFormats.value(0, QAudioFormat::Unknown);
- preferredFormat.setSampleFormat(f);
}
+
+ preferredFormat.setChannelCount(qBound(minimumChannelCount, 2, maximumChannelCount));
+ preferredFormat.setSampleRate(qBound(minimumSampleRate, 48000, maximumSampleRate));
+ QAudioFormat::SampleFormat f = QAudioFormat::Int16;
+ if (!supportedSampleFormats.contains(f))
+ f = supportedSampleFormats.value(0, QAudioFormat::Unknown);
+ preferredFormat.setSampleFormat(f);
}
QGStreamerAudioDeviceInfo::~QGStreamerAudioDeviceInfo()
diff --git a/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer_p.h b/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer_p.h
index 72df0c43d..1869e729f 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer_p.h
+++ b/src/multimedia/platform/gstreamer/audio/qaudiodeviceinfo_gstreamer_p.h
@@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE
class QGStreamerAudioDeviceInfo : public QAudioDeviceInfoPrivate
{
public:
- QGStreamerAudioDeviceInfo(const QByteArray &device, QAudio::Mode mode);
+ QGStreamerAudioDeviceInfo(GstDevice *gstDevice, const QByteArray &device, QAudio::Mode mode);
~QGStreamerAudioDeviceInfo();
GstDevice *gstDevice = nullptr;
diff --git a/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer.cpp b/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer.cpp
index 46f2f8ae9..57f701e47 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer.cpp
+++ b/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer.cpp
@@ -51,8 +51,9 @@
QT_BEGIN_NAMESPACE
-QGStreamerAudioInput::QGStreamerAudioInput(const QByteArray &device)
- : m_device(device)
+QGStreamerAudioInput::QGStreamerAudioInput(const QAudioDeviceInfo &device)
+ : m_info(device),
+ m_device(device.id())
{
}
@@ -151,14 +152,14 @@ bool QGStreamerAudioInput::open()
if (m_opened)
return true;
- QGStreamerAudioDeviceInfo deviceInfo(m_device, QAudio::AudioInput);
- if (!deviceInfo.gstDevice) {
+ const auto *deviceInfo = static_cast<const QGStreamerAudioDeviceInfo *>(m_info.handle());
+ if (!deviceInfo->gstDevice) {
setError(QAudio::OpenError);
setState(QAudio::StoppedState);
return false;
}
- gstInput = QGstElement(gst_device_create_element(deviceInfo.gstDevice, nullptr));
+ gstInput = QGstElement(gst_device_create_element(deviceInfo->gstDevice, nullptr));
if (gstInput.isNull()) {
setError(QAudio::OpenError);
setState(QAudio::StoppedState);
diff --git a/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer_p.h b/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer_p.h
index 09c1ceda5..7134c697a 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer_p.h
+++ b/src/multimedia/platform/gstreamer/audio/qaudioinput_gstreamer_p.h
@@ -77,7 +77,7 @@ class QGStreamerAudioInput
Q_OBJECT
friend class GStreamerInputPrivate;
public:
- QGStreamerAudioInput(const QByteArray &device);
+ QGStreamerAudioInput(const QAudioDeviceInfo &device);
~QGStreamerAudioInput();
void start(QIODevice *device) override;
@@ -111,6 +111,7 @@ private:
static gboolean busMessage(GstBus *bus, GstMessage *msg, gpointer user_data);
+ QAudioDeviceInfo m_info;
qint64 m_bytesWritten = 0;
QIODevice *m_audioSink = nullptr;
QAudioFormat m_format;
diff --git a/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer.cpp b/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer.cpp
index 08ba2298c..eb74c2ee6 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer.cpp
+++ b/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer.cpp
@@ -55,14 +55,14 @@
QT_BEGIN_NAMESPACE
-QGStreamerAudioOutput::QGStreamerAudioOutput(const QByteArray &device)
- : m_device(device),
+QGStreamerAudioOutput::QGStreamerAudioOutput(const QAudioDeviceInfo &device)
+ : m_device(device.id()),
gstPipeline("pipeline")
{
gstPipeline.installMessageFilter(this);
- QGStreamerAudioDeviceInfo audioInfo(device, QAudio::AudioOutput);
- gstOutput = gst_device_create_element(audioInfo.gstDevice, nullptr);
+ const auto *audioInfo = static_cast<const QGStreamerAudioDeviceInfo *>(device.handle());
+ gstOutput = gst_device_create_element(audioInfo->gstDevice, nullptr);
}
QGStreamerAudioOutput::~QGStreamerAudioOutput()
diff --git a/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer_p.h b/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer_p.h
index 197983693..c1c7bae8d 100644
--- a/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer_p.h
+++ b/src/multimedia/platform/gstreamer/audio/qaudiooutput_gstreamer_p.h
@@ -78,7 +78,7 @@ class QGStreamerAudioOutput
Q_OBJECT
public:
- QGStreamerAudioOutput(const QByteArray &device);
+ QGStreamerAudioOutput(const QAudioDeviceInfo &device);
~QGStreamerAudioOutput();
void start(QIODevice *device) override;
diff --git a/src/multimedia/platform/gstreamer/qgstreamermediadevices.cpp b/src/multimedia/platform/gstreamer/qgstreamermediadevices.cpp
index 9067eea6b..3e77eb4b0 100644
--- a/src/multimedia/platform/gstreamer/qgstreamermediadevices.cpp
+++ b/src/multimedia/platform/gstreamer/qgstreamermediadevices.cpp
@@ -109,7 +109,7 @@ static QList<QAudioDeviceInfo> devicesFromSet(const QSet<GstDevice *> &deviceSet
if (qstrcmp(klass, "monitor")) {
auto *name = gst_structure_get_string(properties, "sysfs.path");
gboolean def;
- auto *info = new QGStreamerAudioDeviceInfo(name, mode);
+ auto *info = new QGStreamerAudioDeviceInfo(d, name, mode);
if (gst_structure_get_boolean(properties, "is-default", &def) && def)
devices.prepend(info->create());
else
@@ -189,12 +189,12 @@ QList<QCameraInfo> QGstreamerMediaDevices::videoInputs() const
QAbstractAudioInput *QGstreamerMediaDevices::createAudioInputDevice(const QAudioDeviceInfo &deviceInfo)
{
- return new QGStreamerAudioInput(deviceInfo.id());
+ return new QGStreamerAudioInput(deviceInfo);
}
QAbstractAudioOutput *QGstreamerMediaDevices::createAudioOutputDevice(const QAudioDeviceInfo &deviceInfo)
{
- return new QGStreamerAudioOutput(deviceInfo.id());
+ return new QGStreamerAudioOutput(deviceInfo);
}
void QGstreamerMediaDevices::addDevice(GstDevice *device)