X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Foggdecoder.cpp;h=cd2def8ca78d1d86488d2ceb2d15a25ce9a916e7;hb=d365c5394308740f478fbdfbb23e2c5d972f19f0;hp=d28734208d605e2c912444fe662fb3c72c6c5413;hpb=d035e638b940f25cb5d46a049a00b34dc60dc5e0;p=libs%2Fal.git diff --git a/source/oggdecoder.cpp b/source/oggdecoder.cpp index d287342..cd2def8 100644 --- a/source/oggdecoder.cpp +++ b/source/oggdecoder.cpp @@ -89,15 +89,9 @@ OggDecoder::OggDecoder(IO::Seekable &io): vorbis_info *info = ov_info(&priv->ovfile, -1); freq = info->rate; + format = create_format(2, info->channels); - size = ov_pcm_total(&priv->ovfile, 0)*info->channels*2; - - switch(info->channels) - { - case 1: format = MONO16; break; - case 2: format = STEREO16; break; - default: throw unsupported_sound(Msp::format("%d channels", info->channels)); - } + size = ov_pcm_total(&priv->ovfile, 0)*get_unit_size(format); } OggDecoder::~OggDecoder() @@ -115,9 +109,10 @@ bool OggDecoder::detect(const std::string &sig) return !sig.compare(0, sizeof(ogg_sig), ogg_sig); } -void OggDecoder::rewind() +void OggDecoder::seek(unsigned pos) { - ov_pcm_seek(&priv->ovfile, 0); + pos /= get_unit_size(format); + ov_pcm_seek(&priv->ovfile, pos); } unsigned OggDecoder::read(char *buf, unsigned len)