mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
make video pipeline more configurable
This commit is contained in:
@@ -45,7 +45,7 @@ typedef enum videoflip_e {
|
||||
|
||||
typedef struct video_renderer_s video_renderer_t;
|
||||
|
||||
void video_renderer_init (logger_t *logger, const char *server_name, videoflip_t videoflip[2], const char *decoder, const char *videosink);
|
||||
void video_renderer_init (logger_t *logger, const char *server_name, videoflip_t videoflip[2], const char *decoder, const char *converter, const char *videosink);
|
||||
void video_renderer_start ();
|
||||
void video_renderer_stop ();
|
||||
void video_renderer_render_buffer (raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int type);
|
||||
|
||||
@@ -105,7 +105,7 @@ void video_renderer_size(float *f_width_source, float *f_height_source, float *f
|
||||
logger_log(logger, LOGGER_DEBUG, "begin video stream wxh = %dx%d; source %dx%d", width, height, width_source, height_source);
|
||||
}
|
||||
|
||||
void video_renderer_init(logger_t *render_logger, const char *server_name, videoflip_t videoflip[2], const char *decoder, const char *videosink) {
|
||||
void video_renderer_init(logger_t *render_logger, const char *server_name, videoflip_t videoflip[2], const char *decoder, const char *converter, const char *videosink) {
|
||||
GError *error = NULL;
|
||||
logger = render_logger;
|
||||
|
||||
@@ -120,14 +120,14 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
|
||||
assert(renderer);
|
||||
|
||||
gst_init(NULL,NULL);
|
||||
|
||||
GString *launch = g_string_new("appsrc name=video_source stream-type=0 format=GST_FORMAT_TIME is-live=true ! queue ! ");
|
||||
g_string_append(launch, decoder);
|
||||
g_string_append(launch, " ! videoconvert ! ");
|
||||
g_string_append(launch, converter);
|
||||
append_videoflip(launch, &videoflip[0], &videoflip[1]);
|
||||
g_string_append(launch, videosink);
|
||||
g_string_append(launch, " name=video_sink sync=false");
|
||||
renderer->pipeline = gst_parse_launch(launch->str, &error);
|
||||
logger_log(logger, LOGGER_DEBUG, "GStreamer video pipeline will be:\n\"%s\"", launch->str);
|
||||
renderer->pipeline = gst_parse_launch(launch->str, &error);
|
||||
g_assert (renderer->pipeline);
|
||||
g_string_free(launch, TRUE);
|
||||
|
||||
|
||||
13
uxplay.cpp
13
uxplay.cpp
@@ -77,7 +77,8 @@ static std::string audiosink = "autoaudiosink";
|
||||
static bool use_audio = true;
|
||||
static bool new_window_closing_behavior = true;
|
||||
static bool close_window;
|
||||
static std::string decoder = "decodebin";
|
||||
static std::string decoder = "decodebin ! ";
|
||||
static std::string converter = "videoconvert ! ";
|
||||
static bool show_client_FPS_data = false;
|
||||
static unsigned int max_ntp_timeouts = NTP_TIMEOUT_LIMIT;
|
||||
|
||||
@@ -462,10 +463,12 @@ int main (int argc, char *argv[]) {
|
||||
new_window_closing_behavior = false;
|
||||
} else if (arg == "-avdec") {
|
||||
decoder.erase();
|
||||
decoder = "h264parse ! avdec_h264";
|
||||
decoder = "h264parse ! avdec_h264 ! ";
|
||||
} else if (arg == "-v4l2") {
|
||||
decoder.erase();
|
||||
decoder = "h264parse ! v4l2h264dec"; /* undocumented option for Raspberry PI (may be removed without warning) */
|
||||
decoder = "h264parse ! v4l2h264dec ! "; /* undocumented option for Raspberry PI (may be removed without warning) */
|
||||
converter.erase();
|
||||
converter = "v4l2convert ! ";
|
||||
} else if (arg == "-FPSdata") {
|
||||
show_client_FPS_data = true;
|
||||
} else if (arg == "-reset") {
|
||||
@@ -512,7 +515,7 @@ int main (int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
if (use_video) {
|
||||
video_renderer_init(render_logger, server_name.c_str(), videoflip, decoder.c_str(), videosink.c_str());
|
||||
video_renderer_init(render_logger, server_name.c_str(), videoflip, decoder.c_str(), converter.c_str(), videosink.c_str());
|
||||
video_renderer_start();
|
||||
}
|
||||
|
||||
@@ -550,7 +553,7 @@ int main (int argc, char *argv[]) {
|
||||
if (use_audio) audio_renderer_stop();
|
||||
if (use_video && close_window) {
|
||||
video_renderer_destroy();
|
||||
video_renderer_init(render_logger, server_name.c_str(), videoflip, decoder.c_str(), videosink.c_str());
|
||||
video_renderer_init(render_logger, server_name.c_str(), videoflip, decoder.c_str(), converter.c_str(), videosink.c_str());
|
||||
video_renderer_start();
|
||||
}
|
||||
if (reset_loop) goto reconnect;
|
||||
|
||||
Reference in New Issue
Block a user