ReactOS  0.4.15-dev-425-gc40b086
reader.h File Reference
#include "config.h"
#include "mpg123.h"
Include dependency graph for reader.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  buffy
 
struct  bufferchain
 
struct  reader_data
 
struct  reader
 

Macros

#define READER_FD_OPENED   0x1
 
#define READER_ID3TAG   0x2
 
#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
 
#define READER_FEED   2
 
#define READER_BUF_STREAM   3
 
#define READER_BUF_ICY_STREAM   4
 
#define READERS   5
 
#define READER_ERROR   MPG123_ERR
 
#define READER_MORE   MPG123_NEED_MORE
 

Functions

void bc_prepare (struct bufferchain *, size_t pool_size, size_t bufblock)
 
void bc_cleanup (struct bufferchain *)
 
void bc_poolsize (struct bufferchain *, size_t pool_size, size_t bufblock)
 
size_t bc_fill (struct bufferchain *bc)
 
int open_stream (mpg123_handle *, const char *path, int fd)
 
int open_stream_handle (mpg123_handle *, void *iohandle)
 
int open_feed (mpg123_handle *)
 
int feed_more (mpg123_handle *fr, const unsigned char *in, long count)
 
void feed_forget (mpg123_handle *fr)
 
off_t feed_set_pos (mpg123_handle *fr, off_t pos)
 
void open_bad (mpg123_handle *)
 

Macro Definition Documentation

◆ READER_BUF_ICY_STREAM

#define READER_BUF_ICY_STREAM   4

Definition at line 125 of file reader.h.

◆ READER_BUF_STREAM

#define READER_BUF_STREAM   3

Definition at line 124 of file reader.h.

◆ READER_BUFFERED

#define READER_BUFFERED   0x8

Definition at line 116 of file reader.h.

◆ READER_ERROR

#define READER_ERROR   MPG123_ERR

Definition at line 134 of file reader.h.

◆ READER_FD_OPENED

#define READER_FD_OPENED   0x1

Definition at line 113 of file reader.h.

◆ READER_FEED

#define READER_FEED   2

Definition at line 122 of file reader.h.

◆ READER_HANDLEIO

#define READER_HANDLEIO   0x40

Definition at line 118 of file reader.h.

◆ READER_ICY_STREAM

#define READER_ICY_STREAM   1

Definition at line 121 of file reader.h.

◆ READER_ID3TAG

#define READER_ID3TAG   0x2

Definition at line 114 of file reader.h.

◆ READER_MORE

#define READER_MORE   MPG123_NEED_MORE

Definition at line 135 of file reader.h.

◆ READER_NONBLOCK

#define READER_NONBLOCK   0x20

Definition at line 117 of file reader.h.

◆ READER_SEEKABLE

#define READER_SEEKABLE   0x4

Definition at line 115 of file reader.h.

◆ READER_STREAM

#define READER_STREAM   0

Definition at line 120 of file reader.h.

◆ READERS

#define READERS   5

Definition at line 131 of file reader.h.

Function Documentation

◆ bc_cleanup()

void bc_cleanup ( struct bufferchain )

Definition at line 527 of file readers.c.

528 {
529  buffy_del_chain(bc->pool);
530  bc->pool = NULL;
531  bc->pool_fill = 0;
532 }
LPBATCH_CONTEXT bc
Definition: batch.c:66
smooth NULL
Definition: ftsmooth.c:416
static void buffy_del_chain(struct buffy *buf)
Definition: readers.c:498

◆ bc_fill()

size_t bc_fill ( struct bufferchain bc)

Definition at line 516 of file readers.c.

517 {
518  return (size_t)(bc->size - bc->pos);
519 }
LPBATCH_CONTEXT bc
Definition: batch.c:66

◆ bc_poolsize()

void bc_poolsize ( struct bufferchain ,
size_t  pool_size,
size_t  bufblock 
)

Definition at line 521 of file readers.c.

522 {
523  bc->pool_size = pool_size;
524  bc->bufblock = bufblock;
525 }
LPBATCH_CONTEXT bc
Definition: batch.c:66

Referenced by bc_prepare().

◆ bc_prepare()

void bc_prepare ( struct bufferchain ,
size_t  pool_size,
size_t  bufblock 
)

Definition at line 508 of file readers.c.

509 {
510  bc_poolsize(bc, pool_size, bufblock);
511  bc->pool = NULL;
512  bc->pool_fill = 0;
513  bc_init(bc); /* Ensure that members are zeroed for read-only use. */
514 }
void bc_poolsize(struct bufferchain *bc, size_t pool_size, size_t bufblock)
Definition: readers.c:521
LPBATCH_CONTEXT bc
Definition: batch.c:66
smooth NULL
Definition: ftsmooth.c:416
static void bc_init(struct bufferchain *bc)
Definition: readers.c:596

◆ feed_forget()

void feed_forget ( mpg123_handle fr)

◆ feed_more()

int feed_more ( mpg123_handle fr,
const unsigned char in,
long  count 
)

Definition at line 772 of file readers.c.

773 {
774  int ret = 0;
775  if(VERBOSE3) debug("feed_more");
776  if((ret = bc_add(&fr->rdat.buffer, in, count)) != 0)
777  {
778  ret = READER_ERROR;
779  if(NOQUIET) error1("Failed to add buffer, return: %i", ret);
780  }
781  else /* Not talking about filelen... that stays at 0. */
782 
783  if(VERBOSE3) debug3("feed_more: %p %luB bufsize=%lu", fr->rdat.buffer.last->data,
784  (unsigned long)fr->rdat.buffer.last->size, (unsigned long)fr->rdat.buffer.size);
785  return ret;
786 }
#define error1(s, a)
Definition: debug.h:125
GLuint GLuint GLsizei count
Definition: gl.h:1545
struct reader_data rdat
Definition: frame.h:288
#define debug3(s, a, b, c)
Definition: debug.h:63
#define READER_ERROR
Definition: reader.h:134
#define VERBOSE3
#define NOQUIET
int ret
GLuint in
Definition: glext.h:9616
static int bc_add(struct bufferchain *bc, const unsigned char *data, ssize_t size)
Definition: readers.c:637
#define debug(msg)
Definition: key_call.c:71

◆ feed_set_pos()

off_t feed_set_pos ( mpg123_handle fr,
off_t  pos 
)

Definition at line 822 of file readers.c.

823 {
824  struct bufferchain *bc = &fr->rdat.buffer;
825  if(pos >= bc->fileoff && pos-bc->fileoff < bc->size)
826  { /* We have the position! */
827  bc->pos = (ssize_t)(pos - bc->fileoff);
828  debug1("feed_set_pos inside, next feed from %"OFF_P, (off_p)(bc->fileoff+bc->size));
829  return bc->fileoff+bc->size; /* Next input after end of buffer... */
830  }
831  else
832  { /* I expect to get the specific position on next feed. Forget what I have now. */
833  bc_reset(bc);
834  bc->fileoff = pos;
835  debug1("feed_set_pos outside, buffer reset, next feed from %"OFF_P, (off_p)pos);
836  return pos; /* Next input from exactly that position. */
837  }
838 }
LPBATCH_CONTEXT bc
Definition: batch.c:66
#define ssize_t
Definition: config.h:511
struct reader_data rdat
Definition: frame.h:288
static void bc_reset(struct bufferchain *bc)
Definition: readers.c:606
long off_p
Definition: compat.h:132
#define debug1(s, a)
Definition: debug.h:61
#define OFF_P
Definition: compat.h:131

◆ open_bad()

void open_bad ( mpg123_handle )

Definition at line 1123 of file readers.c.

1124 {
1125  debug("open_bad");
1126 #ifndef NO_ICY
1127  clear_icy(&mh->icy);
1128 #endif
1129  mh->rd = &bad_reader;
1130  mh->rdat.flags = 0;
1131 #ifndef NO_FEEDER
1132  bc_init(&mh->rdat.buffer);
1133 #endif
1134  mh->rdat.filelen = -1;
1135 }
static void bc_init(struct bufferchain *bc)
Definition: readers.c:596
static struct reader bad_reader
Definition: readers.c:1020
#define clear_icy
Definition: intsym.h:209
#define debug(msg)
Definition: key_call.c:71

◆ open_feed()

int open_feed ( mpg123_handle )

Definition at line 1137 of file readers.c.

1138 {
1139  debug("feed reader");
1140 #ifdef NO_FEEDER
1141  if(NOQUIET)
1142  error("Buffered readers not supported in this build.");
1143  fr->err = MPG123_MISSING_FEATURE;
1144  return -1;
1145 #else
1146 #ifndef NO_ICY
1147  if(fr->p.icy_interval > 0)
1148  {
1149  if(NOQUIET) error("Feed reader cannot do ICY parsing!");
1150 
1151  return -1;
1152  }
1153  clear_icy(&fr->icy);
1154 #endif
1155  fr->rd = &readers[READER_FEED];
1156  fr->rdat.flags = 0;
1157  if(fr->rd->init(fr) < 0) return -1;
1158 
1159  debug("feed reader init successful");
1160  return 0;
1161 #endif /* NO_FEEDER */
1162 }
#define error(str)
Definition: mkdosfs.c:1605
#define READER_FEED
Definition: readers.c:918
static struct reader readers[]
Definition: readers.c:921
#define NOQUIET
#define clear_icy
Definition: intsym.h:209
#define debug(msg)
Definition: key_call.c:71

◆ open_stream()

int open_stream ( mpg123_handle ,
const char path,
int  fd 
)

Definition at line 1187 of file readers.c.

1188 {
1189  int filept_opened = 1;
1190  int filept; /* descriptor of opened file/stream */
1191 
1192  clear_icy(&fr->icy); /* can be done inside frame_clear ...? */
1193 
1194  if(!bs_filenam) /* no file to open, got a descriptor (stdin) */
1195  {
1196  filept = fd;
1197  filept_opened = 0; /* and don't try to close it... */
1198  }
1199  #ifndef O_BINARY
1200  #define O_BINARY (0)
1201  #endif
1202  else if((filept = compat_open(bs_filenam, O_RDONLY|O_BINARY)) < 0) /* a plain old file to open... */
1203  {
1204  if(NOQUIET) error2("Cannot open file %s: %s", bs_filenam, strerror(errno));
1205  fr->err = MPG123_BAD_FILE;
1206  return MPG123_ERR; /* error... */
1207  }
1208 
1209  /* now we have something behind filept and can init the reader */
1210  fr->rdat.filelen = -1;
1211  fr->rdat.filept = filept;
1212  fr->rdat.flags = 0;
1213  if(filept_opened) fr->rdat.flags |= READER_FD_OPENED;
1214 
1215  return open_finish(fr);
1216 }
static int open_finish(mpg123_handle *fr)
Definition: readers.c:1165
#define compat_open
Definition: intsym.h:13
#define O_BINARY
#define READER_FD_OPENED
Definition: reader.h:113
static int fd
Definition: io.c:51
int errno
const char * strerror(int err)
Definition: compat_str.c:23
#define error2(s, a, b)
Definition: debug.h:126
#define NOQUIET
#define clear_icy
Definition: intsym.h:209
#define O_RDONLY
Definition: acwin.h:108

◆ open_stream_handle()

int open_stream_handle ( mpg123_handle ,
void iohandle 
)

Definition at line 1218 of file readers.c.

1219 {
1220  clear_icy(&fr->icy); /* can be done inside frame_clear ...? */
1221  fr->rdat.filelen = -1;
1222  fr->rdat.filept = -1;
1223  fr->rdat.iohandle = iohandle;
1224  fr->rdat.flags = 0;
1225  fr->rdat.flags |= READER_HANDLEIO;
1226 
1227  return open_finish(fr);
1228 }
static int open_finish(mpg123_handle *fr)
Definition: readers.c:1165
#define READER_HANDLEIO
Definition: reader.h:118
#define clear_icy
Definition: intsym.h:209