mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
fix for segfault when feedback timeout causes reset
This commit is contained in:
@@ -1142,6 +1142,7 @@ void video_renderer_seek(float position) {
|
|||||||
|
|
||||||
unsigned int video_renderer_listen(void *loop, int id) {
|
unsigned int video_renderer_listen(void *loop, int id) {
|
||||||
g_assert(id >= 0 && id < n_renderers);
|
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)
|
return (unsigned int) gst_bus_add_watch(renderer_type[id]->bus,(GstBusFunc)
|
||||||
gstreamer_video_pipeline_bus_callback, (gpointer) loop);
|
gstreamer_video_pipeline_bus_callback, (gpointer) loop);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ static bool new_window_closing_behavior = false;
|
|||||||
static bool new_window_closing_behavior = true;
|
static bool new_window_closing_behavior = true;
|
||||||
#endif
|
#endif
|
||||||
static bool close_window;
|
static bool close_window;
|
||||||
|
static bool full_video_reset = true;
|
||||||
static std::string video_parser = "h264parse";
|
static std::string video_parser = "h264parse";
|
||||||
static std::string video_decoder = "decodebin";
|
static std::string video_decoder = "decodebin";
|
||||||
static std::string video_converter = "videoconvert";
|
static std::string video_converter = "videoconvert";
|
||||||
@@ -541,8 +542,9 @@ static gboolean feedback_callback(gpointer loop) {
|
|||||||
if (!nofreeze) {
|
if (!nofreeze) {
|
||||||
close_window = false; /* leave "frozen" window open if reset_video is false */
|
close_window = false; /* leave "frozen" window open if reset_video is false */
|
||||||
}
|
}
|
||||||
reset_httpd = true;
|
reset_httpd = true;
|
||||||
relaunch_video = true;
|
relaunch_video = true;
|
||||||
|
full_video_reset = true;
|
||||||
g_main_loop_quit((GMainLoop *) loop);
|
g_main_loop_quit((GMainLoop *) loop);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else if (missed_feedback > 2) {
|
} else if (missed_feedback > 2) {
|
||||||
@@ -3249,7 +3251,7 @@ int main (int argc, char *argv[]) {
|
|||||||
if (use_audio) {
|
if (use_audio) {
|
||||||
audio_renderer_stop();
|
audio_renderer_stop();
|
||||||
}
|
}
|
||||||
if (use_video && (close_window || preserve_connections)) {
|
if (use_video && (close_window || preserve_connections || full_video_reset)) {
|
||||||
video_renderer_destroy();
|
video_renderer_destroy();
|
||||||
if (!preserve_connections) {
|
if (!preserve_connections) {
|
||||||
url.erase();
|
url.erase();
|
||||||
@@ -3260,6 +3262,7 @@ int main (int argc, char *argv[]) {
|
|||||||
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
||||||
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
||||||
render_coverart, playbin_version, uri);
|
render_coverart, playbin_version, uri);
|
||||||
|
full_video_reset = false;
|
||||||
video_renderer_start();
|
video_renderer_start();
|
||||||
}
|
}
|
||||||
if (reset_httpd) {
|
if (reset_httpd) {
|
||||||
|
|||||||
Reference in New Issue
Block a user