[PATCH] encodedstream: Don't query VAAPI in the constructor
authorArjen Hiemstra <ahiemstra@heimr.nl>
Tue, 8 Oct 2024 12:20:55 +0000 (14:20 +0200)
committerAurélien COUDERC <coucouf@debian.org>
Tue, 15 Jul 2025 14:45:40 +0000 (16:45 +0200)
Querying VAAPI is expensive, so we should only do that when necessary.
So rather than querying what encoder to use on construction, query it on
start and only if we don't already have an encoder set. This also avoids
duplicate lookups if the user already set the encoder.

Gbp-Pq: Name upstream_8793ae86_encodedstream-Don-t-query-VAAPI-in-the-constructor.patch

src/pipewirebaseencodedstream.cpp

index 27ef1989a004bb42b1bb4021c3bb37d81735621e..de51a9038caee3e7e10d088e0be847e4a0795bd4 100644 (file)
@@ -28,7 +28,7 @@ struct PipeWireEncodedStreamPrivate {
     Fraction m_maxFramerate;
     int m_maxPendingFrames = 50;
     bool m_active = false;
-    PipeWireBaseEncodedStream::Encoder m_encoder;
+    PipeWireBaseEncodedStream::Encoder m_encoder = PipeWireBaseEncodedStream::NoEncoder;
     std::optional<quint8> m_quality;
     PipeWireBaseEncodedStream::EncodingPreference m_encodingPreference;
     PipeWireBaseEncodedStream::State m_state = PipeWireBaseEncodedStream::Idle;
@@ -46,8 +46,6 @@ PipeWireBaseEncodedStream::PipeWireBaseEncodedStream(QObject *parent)
     : QObject(parent)
     , d(new PipeWireEncodedStreamPrivate)
 {
-    d->m_encoder = suggestedEncoders().value(0, NoEncoder);
-
     const auto &category = PIPEWIRELIBAV_LOGGING();
     if (category.isDebugEnabled()) {
         av_log_set_level(AV_LOG_DEBUG);
@@ -158,6 +156,10 @@ void PipeWireBaseEncodedStream::start()
         return;
     }
 
+    if (d->m_encoder == PipeWireBaseEncodedStream::NoEncoder) {
+        d->m_encoder = suggestedEncoders().value(0, NoEncoder);
+    }
+
     d->m_produceThread = std::make_unique<QThread>();
     d->m_produceThread->setObjectName("PipeWireProduce::input");
     d->m_produce = makeProduce();