screencastService: Fixup pipeline fallback behavior

Calling _teardownPipeline() before _tryNextPipeline() was actually not a
good idea, it sets the pipelineState to STOPPED, which means we can't try
any of the following pipelines anymore.

Instead what we want to do is set the pipeline state of the old pipeline to
NULL when trying a new one, without calling _teardownPipeline() for that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2754>
This commit is contained in:
Jonas Dreßler 2023-04-26 19:13:27 +02:00 committed by Marge Bot
parent 6476e62bff
commit 846bb84ff6

View File

@ -197,11 +197,17 @@ var Recorder = class extends Signals.EventEmitter {
_tryNextPipeline() { _tryNextPipeline() {
const {done, value: pipelineConfig} = this._pipelineConfigs.next(); const {done, value: pipelineConfig} = this._pipelineConfigs.next();
if (done) { if (done) {
this._teardownPipeline();
this._handleFatalPipelineError('All pipelines failed to start'); this._handleFatalPipelineError('All pipelines failed to start');
return; return;
} }
if (this._pipeline) {
if (this._pipeline.set_state(Gst.State.NULL) !== Gst.StateChangeReturn.SUCCESS)
log('Failed to set pipeline state to NULL');
this._pipeline = null;
}
try { try {
this._pipeline = this._createPipeline(this._nodeId, pipelineConfig, this._pipeline = this._createPipeline(this._nodeId, pipelineConfig,
this._framerate); this._framerate);
@ -224,7 +230,6 @@ var Recorder = class extends Signals.EventEmitter {
retval === Gst.StateChangeReturn.ASYNC) { retval === Gst.StateChangeReturn.ASYNC) {
// We'll wait for the state change message to PLAYING on the bus // We'll wait for the state change message to PLAYING on the bus
} else { } else {
this._teardownPipeline();
this._tryNextPipeline(); this._tryNextPipeline();
} }
} }