Bugfix
This commit is contained in:
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.4.1)
|
||||
project(AirplayServer)
|
||||
|
||||
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/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
|
||||
|
||||
float width_source = byteutils_get_float(packet, 40);
|
||||
printf("source-width: %f", width_source);
|
||||
float height_source = byteutils_get_float(packet, 44);
|
||||
float width = byteutils_get_float(packet, 56);
|
||||
printf("width: %f", width);
|
||||
|
||||
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",
|
||||
|
||||
@@ -67,7 +67,7 @@ void set_video_overlay2(video_renderer_t *renderer, gulong embed_xid);
|
||||
* 1: a new connection come
|
||||
* -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
|
||||
}
|
||||
|
||||
@@ -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 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) {
|
||||
switch (sig) {
|
||||
case SIGINT:
|
||||
@@ -119,6 +128,35 @@ void print_info(char *name) {
|
||||
static void gtk_destroy (GtkWidget * widget, gpointer data) {
|
||||
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[]) {
|
||||
init_signals();
|
||||
|
||||
@@ -173,22 +211,25 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
//GTK
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
GTK_data = new GTK_STRUCT();
|
||||
|
||||
GtkWidget *app_window, *video_window;
|
||||
GdkWindow *video_window_xwindow;
|
||||
app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (app_window), "AirplayLinux");
|
||||
video_window = gtk_drawing_area_new ();
|
||||
gtk_widget_set_size_request(video_window, 800, 600);
|
||||
g_signal_connect (video_window, "destroy",G_CALLBACK (gtk_destroy), NULL);
|
||||
//gtk_widget_set_double_buffered (video_window, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (app_window), video_window);
|
||||
gtk_widget_show_all (app_window);
|
||||
gtk_widget_realize (video_window);
|
||||
|
||||
video_window_xwindow = gtk_widget_get_window (video_window);
|
||||
gulong embed_xid = GDK_WINDOW_XID (video_window_xwindow);
|
||||
if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log, embed_xid) != 0) {
|
||||
GTK_data->app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (GTK_data->app_window), "AirplayLinux");
|
||||
gtk_widget_set_size_request (GTK_data->app_window, 200, 200);
|
||||
GTK_data->video_window = gtk_drawing_area_new ();
|
||||
gtk_widget_set_size_request(GTK_data->video_window, 800, 600);
|
||||
g_signal_connect (GTK_data->video_window, "destroy",G_CALLBACK (gtk_destroy), NULL);
|
||||
//gtk_widget_set_double_buffered (GTK_data->video_window, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (GTK_data->app_window), GTK_data->video_window);
|
||||
gtk_widget_show_all (GTK_data->app_window);
|
||||
gtk_widget_realize (GTK_data->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);
|
||||
|
||||
GTK_data->video_window_xwindow = gtk_widget_get_window (GTK_data->video_window);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -209,11 +250,14 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
// Server callbacks
|
||||
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) {
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user