cleanup in video_renderer.c

This commit is contained in:
F. Duncanh
2025-08-07 16:14:18 -04:00
parent 56bdfbbda8
commit 3e1d83d7d6
2 changed files with 18 additions and 11 deletions

View File

@@ -472,7 +472,7 @@ void video_renderer_start() {
gst_element_set_state (renderer_type[i]->pipeline, GST_STATE_PAUSED);
gst_element_get_state(renderer_type[i]->pipeline, &state, NULL, 1000 * GST_MSECOND);
state_name= gst_element_state_get_name(state);
logger_log(logger, LOGGER_DEBUG, "video renderer_start: renderer %d state %s", i, state_name);
logger_log(logger, LOGGER_DEBUG, "video renderer_start: renderer %d %p state %s", i, renderer_type[i], state_name);
}
renderer = NULL;
first_packet = true;
@@ -537,6 +537,10 @@ uint64_t video_renderer_render_buffer(unsigned char* data, int *data_len, int *n
logger_log(logger, LOGGER_INFO, "Begin streaming to GStreamer video pipeline");
first_packet = false;
}
if (!renderer || !(renderer->appsrc)) {
logger_log(logger, LOGGER_DEBUG, "*** no video renderer found");
return 0;
}
buffer = gst_buffer_new_allocate(NULL, *data_len, NULL);
g_assert(buffer != NULL);
//g_print("video latency %8.6f\n", (double) latency / SECOND_IN_NSECS);
@@ -582,21 +586,23 @@ static void video_renderer_destroy_instance(video_renderer_t *renderer) {
GstState state;
GstStateChangeReturn ret;
gst_element_get_state(renderer->pipeline, &state, NULL, 100 * GST_MSECOND);
logger_log(logger, LOGGER_DEBUG,"pipeline state is %s", gst_element_state_get_name(state));
logger_log(logger, LOGGER_DEBUG,"pipeline state is %s", gst_element_state_get_name(state));
if (state != GST_STATE_NULL) {
if (!hls_video) {
gst_app_src_end_of_stream (GST_APP_SRC(renderer->appsrc));
}
ret = gst_element_set_state (renderer->pipeline, GST_STATE_NULL);
logger_log(logger, LOGGER_DEBUG,"pipeline_state_change_return: %s",
gst_element_state_change_return_get_name(ret));
gst_element_get_state(renderer->pipeline, NULL, NULL, 1000 * GST_MSECOND);
logger_log(logger, LOGGER_DEBUG,"pipeline_state_change_return: %s",
gst_element_state_change_return_get_name(ret));
gst_element_get_state(renderer->pipeline, &state, NULL, 1000 * GST_MSECOND);
logger_log(logger, LOGGER_DEBUG,"pipeline state is %s", gst_element_state_get_name(state));
}
if (renderer->appsrc) {
gst_object_unref (renderer->appsrc);
renderer->appsrc = NULL;
}
gst_object_unref(renderer->bus);
if (renderer->appsrc) {
gst_object_unref (renderer->appsrc);
}
gst_object_unref (renderer->pipeline);
gst_object_unref(renderer->pipeline);
#ifdef X_DISPLAY_FIX
if (renderer->gst_window) {
free(renderer->gst_window);
@@ -605,6 +611,7 @@ static void video_renderer_destroy_instance(video_renderer_t *renderer) {
#endif
free (renderer);
renderer = NULL;
logger_log(logger, LOGGER_DEBUG,"renderer destroyed\n");
}
}
@@ -908,7 +915,7 @@ int video_renderer_choose_codec (bool video_is_jpeg, bool video_is_h265) {
logger_log(logger, LOGGER_INFO, "*** video format is h265 high definition (HD/4K) video %dx%d", width, height);
}
/* destroy unused renderers */
for (int i = 1; i < n_renderers; i++) {
for (int i = 0; i < n_renderers; i++) {
if (renderer_type[i] == renderer) {
continue;
}

View File

@@ -2632,7 +2632,7 @@ int main (int argc, char *argv[]) {
url.erase();
raop_remove_known_connections(raop);
}
const char *uri = (url.empty() ? NULL : url.c_str());
const char *uri = (url.empty() ? NULL : url.c_str());
video_renderer_init(render_logger, server_name.c_str(), videoflip, video_parser.c_str(),
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
videosink_options.c_str(), fullscreen, video_sync, h265_support, playbin_version, uri);