]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 't/udp_lookup'
authorAndre Noll <maan@systemlinux.org>
Mon, 28 Jun 2010 11:19:21 +0000 (13:19 +0200)
committerAndre Noll <maan@systemlinux.org>
Mon, 28 Jun 2010 11:19:21 +0000 (13:19 +0200)
13 files changed:
Makefile.in
NEWS
aacdec_filter.c
buffer_tree.c
configure.ac
ggo/oggdec_filter.ggo [deleted file]
mp3dec_filter.c
oggdec_filter.c
oss_write.c
sched.c
vss.c
web/index.in.html
wmadec_filter.c

index 34992de8514fdce7e4c02f83d9b1e478025d091d..d46da62a9e1792790e3b1ad8bd84f5faa787da98 100644 (file)
@@ -69,7 +69,7 @@ object_dir := objects
 man_dir := man/man1
 
 m4_ggos := afh audioc audiod client filter gui recv server write
-all_ggos := $(m4_ggos) dccp_recv oggdec_filter alsa_write oss_write fade http_recv \
+all_ggos := $(m4_ggos) dccp_recv alsa_write oss_write fade http_recv \
        osx_write udp_recv amp_filter compress_filter file_write \
        mp3dec_filter prebuffer_filter
 ggo_generated := $(addsuffix .ggo, $(addprefix $(ggo_dir)/,$(m4_ggos)))
diff --git a/NEWS b/NEWS
index c17a543bb249024ebd55aa1abf4876a324ee5e0a..a488aaff88e74c5770add2bdc511ac55ac9f7915 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,3 @@
-NEWS
-====
-
 ---------------------------------------------
 0.4.3 (to be announced) "imaginary radiation"
 ---------------------------------------------
@@ -8,6 +5,8 @@ NEWS
        - Fix an end-of-file detection bug in the oggdec filter.
        - New user manual
        - The new nonblock API
+       - FEC support for the DCCP transport (Gerrit Renker).
+       - Both options of the oggdec filter have been removed.
 
 ------------------------------------------
 0.4.2 (2010-04-23) "associative expansion"
index 209c9a4674adfba61f82f8d6e8fac05ec37ccff3..f33f21eb7a63479e87c17cafb1d7fad0f6bce19b 100644 (file)
@@ -112,6 +112,7 @@ next_buffer:
                return;
        btr_merge(btrn, fn->min_iqs);
        len = btr_next_buffer(btrn, (char **)&inbuf);
+       len = PARA_MAX(len, (size_t)8192);
        consumed = 0;
        iqs = btr_get_input_queue_size(btrn);
        if (!padd->initialized) {
index 1b859f520ebf4aa16d0a13df897395d97da423d9..3a59f8b5e2e20fa20c94117dd31e2655101936cf 100644 (file)
@@ -1067,7 +1067,7 @@ struct btr_node *btr_search_node(const char *name, struct btr_node *root)
 }
 
 /** 640K ought to be enough for everybody ;) */
-#define BTRN_MAX_PENDING (640 * 1024)
+#define BTRN_MAX_PENDING (96 * 1024)
 
 /**
  * Return the current state of a buffer tree node.
index 80eaf095372b8bcd1663254b380e5203085bf53c..d8f55ce26c5967cf16075323283db93cae7da98c 100644 (file)
@@ -456,9 +456,6 @@ if test "$have_ogg" = "yes"; then
        audiod_ldflags="$audiod_ldflags $oggvorbis_libs -lvorbis -lvorbisfile"
        afh_ldflags="$afh_ldflags $oggvorbis_libs -logg -lvorbis -lvorbisfile"
 
-       filter_cmdline_objs="$filter_cmdline_objs add_cmdline(oggdec_filter)"
-       audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oggdec_filter)"
-
        server_errlist_objs="$server_errlist_objs ogg_afh"
        filter_errlist_objs="$filter_errlist_objs oggdec_filter"
        audiod_errlist_objs="$audiod_errlist_objs oggdec_filter"
diff --git a/ggo/oggdec_filter.ggo b/ggo/oggdec_filter.ggo
deleted file mode 100644 (file)
index e2d653d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-option "bufsize" b
-#~~~~~~~~~~~~~~~~~
-"size of output buffer"
-int typestr="kilobyte"
-default="128"
-optional
-details="
-       Increase this if you encounter output buffer overrun errors. Smaller
-       values make the oggdec filter use less memory.
-"
-
-option "initial_buffer" i
-#~~~~~~~~~~~~~~~~~~~~~~~~
-"size of initial input buffer"
-int typestr="kilobyte"
-default="16"
-optional
-details="
-       On startup, defer decoding until that many kilobytes are
-       available in the input buffer.
-"
index 3344ea4198595e22629b392b2d90041fdee06c8b..35448da7e22f67c84e2fb08d8f1ba6b15de2d49f 100644 (file)
@@ -140,6 +140,12 @@ next_buffer:
                return;
        btr_merge(btrn, fn->min_iqs);
        len = btr_next_buffer(btrn, &inbuffer);
+       /*
+        * Decode at most 8K in one go to give the post_select() functions of
+        * other buffer tree nodes a chance to run. This is necessary to avoid
+        * buffer underruns on slow machines.
+        */
+       len = PARA_MIN(len, (size_t)8192);
        mad_stream_buffer(&pmd->stream, (unsigned char *)inbuffer, len);
 next_frame:
        ret = mad_header_decode(&pmd->frame.header, &pmd->stream);
index 2f1fb787814742ed4d503612b0728d5d8158aaa4..0130afd04989043430e5c1d70fc11800a6d1f311 100644 (file)
@@ -11,7 +11,6 @@
 #include <stdbool.h>
 
 #include "para.h"
-#include "oggdec_filter.cmdline.h"
 #include "list.h"
 #include "sched.h"
 #include "ggo.h"
@@ -227,7 +226,7 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t)
                if (read_ret < 0)
                        goto out;
                btr_add_output(out, read_ret, btrn);
-               if (btr_get_output_queue_size(btrn) > 640 * 1024)
+               if (btr_get_output_queue_size(btrn) > 128 * 1024)
                        return; /* enough data for the moment */
        }
 out:
@@ -237,36 +236,6 @@ out:
        }
 }
 
-static int oggdec_parse_config(int argc, char **argv, void **config)
-{
-       int ret;
-       struct oggdec_filter_args_info *ogg_conf;
-
-       ogg_conf = para_calloc(sizeof(*ogg_conf));
-       ret = -E_OGGDEC_SYNTAX;
-       if (oggdec_cmdline_parser(argc, argv, ogg_conf))
-               goto err;
-       ret = -ERRNO_TO_PARA_ERROR(EINVAL);
-       if (ogg_conf->bufsize_arg < 0)
-               goto err;
-       if (ogg_conf->bufsize_arg >= INT_MAX / 1024)
-               goto err;
-       if (ogg_conf->initial_buffer_arg < 0)
-               goto err;
-       if (ogg_conf->initial_buffer_arg >= INT_MAX / 1024)
-               goto err;
-       *config = ogg_conf;
-       return 1;
-err:
-       free(ogg_conf);
-       return ret;
-}
-
-static void oggdec_free_config(void *conf)
-{
-       oggdec_cmdline_parser_free(conf);
-}
-
 /**
  * The init function of the ogg vorbis decoder.
  *
@@ -274,18 +243,9 @@ static void oggdec_free_config(void *conf)
  */
 void oggdec_filter_init(struct filter *f)
 {
-       struct oggdec_filter_args_info dummy;
-
-       oggdec_cmdline_parser_init(&dummy);
        f->open = ogg_open;
        f->close = ogg_close;
        f->pre_select = generic_filter_pre_select;
        f->post_select = ogg_post_select;
-       f->parse_config = oggdec_parse_config;
-       f->free_config = oggdec_free_config;
        f->execute = oggdec_execute;
-       f->help = (struct ggo_help) {
-               .short_help = oggdec_filter_args_info_help,
-               .detailed_help = oggdec_filter_args_info_detailed_help
-       };
 }
index da2539d157ff9f995ae36090d4d434a9b8aa82bc..6525afa48fca41a9f42d01f36d36315f054c3cf5 100644 (file)
@@ -174,6 +174,7 @@ static void oss_post_select(__a_unused struct sched *s,
                        goto out;
                return;
        }
+       btr_merge(btrn, wn->min_iqs);
        bytes = btr_next_buffer(btrn, &data);
        frames = bytes / powd->bytes_per_frame;
        if (!frames) { /* eof and less than a single frame available */
diff --git a/sched.c b/sched.c
index 62d45d5269e44dd95c55c916f4e6150db3ed2999..f703890bdf52f9be843d3c3a545da36974254fde 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -17,6 +17,7 @@
 #include "list.h"
 #include "sched.h"
 #include "string.h"
+#include "time.h"
 #include "error.h"
 
 static struct list_head pre_select_list, post_select_list;
@@ -68,13 +69,33 @@ static void sched_preselect(struct sched *s)
        }
 }
 
+#define SCHED_DEBUG 0
+static inline void call_post_select(struct sched *s, struct task *t)
+{
+#ifndef SCHED_DEBUG
+       t->post_select(s, t);
+#else
+       struct timeval t1, t2, diff;
+       unsigned long pst;
+
+       gettimeofday(&t1, NULL);
+       t->post_select(s, t);
+       gettimeofday(&t2, NULL);
+       tv_diff(&t1, &t2, &diff);
+       pst = tv2ms(&diff);
+       if (pst > 50)
+               PARA_WARNING_LOG("%s: post_select time: %lums\n",
+                       t->status, pst);
+#endif
+}
+
 static void sched_post_select(struct sched *s)
 {
        struct task *t, *tmp;
 
        list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
                if (t->error >= 0)
-                       t->post_select(s, t);
+                       call_post_select(s, t);
 //             PARA_INFO_LOG("%s: %d\n", t->status, t->ret);
                if (t->error >= 0)
                        continue;
diff --git a/vss.c b/vss.c
index e725eebdc94cdbe21a7d4ab3158c4ab89b311235..adc0cb63cea1204d3bfef811c492b807b74001c2 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -954,8 +954,12 @@ static void vss_post_select(struct sched *s, struct task *t)
                int num = mmd->sender_cmd_data.cmd_num,
                        sender_num = mmd->sender_cmd_data.sender_num;
 
-               if (senders[sender_num].client_cmds[num])
-                       senders[sender_num].client_cmds[num](&mmd->sender_cmd_data);
+               if (senders[sender_num].client_cmds[num]) {
+                       ret = senders[sender_num].client_cmds[num]
+                               (&mmd->sender_cmd_data);
+                       if (ret < 0)
+                               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
+               }
                mmd->sender_cmd_data.cmd_num = -1;
        }
        if (vsst->afsss != AFS_SOCKET_CHECK_FOR_WRITE)
index 5a5f4aff4df5baf879ea4d8651cda1185d5c8f63..fa67f2e9c2f31ebc70c903df37681d0db3662773 100644 (file)
@@ -1,6 +1,7 @@
 <h1>Events</h1>
 <hr>
 <ul>
+       <li>2010-06-23: <a href="cooking.html">What's cooking page</a> online</li>
        <li>2010-04-23: <a href="versions/paraslash-0.4.2.tar.bz2">paraslash-0.4.2</a>
                <a href="versions/paraslash-0.4.2.tar.bz2.asc">(sig)</a>
                "associative expansion"
index 96fb50082d2bff52ba082904341851048c66c6ef..45fda79e7e7359a0535bd0a932ec03ad944b23fe 100644 (file)
@@ -1279,7 +1279,7 @@ next_buffer:
        }
 success:
        btr_consume(btrn, converted);
-       goto next_buffer;
+       return;
 err:
        assert(ret < 0);
        t->error = ret;