diff options
author | Monty <xiphmont@xiph.org> | 2010-10-14 04:25:03 +0000 |
---|---|---|
committer | Monty <xiphmont@xiph.org> | 2010-10-14 04:25:03 +0000 |
commit | fcd8a58ddfcf3d9bfaa15971e244e8ecb623b08b (patch) | |
tree | 80e153a7d2b4b64893137f1f17d68f1f871bfc3c | |
parent | 44ac4c42ff8e41edac31351eb1b694c889357baf (diff) | |
download | tremor-fcd8a58ddfcf3d9bfaa15971e244e8ecb623b08b.tar.gz |
Patch iseeking example to continue if there's insufficient memory to allocate a verification buffer for excessively
large samples.
Also correct sample/time calculation to not overflow 64 bit math, again for
those excessively long samples
git-svn-id: https://svn.xiph.org/trunk/Tremor@17533 0101bb08-14d6-0310-b084-bc0e0c8e3800
-rw-r--r-- | iseeking_example.c | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/iseeking_example.c b/iseeking_example.c index 533d7bd..c98676f 100644 --- a/iseeking_example.c +++ b/iseeking_example.c @@ -60,20 +60,22 @@ void _verify(OggVorbis_File *ov, exit(1); } bread=ov_read(ov,buffer,4096,&dummy); - for(j=0;j<bread;j++){ - if(buffer[j]!=bigassbuffer[j+pos*4]){ - fprintf(stderr,"data position after seek doesn't match pcm position\n"); - - { - FILE *f=fopen("a.m","w"); - for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)buffer[j]); - fclose(f); - f=fopen("b.m","w"); - for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)bigassbuffer[j+pos*2]); - fclose(f); + if(bigassbuffer){ + for(j=0;j<bread;j++){ + if(buffer[j]!=bigassbuffer[j+pos*4]){ + fprintf(stderr,"data position after seek doesn't match pcm position\n"); + + { + FILE *f=fopen("a.m","w"); + for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)buffer[j]); + fclose(f); + f=fopen("b.m","w"); + for(j=0;j<bread;j++)fprintf(f,"%d\n",(int)bigassbuffer[j+pos*2]); + fclose(f); + } + + exit(1); } - - exit(1); } } } @@ -116,17 +118,21 @@ int main(){ pcmlength=ov_pcm_total(&ov,-1); timelength=ov_time_total(&ov,-1); bigassbuffer=malloc(pcmlength*4); /* w00t */ - i=0; - while(i<pcmlength*4){ - int ret=ov_read(&ov,bigassbuffer+i,pcmlength*4-i,&dummy); - if(ret<0)continue; - if(ret){ - i+=ret; - }else{ - pcmlength=i/4; + if(bigassbuffer){ + i=0; + while(i<pcmlength*4){ + int ret=ov_read(&ov,bigassbuffer+i,pcmlength*4-i,&dummy); + if(ret<0)continue; + if(ret){ + i+=ret; + }else{ + pcmlength=i/4; + } + fprintf(stderr,"\rloading.... [%ld left] ", + (long)(pcmlength*4-i)); } - fprintf(stderr,"\rloading.... [%ld left] ", - (long)(pcmlength*4-i)); + }else{ + fprintf(stderr,"\rfile too large to load into memory for read tests;\n\tonly verifying seek positioning...\n"); } { @@ -154,7 +160,7 @@ int main(){ (long)pcmlength); for(i=0;i<1000;i++){ - ogg_int64_t val=rand()*pcmlength/RAND_MAX; + ogg_int64_t val=(double)rand()*pcmlength/RAND_MAX; fprintf(stderr,"\r\t%d [pcm position %ld]... ",i,(long)val); ret=ov_pcm_seek_page(&ov,val); if(ret<0){ @@ -173,7 +179,7 @@ int main(){ (long)pcmlength); for(i=0;i<1000;i++){ - ogg_int64_t val=rand()*pcmlength/RAND_MAX; + ogg_int64_t val=(double)rand()*pcmlength/RAND_MAX; fprintf(stderr,"\r\t%d [pcm position %ld]... ",i,(long)val); ret=ov_pcm_seek(&ov,val); if(ret<0){ @@ -197,7 +203,7 @@ int main(){ (long)timelength); for(i=0;i<1000;i++){ - ogg_int64_t val=rand()*timelength/RAND_MAX; + ogg_int64_t val=(double)rand()*timelength/RAND_MAX; fprintf(stderr,"\r\t%d [time position %ld]... ",i,(long)val); ret=ov_time_seek_page(&ov,val); if(ret<0){ @@ -216,7 +222,7 @@ int main(){ (long)timelength); for(i=0;i<1000;i++){ - ogg_int64_t val=rand()*timelength/RAND_MAX; + ogg_int64_t val=(double)rand()*timelength/RAND_MAX; fprintf(stderr,"\r\t%d [time position %ld]... ",i,(long)val); ret=ov_time_seek(&ov,val); if(ret<0){ |