forked from KolibriOS/kolibrios
libmpg123 1.15.4
git-svn-id: svn://kolibrios.org@3960 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -12,13 +12,16 @@
|
||||
#include "config.h"
|
||||
#include "mpg123.h"
|
||||
|
||||
#ifndef NO_FEEDER
|
||||
struct buffy
|
||||
{
|
||||
unsigned char *data;
|
||||
ssize_t size;
|
||||
ssize_t realsize;
|
||||
struct buffy *next;
|
||||
};
|
||||
|
||||
|
||||
struct bufferchain
|
||||
{
|
||||
struct buffy* first; /* The beginning of the chain. */
|
||||
@@ -29,27 +32,51 @@ struct bufferchain
|
||||
ssize_t firstpos; /* The point of return on non-forget() */
|
||||
/* The "real" filepos is fileoff + pos. */
|
||||
off_t fileoff; /* Beginning of chain is at this file offset. */
|
||||
size_t bufblock; /* Default (minimal) size of buffers. */
|
||||
size_t pool_size; /* Keep that many buffers in storage. */
|
||||
size_t pool_fill; /* That many buffers are there. */
|
||||
/* A pool of buffers to re-use, if activated. It's a linked list that is worked on from the front. */
|
||||
struct buffy *pool;
|
||||
};
|
||||
|
||||
/* Call this before any buffer chain use (even bc_init()). */
|
||||
void bc_prepare(struct bufferchain *, size_t pool_size, size_t bufblock);
|
||||
/* Free persistent data in the buffer chain, after bc_reset(). */
|
||||
void bc_cleanup(struct bufferchain *);
|
||||
/* Change pool size. This does not actually allocate/free anything on itself, just instructs later operations to free less / allocate more buffers. */
|
||||
void bc_poolsize(struct bufferchain *, size_t pool_size, size_t bufblock);
|
||||
/* Return available byte count in the buffer. */
|
||||
size_t bc_fill(struct bufferchain *bc);
|
||||
|
||||
#endif
|
||||
|
||||
struct reader_data
|
||||
{
|
||||
off_t filelen; /* total file length or total buffer size */
|
||||
off_t filepos; /* position in file or position in buffer chain */
|
||||
int filept;
|
||||
/* Custom opaque I/O handle from the client. */
|
||||
void *iohandle;
|
||||
int flags;
|
||||
#ifndef WIN32
|
||||
long timeout_sec;
|
||||
#endif
|
||||
ssize_t (*fdread) (mpg123_handle *, void *, size_t);
|
||||
/* User can replace the read and lseek functions. The r_* are the stored replacement functions or NULL,
|
||||
The second two pointers are the actual workers (default map to POSIX read/lseek). */
|
||||
/* User can replace the read and lseek functions. The r_* are the stored replacement functions or NULL. */
|
||||
ssize_t (*r_read) (int fd, void *buf, size_t count);
|
||||
off_t (*r_lseek)(int fd, off_t offset, int whence);
|
||||
/* These are custom I/O routines for opaque user handles.
|
||||
They get picked if there's some iohandle set. */
|
||||
ssize_t (*r_read_handle) (void *handle, void *buf, size_t count);
|
||||
off_t (*r_lseek_handle)(void *handle, off_t offset, int whence);
|
||||
/* An optional cleaner for the handle on closing the stream. */
|
||||
void (*cleanup_handle)(void *handle);
|
||||
/* These two pointers are the actual workers (default map to POSIX read/lseek). */
|
||||
ssize_t (*read) (int fd, void *buf, size_t count);
|
||||
off_t (*lseek)(int fd, off_t offset, int whence);
|
||||
/* Buffered readers want that abstracted, set internally. */
|
||||
ssize_t (*fullread)(mpg123_handle *, unsigned char *, ssize_t);
|
||||
#ifndef NO_FEEDER
|
||||
struct bufferchain buffer; /* Not dynamically allocated, these few struct bytes aren't worth the trouble. */
|
||||
#endif
|
||||
};
|
||||
|
||||
/* start to use off_t to properly do LFS in future ... used to be long */
|
||||
@@ -71,6 +98,8 @@ struct reader
|
||||
|
||||
/* Open a file by path or use an opened file descriptor. */
|
||||
int open_stream(mpg123_handle *, const char *path, int fd);
|
||||
/* Open an external handle. */
|
||||
int open_stream_handle(mpg123_handle *, void *iohandle);
|
||||
|
||||
/* feed based operation has some specials */
|
||||
int open_feed(mpg123_handle *);
|
||||
@@ -86,6 +115,7 @@ void open_bad(mpg123_handle *);
|
||||
#define READER_SEEKABLE 0x4
|
||||
#define READER_BUFFERED 0x8
|
||||
#define READER_NONBLOCK 0x20
|
||||
#define READER_HANDLEIO 0x40
|
||||
|
||||
#define READER_STREAM 0
|
||||
#define READER_ICY_STREAM 1
|
||||
|
Reference in New Issue
Block a user