remove rpi features not valid for gstreamer, set application name

to server name, so this name appears in gstreamer window title bar
This commit is contained in:
fduncanh
2021-08-01 13:51:12 -04:00
parent 5d2221b22b
commit 58e0a15f93
6 changed files with 22 additions and 48 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;

View File

@@ -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
}

View File

@@ -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) {
}
}

View File

@@ -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<char> 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<char> 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<char> 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<char> 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<char> 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<char> 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;