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 )