mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
code cleanup video_renderer.c
This commit is contained in:
@@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user