diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-05-10 16:26:05 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-17 10:32:11 +0000 |
commit | 00b1c899b77f39f54f4d2a8d610a2c1b7a1d8a50 (patch) | |
tree | b86157b87595d1d2aeecb6bcbbd21fb63a4ea894 /src/multimedia/platform | |
parent | 989f00a15d3bb8ee0e5e25a0d07c921539e8bfcd (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')
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) |