From cd769c05d39eb07ed3cf74b38b371b6cda8d8dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Thu, 29 Oct 2020 17:51:17 +0100 Subject: [PATCH] gst - correctly destroy unused pipelines. --- internal/gst/gst.c | 5 +++++ internal/gst/gst.go | 5 +++++ internal/gst/gst.h | 1 + internal/remote/manager.go | 6 +++--- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/gst/gst.c b/internal/gst/gst.c index 924787fb..a4f5b78b 100644 --- a/internal/gst/gst.c +++ b/internal/gst/gst.c @@ -68,6 +68,11 @@ GstElement *gstreamer_send_create_pipeline(char *pipeline) { return gst_parse_launch(pipeline, &error); } +void gstreamer_send_destroy_pipeline(GstElement *pipeline) { + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); +} + void gstreamer_send_start_pipeline(GstElement *pipeline, int pipelineId) { SampleHandlerUserData *s = calloc(1, sizeof(SampleHandlerUserData)); s->pipelineId = pipelineId; diff --git a/internal/gst/gst.go b/internal/gst/gst.go index 57f230e4..a147d472 100644 --- a/internal/gst/gst.go +++ b/internal/gst/gst.go @@ -231,6 +231,11 @@ func CreatePipeline(pipelineStr string, codecName string, clockRate float32) (*P return p, nil } +// Destroy GStreamer Pipeline +func (p *Pipeline) DestroyPipeline() { + C.gstreamer_send_destroy_pipeline(p.Pipeline) +} + // Start starts the GStreamer Pipeline func (p *Pipeline) Start() { C.gstreamer_send_start_pipeline(p.Pipeline, C.int(p.id)) diff --git a/internal/gst/gst.h b/internal/gst/gst.h index 7c6965f4..19b3b5b7 100644 --- a/internal/gst/gst.h +++ b/internal/gst/gst.h @@ -9,6 +9,7 @@ extern void goHandlePipelineBuffer(void *buffer, int bufferLen, int samples, int pipelineId); GstElement *gstreamer_send_create_pipeline(char *pipeline); +void gstreamer_send_destroy_pipeline(GstElement *pipeline); void gstreamer_send_start_pipeline(GstElement *pipeline, int pipelineId); void gstreamer_send_play_pipeline(GstElement *pipeline); diff --git a/internal/remote/manager.go b/internal/remote/manager.go index 2d8119e3..5b5792de 100644 --- a/internal/remote/manager.go +++ b/internal/remote/manager.go @@ -84,8 +84,8 @@ func (manager *RemoteManager) Start() { func (manager *RemoteManager) Shutdown() error { manager.logger.Info().Msgf("remote shutting down") - manager.video.Stop() - manager.audio.Stop() + manager.video.DestroyPipeline() + manager.audio.DestroyPipeline() manager.broadcast.Stop() manager.cleanup.Stop() @@ -170,7 +170,7 @@ func (manager *RemoteManager) ChangeResolution(width int, height int, rate int) return fmt.Errorf("unknown configuration") } - manager.video.Stop() + manager.video.DestroyPipeline() manager.broadcast.Stop() defer func() {