mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
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:
@@ -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)
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
25
uxplay.cpp
25
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<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;
|
||||
|
||||
Reference in New Issue
Block a user