From a3fb6b2314e1f69b6e733fd5ddbafa61e2480083 Mon Sep 17 00:00:00 2001 From: fduncanh Date: Sun, 9 Oct 2022 16:52:40 -0400 Subject: [PATCH] more graceful exit if required GStreamer plugins are missing --- renderers/audio_renderer.h | 2 +- renderers/audio_renderer_gstreamer.c | 9 +++++---- uxplay.cpp | 5 ++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/renderers/audio_renderer.h b/renderers/audio_renderer.h index 094cb32..71e4321 100644 --- a/renderers/audio_renderer.h +++ b/renderers/audio_renderer.h @@ -29,7 +29,7 @@ extern "C" { #include #include "../lib/raop_ntp.h" -void gstreamer_init(); +bool gstreamer_init(); void audio_renderer_init(logger_t *logger, const char* audiosink); void audio_renderer_start(unsigned char* compression_type); void audio_renderer_stop(); diff --git a/renderers/audio_renderer_gstreamer.c b/renderers/audio_renderer_gstreamer.c index 57393a6..af5dc8f 100644 --- a/renderers/audio_renderer_gstreamer.c +++ b/renderers/audio_renderer_gstreamer.c @@ -51,14 +51,15 @@ static gboolean check_plugins (void) gboolean ret; GstRegistry *registry; const gchar *needed[] = { "app", "libav", "playback", "autodetect", "videoparsersbad", NULL}; - + const gchar *gst[] = {"plugins-base", "libav", "plugins-base", "plugins-good", "plugins-bad", NULL}; registry = gst_registry_get (); ret = TRUE; for (i = 0; i < g_strv_length ((gchar **) needed); i++) { GstPlugin *plugin; plugin = gst_registry_find_plugin (registry, needed[i]); if (!plugin) { - g_print ("Required gstreamer plugin '%s' not found\n", needed[i]); + g_print ("Required gstreamer plugin '%s' not found\n" + "Missing plugin is contained in '[GStreamer 1.x]-%s'\n",needed[i], gst[i]); ret = FALSE; continue; } @@ -68,9 +69,9 @@ static gboolean check_plugins (void) return ret; } -void gstreamer_init(){ +bool gstreamer_init(){ gst_init(NULL,NULL); - g_assert(check_plugins ()); + return (bool) check_plugins (); } #define NFORMATS 2 /* set to 4 to enable AAC_LD and PCM: allowed, but never seen in real-world use */ diff --git a/uxplay.cpp b/uxplay.cpp index 6d0fabf..3d5d8cb 100644 --- a/uxplay.cpp +++ b/uxplay.cpp @@ -846,7 +846,10 @@ int main (int argc, char *argv[]) { logger_set_callback(render_logger, log_callback, NULL); logger_set_level(render_logger, debug_log ? LOGGER_DEBUG : LOGGER_INFO); - gstreamer_init(); + if (!gstreamer_init()) { + printf ("stopping\n"); + exit (1); + } if (use_audio) { audio_renderer_init(render_logger, audiosink.c_str());