diff options
| author | Linus Jahn <lnj@kaidan.im> | 2021-03-27 16:49:16 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-03-28 00:09:13 +0100 |
| commit | 00c5040bc3917de5e97efa98f47ac2157f441c7e (patch) | |
| tree | a5e1c5350f3e8fb4306cda5aa778c78e99c46c51 /src/client | |
| parent | 52b509a9703a67819193de8482552ed9894f834d (diff) | |
| download | qxmpp-00c5040bc3917de5e97efa98f47ac2157f441c7e.tar.gz | |
QXmppCall: Refactoring and clean up
Fixes things like:
- detaching Qt containers (missing std::as_const)
- new signal/slot syntax
- missing emit keyword
- more 'auto'
- comparison of int and uint
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/QXmppCall.cpp | 41 | ||||
| -rw-r--r-- | src/client/QXmppCallManager.cpp | 30 | ||||
| -rw-r--r-- | src/client/QXmppCallStream.cpp | 3 | ||||
| -rw-r--r-- | src/client/QXmppCall_p.h | 4 |
4 files changed, 37 insertions, 41 deletions
diff --git a/src/client/QXmppCall.cpp b/src/client/QXmppCall.cpp index a3dec654..06e36087 100644 --- a/src/client/QXmppCall.cpp +++ b/src/client/QXmppCall.cpp @@ -94,9 +94,7 @@ QXmppCallPrivate::~QXmppCallPrivate() if (gst_element_set_state(pipeline, GST_STATE_NULL) == GST_STATE_CHANGE_FAILURE) { qFatal("Unable to set the pipeline to the null state"); } - for (auto stream : streams) { - delete stream; - } + qDeleteAll(streams); gst_object_unref(pipeline); } @@ -195,7 +193,7 @@ void QXmppCallPrivate::filterGStreamerFormats(QList<GstCodec> &formats) QXmppCallStream *QXmppCallPrivate::findStreamByMedia(const QString &media) { - for (auto stream : streams) { + for (auto stream : std::as_const(streams)) { if (stream->media() == media) { return stream; } @@ -205,7 +203,7 @@ QXmppCallStream *QXmppCallPrivate::findStreamByMedia(const QString &media) QXmppCallStream *QXmppCallPrivate::findStreamByName(const QString &name) { - for (auto stream : streams) { + for (auto stream : std::as_const(streams)) { if (stream->name() == name) { return stream; } @@ -215,7 +213,7 @@ QXmppCallStream *QXmppCallPrivate::findStreamByName(const QString &name) QXmppCallStream *QXmppCallPrivate::findStreamById(const int id) { - for (auto stream : streams) { + for (auto stream : std::as_const(streams)) { if (stream->id() == id) { return stream; } @@ -296,7 +294,8 @@ bool QXmppCallPrivate::handleTransport(QXmppCallStream *stream, const QXmppJingl { stream->d->connection->setRemoteUser(content.transportUser()); stream->d->connection->setRemotePassword(content.transportPassword()); - for (const QXmppJingleCandidate &candidate : content.transportCandidates()) { + const auto candidates = content.transportCandidates(); + for (const auto &candidate : candidates) { stream->d->connection->addRemoteCandidate(candidate); } @@ -309,7 +308,7 @@ bool QXmppCallPrivate::handleTransport(QXmppCallStream *stream, const QXmppJingl void QXmppCallPrivate::handleRequest(const QXmppJingleIq &iq) { - const QXmppJingleIq::Content content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().first(); + const auto content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().constFirst(); if (iq.action() == QXmppJingleIq::SessionAccept) { @@ -422,8 +421,6 @@ void QXmppCallPrivate::handleRequest(const QXmppJingleIq &iq) QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QString &creator, const QString &name) { - bool check; - Q_UNUSED(check); Q_ASSERT(manager); if (media != AUDIO_MEDIA && media != VIDEO_MEDIA) { @@ -436,7 +433,7 @@ QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QStr return nullptr; } - QXmppCallStream *stream = new QXmppCallStream(pipeline, rtpbin, media, creator, name, ++nextId); + auto *stream = new QXmppCallStream(pipeline, rtpbin, media, creator, name, ++nextId); // Fill local payload payload types auto &codecs = media == AUDIO_MEDIA ? audioCodecs : videoCodecs; @@ -458,15 +455,13 @@ QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QStr stream->d->connection->bind(QXmppIceComponent::discoverAddresses()); // connect signals - check = QObject::connect(stream->d->connection, SIGNAL(localCandidatesChanged()), - q, SLOT(localCandidatesChanged())); - Q_ASSERT(check); + QObject::connect(stream->d->connection, &QXmppIceConnection::localCandidatesChanged, + q, &QXmppCall::localCandidatesChanged); - check = QObject::connect(stream->d->connection, SIGNAL(disconnected()), - q, SLOT(hangup())); - Q_ASSERT(check); + QObject::connect(stream->d->connection, &QXmppIceConnection::disconnected, + q, &QXmppCall::hangup); - Q_EMIT q->streamCreated(stream); + emit q->streamCreated(stream); return stream; } @@ -561,7 +556,7 @@ void QXmppCallPrivate::terminate(QXmppJingleIq::Reason::Type reasonType) setState(QXmppCall::DisconnectingState); // schedule forceful termination in 5s - QTimer::singleShot(5000, q, SLOT(terminated())); + QTimer::singleShot(5000, q, &QXmppCall::terminated); } /// \endcond @@ -608,7 +603,7 @@ void QXmppCall::accept() d->sendRequest(iq); // notify user - d->manager->callStarted(this); + emit d->manager->callStarted(this); // check for call establishment d->setState(QXmppCall::ActiveState); @@ -648,7 +643,7 @@ QXmppCallStream *QXmppCall::videoStream() const void QXmppCall::terminated() { // close streams - for (auto stream : d->streams) { + for (auto stream : std::as_const(d->streams)) { stream->d->connection->close(); } @@ -679,8 +674,8 @@ void QXmppCall::localCandidatesChanged() { // find the stream QXmppIceConnection *conn = qobject_cast<QXmppIceConnection *>(sender()); - QXmppCallStream *stream = 0; - for (auto ptr : d->streams) { + QXmppCallStream *stream = nullptr; + for (auto ptr : std::as_const(d->streams)) { if (ptr->d->connection == conn) { stream = ptr; break; diff --git a/src/client/QXmppCallManager.cpp b/src/client/QXmppCallManager.cpp index 756b4209..bd008ced 100644 --- a/src/client/QXmppCallManager.cpp +++ b/src/client/QXmppCallManager.cpp @@ -83,12 +83,13 @@ QXmppCallManager::~QXmppCallManager() /// \cond QStringList QXmppCallManager::discoveryFeatures() const { - return QStringList() - << ns_jingle // XEP-0166 : Jingle - << ns_jingle_rtp // XEP-0167 : Jingle RTP Sessions - << ns_jingle_rtp_audio - << ns_jingle_rtp_video - << ns_jingle_ice_udp; // XEP-0176 : Jingle ICE-UDP Transport Method + return { + ns_jingle, // XEP-0166 : Jingle + ns_jingle_rtp, // XEP-0167 : Jingle RTP Sessions + ns_jingle_rtp_audio, + ns_jingle_rtp_video, + ns_jingle_ice_udp, // XEP-0176 : Jingle ICE-UDP Transport Method + }; } bool QXmppCallManager::handleStanza(const QDomElement &element) @@ -108,7 +109,6 @@ bool QXmppCallManager::handleStanza(const QDomElement &element) void QXmppCallManager::setClient(QXmppClient *client) { - QXmppClientExtension::setClient(client); connect(client, &QXmppClient::disconnected, @@ -129,7 +129,6 @@ void QXmppCallManager::setClient(QXmppClient *client) /// QXmppCall *QXmppCallManager::call(const QString &jid) { - if (jid.isEmpty()) { warning("Refusing to call an empty jid"); return nullptr; @@ -183,7 +182,7 @@ void QXmppCallManager::setStunServers(const QList<QPair<QHostAddress, quint16>> void QXmppCallManager::setStunServer(const QHostAddress &host, quint16 port) { d->stunServers.clear(); - d->stunServers.push_back(QPair<QHostAddress, quint16>(host, port)); + d->stunServers.push_back(QPair(host, port)); } /// @@ -231,8 +230,9 @@ void QXmppCallManager::_q_callDestroyed(QObject *object) /// void QXmppCallManager::_q_disconnected() { - for (auto *call : d->calls) + for (auto *call : std::as_const(d->calls)) { call->d->terminate(QXmppJingleIq::Reason::Gone); + } } /// @@ -244,8 +244,9 @@ void QXmppCallManager::_q_iqReceived(const QXmppIq &ack) return; // find request - for (auto *call : d->calls) + for (auto *call : std::as_const(d->calls)) { call->d->handleAck(ack); + } } /// @@ -262,8 +263,9 @@ void QXmppCallManager::_q_jingleIqReceived(const QXmppJingleIq &iq) QXmppCall *call = new QXmppCall(iq.from(), QXmppCall::IncomingDirection, this); call->d->sid = iq.sid(); - const QXmppJingleIq::Content content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().first(); - QXmppCallStream *stream = call->d->createStream(content.descriptionMedia(), content.creator(), content.name()); + const auto content = iq.contents().isEmpty() ? QXmppJingleIq::Content() + : iq.contents().constFirst(); + auto *stream = call->d->createStream(content.descriptionMedia(), content.creator(), content.name()); if (!stream) return; call->d->streams << stream; @@ -320,7 +322,7 @@ void QXmppCallManager::_q_presenceReceived(const QXmppPresence &presence) if (presence.type() != QXmppPresence::Unavailable) return; - for (auto *call : d->calls) { + for (auto *call : std::as_const(d->calls)) { if (presence.from() == call->jid()) { // the remote party has gone away, terminate call call->d->terminate(QXmppJingleIq::Reason::Gone); diff --git a/src/client/QXmppCallStream.cpp b/src/client/QXmppCallStream.cpp index f96188d5..b222286e 100644 --- a/src/client/QXmppCallStream.cpp +++ b/src/client/QXmppCallStream.cpp @@ -32,7 +32,6 @@ #endif #include <cstring> - #include <gst/gst.h> /// \cond @@ -223,7 +222,7 @@ void QXmppCallStreamPrivate::addEncoder(QXmppCallPrivate::GstCodec &codec) qFatal("Failed to create encoder"); return; } - for (auto &encProp : codec.encProps) { + for (auto &encProp : std::as_const(codec.encProps)) { g_object_set(encoder, encProp.name.toLatin1().data(), encProp.value, nullptr); } diff --git a/src/client/QXmppCall_p.h b/src/client/QXmppCall_p.h index b3bb2bd4..49e9f38b 100644 --- a/src/client/QXmppCall_p.h +++ b/src/client/QXmppCall_p.h @@ -52,7 +52,7 @@ public: int pt; QString name; int channels; - int clockrate; + uint clockrate; QString gstPay; QString gstDepay; QString gstEnc; @@ -107,7 +107,7 @@ public: // Supported codecs QList<GstCodec> videoCodecs = { - { .pt = 100, .name = "H264", .channels = 1, .clockrate = 90000, .gstPay = "rtph264pay", .gstDepay = "rtph264depay", .gstEnc = "x264enc", .gstDec = "avdec_h264", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, {"byte-stream", true}, { "bitrate", 512 } } }, + { .pt = 100, .name = "H264", .channels = 1, .clockrate = 90000, .gstPay = "rtph264pay", .gstDepay = "rtph264depay", .gstEnc = "x264enc", .gstDec = "avdec_h264", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, { "byte-stream", true }, { "bitrate", 512 } } }, { .pt = 99, .name = "VP8", .channels = 1, .clockrate = 90000, .gstPay = "rtpvp8pay", .gstDepay = "rtpvp8depay", .gstEnc = "vp8enc", .gstDec = "vp8dec", .encProps = { { "deadline", 20000 }, { "target-bitrate", 512000 } } }, // vp9enc and x265enc seem to be very slow. Give them a lower priority for now. { .pt = 102, .name = "H265", .channels = 1, .clockrate = 90000, .gstPay = "rtph265pay", .gstDepay = "rtph265depay", .gstEnc = "x265enc", .gstDec = "avdec_h265", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, { "bitrate", 512 } } }, |
