From 8793ae866692dcc26faa4271e1dd3588a97d14aa Mon Sep 17 00:00:00 2001
From: Arjen Hiemstra <ahiemstra@heimr.nl>
Date: Tue, 8 Oct 2024 14:20:55 +0200
Subject: [PATCH] encodedstream: Don't query VAAPI in the constructor

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.
---
 src/pipewirebaseencodedstream.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/pipewirebaseencodedstream.cpp b/src/pipewirebaseencodedstream.cpp
index 27ef198..de51a90 100644
--- a/src/pipewirebaseencodedstream.cpp
+++ b/src/pipewirebaseencodedstream.cpp
@@ -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();
-- 
GitLab

