From aa33711bd59d5064fd9d45ecca34ad69bf7afbdb Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 8 Jun 2011 22:18:42 +0000 Subject: client handling in seperate thread --- src/gstdvbbackend.c | 19 ++++++++++--------- src/streamer.c | 23 +++++++++++++++++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/gstdvbbackend.c b/src/gstdvbbackend.c index 729c161..007b505 100644 --- a/src/gstdvbbackend.c +++ b/src/gstdvbbackend.c @@ -92,21 +92,22 @@ int main_loop(options_t* opt) return -1; } - source = gst_element_factory_make ("dvbsrc", "dvb-source"); +// source = gst_element_factory_make ("dvbsrc", "dvb-source"); + source = gst_element_factory_make ("audiotestsrc", "dvb-source"); if(!source) { log_printf(ERROR, "Error creating dvb source"); gst_object_unref(GST_OBJECT(pipeline)); gst_object_unref(GST_OBJECT(loop)); return -1; } - g_object_set(G_OBJECT(source), "adapter", 0, NULL); - g_object_set(G_OBJECT(source), "frontend", 0, NULL); - g_object_set(G_OBJECT(source), "frequency", 514000000, NULL); - g_object_set(G_OBJECT(source), "polarity", "H", NULL); - g_object_set(G_OBJECT(source), "pids", "5010:5011", NULL); - g_object_set(G_OBJECT(source), "modulation", 1, NULL); // QAM 16 - g_object_set(G_OBJECT(source), "trans-mode", 1, NULL); // 8k - g_object_set(G_OBJECT(source), "guard", 4, NULL); // AUTO + /* g_object_set(G_OBJECT(source), "adapter", 0, NULL); */ + /* g_object_set(G_OBJECT(source), "frontend", 0, NULL); */ + /* g_object_set(G_OBJECT(source), "frequency", 514000000, NULL); */ + /* g_object_set(G_OBJECT(source), "polarity", "H", NULL); */ + /* g_object_set(G_OBJECT(source), "pids", "5010:5011", NULL); */ + /* g_object_set(G_OBJECT(source), "modulation", 1, NULL); // QAM 16 */ + /* g_object_set(G_OBJECT(source), "trans-mode", 1, NULL); // 8k */ + /* g_object_set(G_OBJECT(source), "guard", 4, NULL); // AUTO */ int ret = streamer_init(&streamer, loop, NULL, "9001"); if(ret) { diff --git a/src/streamer.c b/src/streamer.c index c5052e5..4130a89 100644 --- a/src/streamer.c +++ b/src/streamer.c @@ -138,6 +138,18 @@ static void remove_fd(streamer_t* streamer, int fd) log_printf(INFO, "removing fd %d from fdsink", fd); g_signal_emit_by_name(G_OBJECT(streamer->sink_), "remove-flush", fd, NULL); } + +struct client_struct { + int fd_; + streamer_t* streamer_; +}; + +static gpointer client_thread_func(gpointer data) +{ + struct client_struct *client = (struct client_struct*)data; + add_fd(client->streamer_, client->fd_); + free(client); +} static gpointer streamer_thread_func(gpointer data) { @@ -154,8 +166,15 @@ static gpointer streamer_thread_func(gpointer data) log_printf(ERROR, "accept() call failed"); break; } - log_printf(INFO, "new connection %s:%d (fd=%d)", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), new_client); - add_fd(streamer, new_client); + log_printf(INFO, "streamer: new connection %s:%d (fd=%d)", inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port), new_client); + struct client_struct* client = malloc(sizeof(struct client_struct)); + if(!client) { + log_printf(ERROR, "streamer: memory error"); + break; + } + client->fd_ = new_client; + client->streamer_ = streamer; + g_thread_create(client_thread_func, client, FALSE, NULL); } log_printf(NOTICE, "streamer thread stopped"); -- cgit v1.2.3