]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - oggdec_filter.c
write: Parse command line options also in btr mode.
[paraslash.git] / oggdec_filter.c
index bdfafedfbab45153a566dc953a989c22e15d097d..3de62cbd7d494dd39b84b42006a5a43797550c91 100644 (file)
@@ -6,18 +6,20 @@
 
 /** \file oggdec_filter.c Paraslash's ogg vorbis decoder. */
 
-#include "para.h"
+#include <regex.h>
+#include <vorbis/vorbisfile.h>
+#include <stdbool.h>
 
+#include "para.h"
 #include "oggdec_filter.cmdline.h"
 #include "list.h"
 #include "sched.h"
 #include "ggo.h"
+#include "buffer_tree.h"
 #include "filter.h"
 #include "error.h"
 #include "string.h"
 
-#include <vorbis/vorbisfile.h>
-
 /** Determine byte sex. */
 #ifdef WORDS_BIGENDIAN
 #define ENDIAN 1
@@ -136,7 +138,7 @@ static ssize_t ogg_convert(char *inbuffer, size_t len, struct filter_node *fn)
                        NULL, /* no initial buffer */
                        0, /* no initial bytes */
                        ovc); /* the ov_open_callbacks */
-               if (ret == OV_ENOTVORBIS) {
+               if (ret == OV_ENOTVORBIS || ret == OV_EBADHEADER) {
                        /* this might be due to the input buffer being too small */
                        int ib = 1024 * conf->initial_buffer_arg; /* initial buffer */
                        if (len < ib) {
@@ -146,14 +148,13 @@ static ssize_t ogg_convert(char *inbuffer, size_t len, struct filter_node *fn)
                                pod->vf = NULL;
                                return 0;
                        }
-                       return -E_OGGDEC_NOTVORBIS;
+                       return ret == OV_ENOTVORBIS?
+                               -E_OGGDEC_NOTVORBIS : -E_OGGDEC_BADHEADER;
                }
                if (ret == OV_EREAD)
                        return -E_OGGDEC_READ;
                if (ret == OV_EVERSION)
                        return -E_OGGDEC_VERSION;
-               if (ret == OV_EBADHEADER)
-                       return -E_OGGDEC_BADHEADER;
                if (ret < 0)
                        return -E_OGGDEC_FAULT;
                fn->fc->channels = ov_info(pod->vf, 0)->channels;