Audio-Play-MPG123
view release on metacpan or search on metacpan
mpg123/buffer.c view on Meta::CPAN
if(xfermem_block(XF_WRITER, buffermem) != XF_CMD_WAKEUP)
perror("Could not resync/reset buffers");
#endif
return;
}
#ifndef NOXFERMEM
void buffer_loop(struct audio_info_struct *ai, sigset_t *oldsigset)
{
int bytes;
int my_fd = buffermem->fd[XF_READER];
txfermem *xf = buffermem;
int done = FALSE;
catchsignal (SIGINT, catch_interrupt);
catchsignal (SIGUSR1, catch_usr1);
sigprocmask (SIG_SETMASK, oldsigset, NULL);
if (param.outmode == DECODE_AUDIO) {
if (audio_open(ai) < 0) {
perror("audio");
exit(1);
}
}
for (;;) {
if (intflag) {
intflag = FALSE;
mpg123/mpg123.c view on Meta::CPAN
*/
if (param.usebuffer && (param.outmode != DECODE_AUDIO) &&
(param.outmode != DECODE_FILE)) {
fprintf(stderr, "Sorry, won't buffer output unless writing "
"plain audio.\n");
param.usebuffer = 0;
}
if (param.usebuffer) {
unsigned int bufferbytes;
sigset_t newsigset, oldsigset;
if (param.usebuffer < 32)
param.usebuffer = 32; /* minimum is 32 Kbytes! */
bufferbytes = (param.usebuffer * 1024);
bufferbytes -= bufferbytes % FRAMEBUFUNIT;
/* +1024 for NtoM rounding problems */
xfermem_init (&buffermem, bufferbytes ,0,1024);
pcm_sample = (unsigned char *) buffermem->data;
pcm_point = 0;
sigemptyset (&newsigset);
sigaddset (&newsigset, SIGUSR1);
sigprocmask (SIG_BLOCK, &newsigset, &oldsigset);
catchsignal (SIGCHLD, catch_child);
switch ((buffer_pid = fork())) {
case -1: /* error */
perror("fork()");
exit(1);
case 0: /* child */
if(rd)
rd->close(rd); /* child doesn't need the input stream */
xfermem_init_reader (buffermem);
buffer_loop (&ai, &oldsigset);
xfermem_done_reader (buffermem);
xfermem_done (buffermem);
_exit(0);
default: /* parent */
xfermem_init_writer (buffermem);
param.outmode = DECODE_BUFFER;
}
}
else {
#endif
mpg123/mpg123.h view on Meta::CPAN
#define READER_ID3TAG 0x2
extern struct reader *rd,readers[];
extern int halfspeed;
extern int buffer_fd[2];
extern txfermem *buffermem;
extern char *prgName, *prgVersion;
#ifndef NOXFERMEM
extern void buffer_loop(struct audio_info_struct *ai,sigset_t *oldsigset);
#endif
extern void readers_pushback_header(struct reader *rds,unsigned long aLong);
extern void readers_mark_pos(struct reader *rds);
extern void readers_goto_mark(struct reader *rds);
/* ------ Declarations from "httpget.c" ------ */
extern char *proxyurl;
( run in 0.761 second using v1.01-cache-2.11-cpan-5511b514fd6 )