Audio-Play-MPG123
view release on metacpan or search on metacpan
mpg123/mpg123.c view on Meta::CPAN
#ifndef NOXFERMEM
if (param.verbose > 1 || !(frameNum & 0x7))
print_stat(rd,fr,frameNum,xfermem_get_usedspace(buffermem),&ai);
if(param.verbose > 2 && param.usebuffer)
fprintf(stderr,"[%08x %08x]",buffermem->readindex,buffermem->freeindex);
#else
if (param.verbose > 1 || !(frameNum & 0x7))
print_stat(rd,fr,frameNum,0,&ai);
#endif
}
#ifdef TERM_CONTROL
if(!param.term_ctrl) {
continue;
} else {
long offset;
if((offset=term_control(fr))) {
if(!rd->back_frame(rd, fr, -offset)) {
frameNum+=offset;
if (frameNum < 0)
frameNum = 0;
}
}
}
#endif
}
#ifndef NOXFERMEM
if(param.usebuffer) {
int s;
while ((s = xfermem_get_usedspace(buffermem))) {
struct timeval wait170 = {0, 170000};
buffer_ignore_lowmem();
if(param.verbose)
print_stat(rd,fr,frameNum,s,&ai);
#ifdef TERM_CONTROL
if(param.term_ctrl) {
long offset;
if((offset=term_control(fr))) {
if((!rd->back_frame(rd, fr, -offset))
&& read_frame(rd,fr)) {
frameNum+=offset;
if (frameNum < 0)
frameNum = 0;
goto tc_hack; /* Doh! Gag me with a spoon! */
}
}
}
#endif
select(0, NULL, NULL, NULL, &wait170);
}
}
#endif
if(param.verbose)
print_stat(rd,fr,frameNum,xfermem_get_usedspace(buffermem),&ai);
if (!param.quiet) {
/*
* This formula seems to work at least for
* MPEG 1.0/2.0 layer 3 streams.
*/
int secs = get_songlen(rd,fr,frameNum);
fprintf(stderr,"\n[%d:%02d] Decoding of %s finished.\n", secs / 60,
secs % 60, filename);
}
rd->close(rd);
if (intflag) {
/*
* When using TERM_CONTROL, there is 'q' to terminate a list
* of songs, so no pressing need to keep up this first second
* SIGINT hack that was too often mistaken as a bug. [dk]
*/
#if !defined(WIN32) && !defined(GENERIC)
#ifdef TERM_CONTROL
if(!param.term_ctrl)
#endif
{
gettimeofday (&now, NULL);
secdiff = (now.tv_sec - start_time.tv_sec) * 1000;
if (now.tv_usec >= start_time.tv_usec)
secdiff += (now.tv_usec - start_time.tv_usec) / 1000;
else
secdiff -= (start_time.tv_usec - now.tv_usec) / 1000;
if (secdiff < 1000)
break;
}
#endif
intflag = FALSE;
}
}
}
#ifndef NOXFERMEM
if (buffermem && param.usebuffer) {
buffer_end();
xfermem_done_writer (buffermem);
waitpid (buffer_pid, NULL, 0);
xfermem_done (buffermem);
}
else {
#endif
audio_flush(param.outmode, &ai);
free (pcm_sample);
#ifndef NOXFERMEM
}
#endif
switch(param.outmode) {
case DECODE_AUDIO:
audio_close(&ai);
break;
case DECODE_WAV:
wav_close();
break;
case DECODE_AU:
au_close();
break;
( run in 1.057 second using v1.01-cache-2.11-cpan-364913b4093 )