Bugfix
This commit is contained in:
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.4.1)
|
|||||||
project(AirplayServer)
|
project(AirplayServer)
|
||||||
|
|
||||||
set (CMAKE_CXX_STANDARD 11)
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=Debug")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=Release")
|
||||||
|
|
||||||
add_subdirectory(lib/curve25519)
|
add_subdirectory(lib/curve25519)
|
||||||
add_subdirectory(lib/ed25519)
|
add_subdirectory(lib/ed25519)
|
||||||
|
|||||||
5
install.sh
Normal file
5
install.sh
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
mkdir build;
|
||||||
|
cd build/;
|
||||||
|
cmake ..;
|
||||||
|
make -j;
|
||||||
@@ -331,10 +331,8 @@ raop_rtp_mirror_thread(void *arg)
|
|||||||
// The information in the payload contains an SPS and a PPS NAL
|
// The information in the payload contains an SPS and a PPS NAL
|
||||||
|
|
||||||
float width_source = byteutils_get_float(packet, 40);
|
float width_source = byteutils_get_float(packet, 40);
|
||||||
printf("source-width: %f", width_source);
|
|
||||||
float height_source = byteutils_get_float(packet, 44);
|
float height_source = byteutils_get_float(packet, 44);
|
||||||
float width = byteutils_get_float(packet, 56);
|
float width = byteutils_get_float(packet, 56);
|
||||||
printf("width: %f", width);
|
|
||||||
|
|
||||||
float height = byteutils_get_float(packet, 60);
|
float height = byteutils_get_float(packet, 60);
|
||||||
logger_log(raop_rtp_mirror->logger, LOGGER_DEBUG, "raop_rtp_mirror width_source = %f height_source = %f width = %f height = %f",
|
logger_log(raop_rtp_mirror->logger, LOGGER_DEBUG, "raop_rtp_mirror width_source = %f height_source = %f width = %f height = %f",
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ void set_video_overlay2(video_renderer_t *renderer, gulong embed_xid);
|
|||||||
* 1: a new connection come
|
* 1: a new connection come
|
||||||
* -1: a connection lost
|
* -1: a connection lost
|
||||||
*/
|
*/
|
||||||
void video_renderer_update_background(video_renderer_t *renderer, int type);
|
void video_renderer_update_background(video_renderer_t *renderer, int type, int width, int height);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,6 +111,11 @@ void video_renderer_destroy(video_renderer_t *renderer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void video_renderer_update_background(video_renderer_t *renderer, int type) {
|
void video_renderer_update_background(video_renderer_t *renderer, int type, int width, int height) {
|
||||||
|
|
||||||
|
if(type==-1) {
|
||||||
|
|
||||||
|
gst_app_src_end_of_stream (GST_APP_SRC(renderer->appsrc));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
78
uxplay.cpp
78
uxplay.cpp
@@ -65,6 +65,15 @@ static raop_t *raop = NULL;
|
|||||||
static video_renderer_t *video_renderer = NULL;
|
static video_renderer_t *video_renderer = NULL;
|
||||||
static audio_renderer_t *audio_renderer = NULL;
|
static audio_renderer_t *audio_renderer = NULL;
|
||||||
|
|
||||||
|
struct GTK_STRUCT {
|
||||||
|
GtkWidget *app_window, *video_window;
|
||||||
|
GdkWindow *video_window_xwindow;
|
||||||
|
gulong embed_xid;
|
||||||
|
cairo_surface_t *surface = NULL;
|
||||||
|
};
|
||||||
|
|
||||||
|
static GTK_STRUCT * GTK_data = NULL;
|
||||||
|
|
||||||
static void signal_handler(int sig) {
|
static void signal_handler(int sig) {
|
||||||
switch (sig) {
|
switch (sig) {
|
||||||
case SIGINT:
|
case SIGINT:
|
||||||
@@ -119,6 +128,35 @@ void print_info(char *name) {
|
|||||||
static void gtk_destroy (GtkWidget * widget, gpointer data) {
|
static void gtk_destroy (GtkWidget * widget, gpointer data) {
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) {
|
||||||
|
guint width, height;
|
||||||
|
GdkRGBA color;
|
||||||
|
GtkStyleContext *context;
|
||||||
|
|
||||||
|
context = gtk_widget_get_style_context (widget);
|
||||||
|
|
||||||
|
width = gtk_widget_get_allocated_width (widget);
|
||||||
|
height = gtk_widget_get_allocated_height (widget);
|
||||||
|
|
||||||
|
gtk_render_background (context, cr, 0, 0, width, height);
|
||||||
|
|
||||||
|
cairo_rectangle (cr, 0, 0, width, height);
|
||||||
|
|
||||||
|
gtk_style_context_get_color (context,
|
||||||
|
gtk_style_context_get_state (context),
|
||||||
|
&color);
|
||||||
|
gdk_cairo_set_source_rgba (cr, &color);
|
||||||
|
|
||||||
|
cairo_fill (cr);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void configure_callback(GtkWindow *window, GdkEvent *event, gpointer data) {
|
||||||
|
gtk_widget_queue_draw(GTK_data->video_window);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
init_signals();
|
init_signals();
|
||||||
|
|
||||||
@@ -173,22 +211,25 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
//GTK
|
//GTK
|
||||||
gtk_init (&argc, &argv);
|
gtk_init (&argc, &argv);
|
||||||
|
|
||||||
|
GTK_data = new GTK_STRUCT();
|
||||||
|
|
||||||
GtkWidget *app_window, *video_window;
|
GTK_data->app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
GdkWindow *video_window_xwindow;
|
gtk_window_set_title (GTK_WINDOW (GTK_data->app_window), "AirplayLinux");
|
||||||
app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
gtk_widget_set_size_request (GTK_data->app_window, 200, 200);
|
||||||
gtk_window_set_title (GTK_WINDOW (app_window), "AirplayLinux");
|
GTK_data->video_window = gtk_drawing_area_new ();
|
||||||
video_window = gtk_drawing_area_new ();
|
gtk_widget_set_size_request(GTK_data->video_window, 800, 600);
|
||||||
gtk_widget_set_size_request(video_window, 800, 600);
|
g_signal_connect (GTK_data->video_window, "destroy",G_CALLBACK (gtk_destroy), NULL);
|
||||||
g_signal_connect (video_window, "destroy",G_CALLBACK (gtk_destroy), NULL);
|
//gtk_widget_set_double_buffered (GTK_data->video_window, FALSE);
|
||||||
//gtk_widget_set_double_buffered (video_window, FALSE);
|
gtk_container_add (GTK_CONTAINER (GTK_data->app_window), GTK_data->video_window);
|
||||||
gtk_container_add (GTK_CONTAINER (app_window), video_window);
|
gtk_widget_show_all (GTK_data->app_window);
|
||||||
gtk_widget_show_all (app_window);
|
gtk_widget_realize (GTK_data->video_window);
|
||||||
gtk_widget_realize (video_window);
|
g_signal_connect (G_OBJECT (GTK_data->video_window), "draw",G_CALLBACK (draw_callback), NULL);
|
||||||
|
g_signal_connect(G_OBJECT(GTK_data->app_window), "configure-event", G_CALLBACK(configure_callback), NULL);
|
||||||
video_window_xwindow = gtk_widget_get_window (video_window);
|
|
||||||
gulong embed_xid = GDK_WINDOW_XID (video_window_xwindow);
|
GTK_data->video_window_xwindow = gtk_widget_get_window (GTK_data->video_window);
|
||||||
if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log, embed_xid) != 0) {
|
GTK_data->embed_xid = GDK_WINDOW_XID (GTK_data->video_window_xwindow);
|
||||||
|
if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log, GTK_data->embed_xid) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,11 +250,14 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
// Server callbacks
|
// Server callbacks
|
||||||
extern "C" void conn_init(void *cls) {
|
extern "C" void conn_init(void *cls) {
|
||||||
video_renderer_update_background(video_renderer, 1);
|
//video_renderer_update_background(video_renderer, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void conn_destroy(void *cls) {
|
extern "C" void conn_destroy(void *cls) {
|
||||||
video_renderer_update_background(video_renderer, -1);
|
gtk_widget_queue_draw(GTK_data->video_window);
|
||||||
|
//int width = gtk_widget_get_allocated_width (GTK_data->video_window);
|
||||||
|
//int height = gtk_widget_get_allocated_height (GTK_data->video_window);
|
||||||
|
//video_renderer_update_background(video_renderer, -1, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void audio_process(void *cls, raop_ntp_t *ntp, aac_decode_struct *data) {
|
extern "C" void audio_process(void *cls, raop_ntp_t *ntp, aac_decode_struct *data) {
|
||||||
|
|||||||
Reference in New Issue
Block a user