[Vorbis-dev] [libvorbis] Bugfix: seek broken for large files and on pure 32 bit architectures

Erik de Castro Lopo mle+la at mega-nerd.com
Mon Mar 2 13:14:20 PST 2009


Hi all,

This has been sitting here for a while. Anyone see any obvious
prblems with this? If not, I will test it and commit it if it
seems to work ok.

Cheers,
Erik

Marcel Müller wrote:

> In file vorbisfile.c, function
> 
>    int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos)
> 
> the calculation of the approximate seek point causes an overflow for
> very large files and on pure 32 bit architectures.
> 
>    /* take a (pretty decent) guess. */
>    bisect=begin +
>      (target-begintime)*(end-begin)/(endtime-begintime) - CHUNKSIZE;
> 
> The temporary expression (target-begintime)*(end-begin) grows with the
> square of the file size. This effectively limits the file size to the
> square root of the maximum value of ogg_int64_t. In consequence the file
> is scanned from the very beginning which is pretty slow over a network.
> 
> 
> FIX:
> 
>    bisect=begin +
> (ogg_int64_t)((double)(target-begintime)*(end-begin)/(endtime-begintime))
> - CHUNKSIZE;
> 
> Since it is an approximation anyway, the calculation should be done
> using floating point arithmetics.
> 
> 
> Marcel
> 
> _______________________________________________
> Vorbis-dev mailing list
> Vorbis-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/vorbis-dev


-- 
-----------------------------------------------------------------
Erik de Castro Lopo
-----------------------------------------------------------------
Everything that I've learned about computers I have boiled
down into three principles:
  PC/Windows: You think it won't work, and it won't.
  Macintosh: You think it will work, but it won't.
  Unix: You think it won't work, but if you find the right
        guru, you can make it work.


More information about the Vorbis-dev mailing list