summaryrefslogtreecommitdiff
path: root/src/libmusepack/musepack/reader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmusepack/musepack/reader.h')
-rw-r--r--src/libmusepack/musepack/reader.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/libmusepack/musepack/reader.h b/src/libmusepack/musepack/reader.h
new file mode 100644
index 000000000..00aae830d
--- /dev/null
+++ b/src/libmusepack/musepack/reader.h
@@ -0,0 +1,46 @@
+/// \file reader.h
+
+#ifndef _musepack_reader_h_
+#define _musepack_reader_h_
+
+/// \brief Stream reader interface structure.
+///
+/// This is the structure you must supply to the musepack decoding library
+/// to feed it with raw data. Implement the five member functions to provide
+/// a functional reader.
+typedef struct mpc_reader_t {
+ /// Reads size bytes of data into buffer at ptr.
+ mpc_int32_t (*read)(void *t, void *ptr, mpc_int32_t size);
+
+ /// Seeks to byte position offset.
+ BOOL (*seek)(void *t, mpc_int32_t offset);
+
+ /// Returns the current byte offset in the stream.
+ mpc_int32_t (*tell)(void *t);
+
+ /// Returns the total length of the source stream, in bytes.
+ mpc_int32_t (*get_size)(void *t);
+
+ /// True if the stream is a seekable stream.
+ BOOL (*canseek)(void *t);
+
+ /// Optional field that can be used to identify a particular instance of
+ /// reader or carry along data associated with that reader.
+ void *data;
+
+ // These are used by provided internal standard file-based reader implementation.
+ // You shouldn't touch them. They're included in the main struct to avoid
+ // malloc/free.
+ FILE *file;
+ long file_size;
+ BOOL is_seekable;
+} mpc_reader;
+
+/// Initializes reader with default stdio file reader implementation. Use
+/// this if you're just reading from a plain file.
+///
+/// \param r reader struct to initalize
+/// \param input input stream to attach to the reader
+void mpc_reader_setup_file_reader(mpc_reader *r, FILE *input);
+
+#endif // _musepack_reader_h_