aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/mad/decoder_mad.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/mad/decoder_mad.h')
-rw-r--r--src/plugins/Input/mad/decoder_mad.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/plugins/Input/mad/decoder_mad.h b/src/plugins/Input/mad/decoder_mad.h
new file mode 100644
index 000000000..ecbb160cb
--- /dev/null
+++ b/src/plugins/Input/mad/decoder_mad.h
@@ -0,0 +1,95 @@
+// Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com>
+//
+// Use, modification and distribution is allowed without limitation,
+// warranty, or liability of any kind.
+//
+
+#ifndef __decoder_mad_h
+#define __decoder_mad_h
+
+class DecoderMAD;
+
+#include "decoder.h"
+#include "decodermadfactory.h"
+
+extern "C" {
+#include <mad.h>
+}
+
+
+class DecoderMAD : public Decoder
+{
+public:
+ DecoderMAD(QObject *parent = 0, DecoderFactory *d = 0,
+ QIODevice *i = 0, Output *o = 0);
+ virtual ~DecoderMAD();
+
+ // standard decoder API
+ bool initialize();
+ double lengthInSeconds();
+ void seek(double);
+ void stop();
+
+ // Equalizer
+ //bool isEQSupported() const { return TRUE; }
+ //void setEQEnabled(bool);
+ //void setEQ(const EqPreset &);
+
+ static const int maxDecodeRetries;
+ static const int maxFrameSize;
+ static const int maxFrameCheck;
+ static const int initialFrameSize;
+
+
+private:
+ // thread run function
+ void run();
+
+ enum mad_flow madOutput();
+ enum mad_flow madError(struct mad_stream *, struct mad_frame *);
+
+ // helper functions
+ void flush(bool = FALSE);
+ void deinit();
+ bool findHeader();
+ bool findXingHeader(struct mad_bitptr, unsigned int);
+ void calcLength(struct mad_header *);
+
+ bool inited, user_stop, done, finish, derror, eof, useeq;
+ double totalTime, seekTime;
+ int channels;
+ long bitrate, freq, len;
+ unsigned int bks;
+ mad_fixed_t eqbands[32];
+
+ // file input buffer
+ char *input_buf;
+ unsigned long input_bytes;
+
+ // output buffer
+ char *output_buf;
+ unsigned long output_bytes, output_at, output_size;
+
+ // MAD decoder
+ struct {
+ int flags;
+ unsigned long frames;
+ unsigned long bytes;
+ unsigned char toc[100];
+ long scale;
+ } xing;
+
+ enum {
+ XING_FRAMES = 0x0001,
+ XING_BYTES = 0x0002,
+ XING_TOC = 0x0004,
+ XING_SCALE = 0x0008
+ };
+
+ struct mad_stream stream;
+ struct mad_frame frame;
+ struct mad_synth synth;
+};
+
+
+#endif // __decoder_mad_h