From 58e0a15f93c9fa148f9ddf547b1b8aa4be91eab6 Mon Sep 17 00:00:00 2001 From: fduncanh Date: Sun, 1 Aug 2021 13:51:12 -0400 Subject: [PATCH] remove rpi features not valid for gstreamer, set application name to server name, so this name appears in gstreamer window title bar --- CMakeLists.txt | 4 +--- renderers/audio_renderer.h | 4 +--- renderers/audio_renderer_gstreamer.c | 2 +- renderers/video_renderer.h | 22 ++++------------------ renderers/video_renderer_gstreamer.c | 13 +++++++------ uxplay.cpp | 25 ++++++++----------------- 6 files changed, 22 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c150f8d..d33a870 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,8 @@ project(uxplay) set (CMAKE_CXX_STANDARD 11) -add_subdirectory(lib/curve25519) -add_subdirectory(lib/ed25519) +add_subdirectory(lib/llhttp) add_subdirectory(lib/playfair) -add_subdirectory(lib/plist) add_subdirectory(lib) add_subdirectory(renderers) diff --git a/renderers/audio_renderer.h b/renderers/audio_renderer.h index 8d4b19b..4f15d40 100644 --- a/renderers/audio_renderer.h +++ b/renderers/audio_renderer.h @@ -30,11 +30,9 @@ extern "C" { #include "../lib/raop_ntp.h" #include "video_renderer.h" -typedef enum audio_device_e { AUDIO_DEVICE_HDMI, AUDIO_DEVICE_ANALOG, AUDIO_DEVICE_NONE } audio_device_t; - typedef struct audio_renderer_s audio_renderer_t; -audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer, audio_device_t device, bool low_latency); +audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer); void audio_renderer_start(audio_renderer_t *renderer); void audio_renderer_render_buffer(audio_renderer_t *renderer, raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts); void audio_renderer_set_volume(audio_renderer_t *renderer, float volume); diff --git a/renderers/audio_renderer_gstreamer.c b/renderers/audio_renderer_gstreamer.c index b7b439f..00f5e8c 100644 --- a/renderers/audio_renderer_gstreamer.c +++ b/renderers/audio_renderer_gstreamer.c @@ -51,7 +51,7 @@ static gboolean check_plugins (void) return ret; } -audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer, audio_device_t device, bool low_latency) { +audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer) { audio_renderer_t *renderer; GError *error = NULL; diff --git a/renderers/video_renderer.h b/renderers/video_renderer.h index edef133..0cd08dd 100644 --- a/renderers/video_renderer.h +++ b/renderers/video_renderer.h @@ -18,9 +18,7 @@ */ /* - * H264 renderer using OpenMAX for hardware accelerated decoding - * on the Raspberry Pi. - * Based on the hello_video sample from the Raspberry Pi project. + * H264 renderer using gstreamer */ #ifndef VIDEO_RENDERER_H @@ -35,29 +33,17 @@ extern "C" { #include "../lib/logger.h" #include "../lib/raop_ntp.h" -typedef enum background_mode_e { - BACKGROUND_MODE_ON, // Always show background - BACKGROUND_MODE_AUTO, // Only show background while there's an active connection - BACKGROUND_MODE_OFF // Never show background -} background_mode_t; typedef struct video_renderer_s video_renderer_t; -video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency); +video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name); void video_renderer_start(video_renderer_t *renderer); void video_renderer_render_buffer(video_renderer_t *renderer, raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int type); void video_renderer_flush(video_renderer_t *renderer); void video_renderer_destroy(video_renderer_t *renderer); -/** - * Update background according to background mode and connection activity - * @param renderer - * @param type visit type. - * 0: ignore connections - * 1: a new connection come - * -1: a connection lost - */ -void video_renderer_update_background(video_renderer_t *renderer, int type); + /* not implemented for gstreamer */ +void video_renderer_update_background(video_renderer_t *renderer, int type); #ifdef __cplusplus } diff --git a/renderers/video_renderer_gstreamer.c b/renderers/video_renderer_gstreamer.c index 5ed2720..4a69277 100644 --- a/renderers/video_renderer_gstreamer.c +++ b/renderers/video_renderer_gstreamer.c @@ -49,7 +49,7 @@ static gboolean check_plugins (void) return ret; } -video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency) { +video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name) { video_renderer_t *renderer; GError *error = NULL; @@ -57,19 +57,19 @@ video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t backgr assert(renderer); gst_init(NULL, NULL); - - renderer->logger = logger; + g_set_application_name(server_name); + renderer->logger = logger; + assert(check_plugins ()); renderer->pipeline = gst_parse_launch("appsrc name=video_source stream-type=0 format=GST_FORMAT_TIME is-live=true !" "queue ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false", &error); g_assert (renderer->pipeline); - renderer->appsrc = gst_bin_get_by_name (GST_BIN (renderer->pipeline), "video_source"); renderer->sink = gst_bin_get_by_name (GST_BIN (renderer->pipeline), "video_sink"); - + return renderer; } @@ -103,6 +103,7 @@ void video_renderer_destroy(video_renderer_t *renderer) { } } +/* not implemented for gstreamer */ void video_renderer_update_background(video_renderer_t *renderer, int type) { -} +} diff --git a/uxplay.cpp b/uxplay.cpp index c1e6b8a..9d97c2a 100755 --- a/uxplay.cpp +++ b/uxplay.cpp @@ -36,14 +36,10 @@ #define VERSION "1.2" #define DEFAULT_NAME "UxPlay" -#define DEFAULT_BACKGROUND_MODE BACKGROUND_MODE_ON -#define DEFAULT_AUDIO_DEVICE AUDIO_DEVICE_HDMI -#define DEFAULT_LOW_LATENCY false #define DEFAULT_DEBUG_LOG false #define DEFAULT_HW_ADDRESS { (char) 0x48, (char) 0x5d, (char) 0x60, (char) 0x7c, (char) 0xee, (char) 0x22 } -int start_server(std::vector hw_addr, std::string name, background_mode_t background_mode, - audio_device_t audio_device, bool low_latency, bool debug_log); +int start_server(std::vector hw_addr, std::string name, bool use_audio, bool debug_log); int stop_server(); @@ -105,11 +101,9 @@ void print_info(char *name) { int main(int argc, char *argv[]) { init_signals(); - background_mode_t background = DEFAULT_BACKGROUND_MODE; std::string server_name = DEFAULT_NAME; std::vector server_hw_addr = DEFAULT_HW_ADDRESS; - audio_device_t audio_device = DEFAULT_AUDIO_DEVICE; - bool low_latency = DEFAULT_LOW_LATENCY; + bool use_audio = true; bool debug_log = DEFAULT_DEBUG_LOG; // Parse arguments @@ -119,7 +113,7 @@ int main(int argc, char *argv[]) { if (i == argc - 1) continue; server_name = std::string(argv[++i]); } else if (arg == "-a") { - audio_device = AUDIO_DEVICE_NONE; + use_audio = false; } else if (arg == "-d") { debug_log = !debug_log; } else if (arg == "-h" || arg == "-v") { @@ -134,7 +128,7 @@ int main(int argc, char *argv[]) { parse_hw_addr(mac_address, server_hw_addr); } - if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log) != 0) { + if (start_server(server_hw_addr, server_name, use_audio, debug_log) != 0) { return 1; } @@ -204,8 +198,7 @@ extern "C" void log_callback(void *cls, int level, const char *msg) { } -int start_server(std::vector hw_addr, std::string name, background_mode_t background_mode, - audio_device_t audio_device, bool low_latency, bool debug_log) { +int start_server(std::vector hw_addr, std::string name, bool use_audio, bool debug_log) { raop_callbacks_t raop_cbs; memset(&raop_cbs, 0, sizeof(raop_cbs)); raop_cbs.conn_init = conn_init; @@ -229,16 +222,14 @@ int start_server(std::vector hw_addr, std::string name, background_mode_t logger_set_callback(render_logger, log_callback, NULL); logger_set_level(render_logger, debug_log ? LOGGER_DEBUG : LOGGER_INFO); - if (low_latency) logger_log(render_logger, LOGGER_INFO, "Using low-latency mode"); - - if ((video_renderer = video_renderer_init(render_logger, background_mode, low_latency)) == NULL) { + if ((video_renderer = video_renderer_init(render_logger, name.c_str())) == NULL) { LOGE("Could not init video renderer"); return -1; } - if (audio_device == AUDIO_DEVICE_NONE) { + if (! use_audio) { LOGI("Audio disabled"); - } else if ((audio_renderer = audio_renderer_init(render_logger, video_renderer, audio_device, low_latency)) == + } else if ((audio_renderer = audio_renderer_init(render_logger, video_renderer)) == NULL) { LOGE("Could not init audio renderer"); return -1;