/* Stop playback while seeking if buffer is involved. */ static void seekmode(mpg123_handle *mh, out123_handle *ao) { if(param.usebuffer && !stopped) { int channels = 0; int encoding = 0; int pcmframe; off_t back_samples = 0; stopped = TRUE; out123_pause(ao); mpg123_getformat(mh, NULL, &channels, &encoding); pcmframe = out123_encsize(encoding)*channels; if(pcmframe > 0) back_samples = out123_buffered(ao)/pcmframe; fprintf(stderr, "\nseeking back %"OFF_P" samples from %"OFF_P"\n" , (off_p)back_samples, (off_p)mpg123_tell(mh)); mpg123_seek(mh, -back_samples, SEEK_CUR); out123_drop(ao); fprintf(stderr, "\ndropped, now at %"OFF_P"\n" , (off_p)mpg123_tell(mh)); fprintf(stderr, "%s", MPG123_STOPPED_STRING); if(param.verbose) print_stat(mh, 0, ao); } }
void generic_sendstat (mpg123_handle *fr) { off_t current_frame, frames_left; double current_seconds, seconds_left; if(!mpg123_position(fr, 0, out123_buffered(ao), ¤t_frame, &frames_left, ¤t_seconds, &seconds_left)) generic_sendmsg("F %"OFF_P" %"OFF_P" %3.2f %3.2f", (off_p)current_frame, (off_p)frames_left, current_seconds, seconds_left); }