From cc3f773a8935ec16d7ae0ec83bd816d605a0be3e Mon Sep 17 00:00:00 2001 From: Derek Dai Date: Sun, 23 Apr 2017 22:18:16 +0800 Subject: [PATCH] gstencoder: exit if pipeline encounter error, EOS or enter NULL state Change-Id: Id9934d144bf023b301d92b24cc1cafcf2bac3b8e --- res/gstencoder.vala | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/res/gstencoder.vala b/res/gstencoder.vala index 4d64e98..c950c4a 100644 --- a/res/gstencoder.vala +++ b/res/gstencoder.vala @@ -293,6 +293,8 @@ internal class GstEncoder : DispdEncoder, GLib.Object } pipeline.set_state(Gst.State.NULL); + state = DispdEncoderState.NULL; + defered_terminate(); } public async void prepare() throws Error @@ -312,6 +314,14 @@ internal class GstEncoder : DispdEncoder, GLib.Object Posix.fsync(3); } + private void defered_terminate() + { + Timeout.add(100, () => { + loop.quit(); + return false; + }); + } + private void check_configs() throws DispdEncoderError { if(null == configs || null == pipeline) { @@ -331,10 +341,12 @@ internal class GstEncoder : DispdEncoder, GLib.Object switch(m.type) { case Gst.MessageType.EOS: error("unexpected EOS"); + defered_terminate(); break; case Gst.MessageType.ERROR: m.parse_error(out e, out d); error("unexpected error: %s\n%s".printf(e.message, d)); + defered_terminate(); break; case Gst.MessageType.STATE_CHANGED: Gst.State oldstate; @@ -354,13 +366,6 @@ internal class GstEncoder : DispdEncoder, GLib.Object state = DispdEncoderState.PAUSED; } break; - case Gst.State.NULL: - state = DispdEncoderState.NULL; - Timeout.add(100, () => { - loop.quit(); - return false; - }); - break; } break; default: