From 42af7e53a2aaa995840bb8cd9baf233feaac7c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Sat, 29 Jan 2022 00:40:24 +0100 Subject: [PATCH] screencastService: Handle more gstreamer errors Gstreamer can produce various errors, we shouldn't pretend those don't exist and go on as usual when one happens. Instead, when an error happens, tear down the pipeline, set our PipelineState to the new ERROR state and bail out with a proper error message. Part-of: --- .../screencast/screencastService.js | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js index 7267673a5..497b7d206 100644 --- a/js/dbusServices/screencast/screencastService.js +++ b/js/dbusServices/screencast/screencastService.js @@ -231,12 +231,26 @@ var Recorder = class { _onBusMessage(bus, message, _) { switch (message.type) { case Gst.MessageType.EOS: - this._teardownPipeline(); - switch (this._pipelineState) { + case PipelineState.STOPPED: + case PipelineState.ERROR: + // In these cases there should be no pipeline, so should never happen + break; + + case PipelineState.PLAYING: + this._addRecentItem(); + this._handleFatalPipelineError('Unexpected EOS message'); + break; + + case PipelineState.INIT: + this._handleFatalPipelineError( + 'Unexpected EOS message while in state INIT'); + break; + case PipelineState.FLUSHING: this._addRecentItem(); + this._teardownPipeline(); this._unwatchSender(); this._stopSession(); @@ -248,6 +262,28 @@ var Recorder = class { } break; + + case Gst.MessageType.ERROR: + switch (this._pipelineState) { + case PipelineState.STOPPED: + case PipelineState.ERROR: + // In these cases there should be no pipeline, so should never happen + break; + + case PipelineState.INIT: + case PipelineState.PLAYING: + case PipelineState.FLUSHING: + // Everything else we can't handle, so error out + this._handleFatalPipelineError( + `GStreamer error while in state ${this._pipelineState}: ${message.parse_error()[0].message}`); + break; + + default: + break; + } + + break; + default: break; }