diff --git a/renderers/video_renderer.c b/renderers/video_renderer.c index 3fc2713..cb2e790 100644 --- a/renderers/video_renderer.c +++ b/renderers/video_renderer.c @@ -1142,6 +1142,7 @@ void video_renderer_seek(float position) { unsigned int video_renderer_listen(void *loop, int id) { g_assert(id >= 0 && id < n_renderers); + g_assert (renderer_type[id] && renderer_type[id]->bus); return (unsigned int) gst_bus_add_watch(renderer_type[id]->bus,(GstBusFunc) gstreamer_video_pipeline_bus_callback, (gpointer) loop); } diff --git a/uxplay.cpp b/uxplay.cpp index e62a9c6..858e3f8 100644 --- a/uxplay.cpp +++ b/uxplay.cpp @@ -118,6 +118,7 @@ static bool new_window_closing_behavior = false; static bool new_window_closing_behavior = true; #endif static bool close_window; +static bool full_video_reset = true; static std::string video_parser = "h264parse"; static std::string video_decoder = "decodebin"; static std::string video_converter = "videoconvert"; @@ -541,8 +542,9 @@ static gboolean feedback_callback(gpointer loop) { if (!nofreeze) { close_window = false; /* leave "frozen" window open if reset_video is false */ } - reset_httpd = true; - relaunch_video = true; + reset_httpd = true; + relaunch_video = true; + full_video_reset = true; g_main_loop_quit((GMainLoop *) loop); return TRUE; } else if (missed_feedback > 2) { @@ -3249,7 +3251,7 @@ int main (int argc, char *argv[]) { if (use_audio) { audio_renderer_stop(); } - if (use_video && (close_window || preserve_connections)) { + if (use_video && (close_window || preserve_connections || full_video_reset)) { video_renderer_destroy(); if (!preserve_connections) { url.erase(); @@ -3260,6 +3262,7 @@ int main (int argc, char *argv[]) { video_decoder.c_str(), video_converter.c_str(), videosink.c_str(), videosink_options.c_str(), fullscreen, video_sync, h265_support, render_coverart, playbin_version, uri); + full_video_reset = false; video_renderer_start(); } if (reset_httpd) {