summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2011-06-08 22:18:42 +0000
committerChristian Pointner <equinox@spreadspace.org>2011-06-08 22:18:42 +0000
commitaa33711bd59d5064fd9d45ecca34ad69bf7afbdb (patch)
tree857edec1273860a481a2f8fcaba427362195dc23
parentnum_fds not in all older versions of gstreamer multifdsink (diff)
client handling in seperate thread
-rw-r--r--src/gstdvbbackend.c19
-rw-r--r--src/streamer.c23
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");