]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'maint'
authorAndre Noll <maan@systemlinux.org>
Thu, 22 Oct 2009 17:24:44 +0000 (19:24 +0200)
committerAndre Noll <maan@systemlinux.org>
Thu, 22 Oct 2009 17:24:44 +0000 (19:24 +0200)
1  2 
fecdec_filter.c

diff --combined fecdec_filter.c
index 63510e8fd5cdf72fafee6e74b37fba4e770417e8,a393a230e436bbacbdd367a6d26032eb20292090..1ff4abbbed26122644ff47ad42a5c44f0bc3d5d3
@@@ -6,8 -6,6 +6,8 @@@
  
  /** \file fecdec_filter.c A filter that fec-decodes an audio stream. */
  
 +#include <regex.h>
 +
  #include <dirent.h>
  #include "para.h"
  #include "error.h"
@@@ -264,6 -262,7 +264,7 @@@ enum fec_group_usability 
        FEC_GROUP_UNUSABLE,
        FEC_GROUP_USABLE,
        FEC_GROUP_USABLE_SKIP_HEADER,
+       FEC_GROUP_USABLE_WITH_HEADER
  };
  
  static enum fec_group_usability group_is_usable(struct fecdec_group *fg,
        if (fg->h.bos)
                return FEC_GROUP_USABLE;
        if (fg->h.audio_header_size)
-               return FEC_GROUP_USABLE;
+               return FEC_GROUP_USABLE_WITH_HEADER;
        return FEC_GROUP_UNUSABLE;
  }
  
  static int decode_group(struct fecdec_group *fg, struct filter_node *fn)
  {
        int i, ret, sb = fg->h.slice_bytes;
-       size_t written = 0, need;
+       size_t written, need;
        struct private_fecdec_data *pfd = fn->private_data;
        enum fec_group_usability u = group_is_usable(fg, pfd);
  
                PARA_INFO_LOG("increasing fec buf to %zu\n", fn->bufsize);
                fn->buf = para_realloc(fn->buf, fn->bufsize);
        }
+       if (u == FEC_GROUP_USABLE_WITH_HEADER) {
+               PARA_INFO_LOG("writing audio file header\n");
+               written = 0;
+               for (i = 0; i < fg->h.data_slices_per_group; i++) {
+                       size_t n = sb;
+                       if (written >= fg->h.audio_header_size)
+                               break;
+                       if (sb + written > fg->h.audio_header_size)
+                               n = fg->h.audio_header_size - written;
+                       memcpy(fn->buf + fn->loaded, fg->data[i], n);
+                       fn->loaded += n;
+                       written += n;
+               }
+       }
+       written = 0;
        for (; i < fg->h.data_slices_per_group; i++) {
                size_t n = sb;
                if (n + written > fg->h.group_bytes)