From e1145defa9b27839607c26cf9962b938d7eef8f0 Mon Sep 17 00:00:00 2001 From: "robert.mader@collabora.com" Date: Tue, 30 May 2023 20:23:14 +0200 Subject: [PATCH] screencastService: Fix 'pipeline' option When introducing the pipeline fallback mechanism, support for defining a custom pipeline was unintentionally dropped, breaking extensions such as EasyScreenCast. Fixes 9cb40c4814b6be908edde4fb77a8d900a4cac51a Part-of: --- .../screencast/screencastService.js | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js index 6ab92b53e..eda5c8293 100644 --- a/js/dbusServices/screencast/screencastService.js +++ b/js/dbusServices/screencast/screencastService.js @@ -87,6 +87,7 @@ var Recorder = class extends Signals.EventEmitter { throw e; } + this._pipelineString = null; this._framerate = DEFAULT_FRAMERATE; this._drawCursor = DEFAULT_DRAW_CURSOR; @@ -234,6 +235,23 @@ var Recorder = class extends Signals.EventEmitter { } } + *_getPipelineConfigs() { + if (this._pipelineString) { + yield { + pipelineString: + `capsfilter caps=video/x-raw,max-framerate=%F/1 ! ${this._pipelineString}`, + }; + return; + } + + const fallbackSupported = + Gst.Registry.get().check_feature_version('pipewiresrc', 0, 3, 67); + if (fallbackSupported) + yield* PIPELINES; + else + yield PIPELINES.at(-1); + } + startRecording() { return new Promise((resolve, reject) => { this._startRequest = {resolve, reject}; @@ -256,10 +274,7 @@ var Recorder = class extends Signals.EventEmitter { this._nodeId = nodeId; this._pipelineState = PipelineState.STARTING; - const fallbackSupported = - Gst.Registry.get().check_feature_version('pipewiresrc', 0, 3, 67); - this._pipelineConfigs = fallbackSupported - ? PIPELINES.values() : [PIPELINES.at(-1)].values(); + this._pipelineConfigs = this._getPipelineConfigs(); this._tryNextPipeline(); }); this._sessionProxy.StartSync();