18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/******************************************************************** 28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ******************************************************************** 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: illustrate seeking, and test it too 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: seeking_example.c 16329 2009-07-24 01:53:20Z xiphmont $ 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/ 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <stdlib.h> 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <stdio.h> 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "vorbis/codec.h" 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "vorbis/vorbisfile.h" 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */ 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# include <io.h> 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# include <fcntl.h> 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsvoid _verify(OggVorbis_File *ov, 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t val,ogg_int64_t pcmval,double timeval, 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t pcmlength, 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels char *bigassbuffer){ 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int j; 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long bread; 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels char buffer[4096]; 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int dummy; 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t pos; 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* verify the raw position, the pcm position and position decode */ 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(val!=-1 && ov_raw_tell(ov)<val){ 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"raw position out of tolerance: requested %ld, got %ld\n", 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)val,(long)ov_raw_tell(ov)); 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(pcmval!=-1 && ov_pcm_tell(ov)>pcmval){ 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"pcm position out of tolerance: requested %ld, got %ld\n", 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)pcmval,(long)ov_pcm_tell(ov)); 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(timeval!=-1 && ov_time_tell(ov)>timeval){ 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"time position out of tolerance: requested %f, got %f\n", 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels timeval,ov_time_tell(ov)); 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels pos=ov_pcm_tell(ov); 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(pos<0 || pos>pcmlength){ 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"pcm position out of bounds: got %ld\n",(long)pos); 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels bread=ov_read(ov,buffer,4096,1,1,1,&dummy); 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(j=0;j<bread;j++){ 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(buffer[j]!=bigassbuffer[j+pos*2]){ 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"data position after seek doesn't match pcm position\n"); 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels FILE *f=fopen("a.m","w"); 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)buffer[j]); 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fclose(f); 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels f=fopen("b.m","w"); 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)bigassbuffer[j+pos*2]); 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fclose(f); 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} 778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsint main(){ 798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels OggVorbis_File ov; 808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int i,ret; 818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t pcmlength; 828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double timelength; 838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels char *bigassbuffer; 848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int dummy; 858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */ 878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _setmode( _fileno( stdin ), _O_BINARY ); 888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* open the file/pipe on stdin */ 928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_open_callbacks(stdin,&ov,NULL,-1,OV_CALLBACKS_NOCLOSE)<0){ 938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Could not open input as an OggVorbis file.\n\n"); 948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_seekable(&ov)){ 988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* to simplify our own lives, we want to assume the whole file is 1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stereo. Verify this to avoid potentially mystifying users 1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (pissing them off is OK, just don't confuse them) */ 1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<ov.links;i++){ 1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_info *vi=ov_info(&ov,i); 1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(vi->channels!=2){ 1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Sorry; right now seeking_test can only use Vorbis files\n" 1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "that are entirely stereo.\n\n"); 1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels /* because we want to do sample-level verification that the seek 1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels does what it claimed, decode the entire file into memory */ 1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels pcmlength=ov_pcm_total(&ov,-1); 1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels timelength=ov_time_total(&ov,-1); 1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels bigassbuffer=malloc(pcmlength*2); /* w00t */ 1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels i=0; 1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels while(i<pcmlength*2){ 1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int ret=ov_read(&ov,bigassbuffer+i,pcmlength*2-i,1,1,1,&dummy); 1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Error reading file.\n"); 1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret){ 1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels i+=ret; 1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels }else{ 1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels pcmlength=i/2; 1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\rloading.... [%ld left] ", 1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)(pcmlength*2-i)); 1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t length=ov.end; 1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\rtesting raw seeking to random places in %ld bytes....\n", 1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)length); 1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<1000;i++){ 1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t val=(double)rand()/RAND_MAX*length; 1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r\t%d [raw position %ld]... ",i,(long)val); 1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ret=ov_raw_seek(&ov,val); 1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"seek failed: %d\n",ret); 1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _verify(&ov,val,-1,-1.,pcmlength,bigassbuffer); 1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r"); 1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"testing pcm page seeking to random places in %ld samples....\n", 1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)pcmlength); 1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<1000;i++){ 1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t val=(double)rand()/RAND_MAX*pcmlength; 1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r\t%d [pcm position %ld]... ",i,(long)val); 1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ret=ov_pcm_seek_page(&ov,val); 1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"seek failed: %d\n",ret); 1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _verify(&ov,-1,val,-1.,pcmlength,bigassbuffer); 1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r"); 1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"testing pcm exact seeking to random places in %ld samples....\n", 1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)pcmlength); 1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<1000;i++){ 1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ogg_int64_t val=(double)rand()/RAND_MAX*pcmlength; 1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r\t%d [pcm position %ld]... ",i,(long)val); 1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ret=ov_pcm_seek(&ov,val); 1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"seek failed: %d\n",ret); 1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_pcm_tell(&ov)!=val){ 1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Declared position didn't perfectly match request: %ld != %ld\n", 1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels (long)val,(long)ov_pcm_tell(&ov)); 1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _verify(&ov,-1,val,-1.,pcmlength,bigassbuffer); 1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r"); 1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"testing time page seeking to random places in %f seconds....\n", 1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels timelength); 1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<1000;i++){ 2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double val=(double)rand()/RAND_MAX*timelength; 2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r\t%d [time position %f]... ",i,val); 2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ret=ov_time_seek_page(&ov,val); 2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"seek failed: %d\n",ret); 2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _verify(&ov,-1,-1,val,pcmlength,bigassbuffer); 2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r"); 2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels { 2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"testing time exact seeking to random places in %f seconds....\n", 2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels timelength); 2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for(i=0;i<1000;i++){ 2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double val=(double)rand()/RAND_MAX*timelength; 2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r\t%d [time position %f]... ",i,val); 2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ret=ov_time_seek(&ov,val); 2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ret<0){ 2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"seek failed: %d\n",ret); 2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if(ov_time_tell(&ov)<val-1 || ov_time_tell(&ov)>val+1){ 2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Declared position didn't perfectly match request: %f != %f\n", 2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels val,ov_time_tell(&ov)); 2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit(1); 2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels _verify(&ov,-1,-1,val,pcmlength,bigassbuffer); 2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"\r \nOK.\n\n"); 2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels }else{ 2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fprintf(stderr,"Standard input was not seekable.\n"); 2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels } 2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ov_clear(&ov); 2458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels return 0; 2468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} 2478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 260