code cleanup video_renderer.c

This commit is contained in:
F. Duncanh
2025-08-24 14:04:41 -04:00
parent b3679fd630
commit 14463c04a8

View File

@@ -54,6 +54,11 @@ static gboolean hls_seek_enabled;
static gboolean hls_playing; static gboolean hls_playing;
static gboolean hls_buffer_empty; static gboolean hls_buffer_empty;
static gboolean hls_buffer_full; static gboolean hls_buffer_full;
static int type_264;
static int type_265;
static int type_hls;
static int type_jpeg;
typedef enum { typedef enum {
@@ -238,6 +243,10 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
hls_duration = -1; hls_duration = -1;
hls_buffer_empty = TRUE; hls_buffer_empty = TRUE;
hls_buffer_empty = FALSE; hls_buffer_empty = FALSE;
type_hls = -1;
type_264 = -1;
type_265 = -1;
type_jpeg = -1;
/* this call to g_set_application_name makes server_name appear in the X11 display window title bar, */ /* this call to g_set_application_name makes server_name appear in the X11 display window title bar, */
@@ -284,6 +293,7 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
logger_log(logger, LOGGER_INFO, "Will use GStreamer playbin version %u to play HLS streamed video", playbin_version); logger_log(logger, LOGGER_INFO, "Will use GStreamer playbin version %u to play HLS streamed video", playbin_version);
g_assert(renderer_type[i]->pipeline); g_assert(renderer_type[i]->pipeline);
renderer_type[i]->codec = hls; renderer_type[i]->codec = hls;
type_hls = i;
/* if we are not using an autovideosink, build a videosink based on the string "videosink" */ /* if we are not using an autovideosink, build a videosink based on the string "videosink" */
if (!auto_videosink) { if (!auto_videosink) {
GstElement *playbin_videosink = make_video_sink(videosink, videosink_options); GstElement *playbin_videosink = make_video_sink(videosink, videosink_options);
@@ -307,14 +317,17 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
jpeg_pipeline = true; jpeg_pipeline = true;
renderer_type[i]->codec = jpeg; renderer_type[i]->codec = jpeg;
caps = gst_caps_from_string(jpeg_caps); caps = gst_caps_from_string(jpeg_caps);
type_jpeg = i;
break; break;
case 1: case 1:
renderer_type[i]->codec = h264; renderer_type[i]->codec = h264;
caps = gst_caps_from_string(h264_caps); caps = gst_caps_from_string(h264_caps);
type_264 = i;
break; break;
case 2: case 2:
renderer_type[i]->codec = h265; renderer_type[i]->codec = h265;
caps = gst_caps_from_string(h265_caps); caps = gst_caps_from_string(h265_caps);
type_265 = i;
break; break;
default: default:
g_assert(0); g_assert(0);
@@ -582,9 +595,9 @@ void video_renderer_stop() {
static void video_renderer_destroy_instance(video_renderer_t *renderer) { static void video_renderer_destroy_instance(video_renderer_t *renderer) {
if (renderer) { if (renderer) {
logger_log(logger, LOGGER_DEBUG,"destroying renderer instance %p", renderer); logger_log(logger, LOGGER_DEBUG,"destroying renderer instance %p codec=%s ", renderer, renderer->codec);
GstState state; GstState state;
GstStateChangeReturn ret; GstStateChangeReturn ret;
gst_element_get_state(renderer->pipeline, &state, NULL, 100 * GST_MSECOND); 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 (state != GST_STATE_NULL) {
@@ -884,17 +897,21 @@ int video_renderer_choose_codec (bool video_is_jpeg, bool video_is_h265) {
video_renderer_t *renderer_used = NULL; video_renderer_t *renderer_used = NULL;
g_assert(!hls_video); g_assert(!hls_video);
if (video_is_jpeg) { if (video_is_jpeg) {
renderer_used = renderer_type[0]; g_assert(type_jpeg != -1);
} else if (n_renderers == 2) { renderer_used = renderer_type[type_jpeg];
if (video_is_h265) {
logger_log(logger, LOGGER_ERR, "video is h265 but the -h265 option was not used");
return -1;
}
renderer_used = renderer_type[1];
} else { } else {
renderer_used = video_is_h265 ? renderer_type[2] : renderer_type[1]; if (video_is_h265) {
if (type_265 == -1) {
logger_log(logger, LOGGER_ERR, "video is h265 but the -h265 option was not used");
return -1;
}
renderer_used = renderer_type[type_265];
} else {
g_assert(type_264 != -1);
renderer_used = renderer_type[type_264];
}
} }
if (renderer_used == NULL) { if (renderer_used == NULL) {
return -1; return -1;
} else if (renderer_used == renderer) { } else if (renderer_used == renderer) {
return 0; return 0;
@@ -911,7 +928,7 @@ int video_renderer_choose_codec (bool video_is_jpeg, bool video_is_h265) {
logger_log(logger, LOGGER_DEBUG, "video_pipeline state change from %s to %s\n", logger_log(logger, LOGGER_DEBUG, "video_pipeline state change from %s to %s\n",
gst_element_state_get_name (old_state),gst_element_state_get_name (new_state)); gst_element_state_get_name (old_state),gst_element_state_get_name (new_state));
gst_video_pipeline_base_time = gst_element_get_base_time(renderer->appsrc); gst_video_pipeline_base_time = gst_element_get_base_time(renderer->appsrc);
if (n_renderers > 2 && renderer == renderer_type[2]) { if (strstr(renderer->codec, h265)) {
logger_log(logger, LOGGER_INFO, "*** video format is h265 high definition (HD/4K) video %dx%d", width, height); logger_log(logger, LOGGER_INFO, "*** video format is h265 high definition (HD/4K) video %dx%d", width, height);
} }
/* destroy unused renderers */ /* destroy unused renderers */