[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-multimedia
Subject: Re: [PATCH] resampling fix for mpeglib
From: Martin Vogt <mvogt () rhrk ! uni-kl ! de>
Date: 2000-08-24 14:53:04
[Download RAW message or body]
On Wed, Aug 23, 2000 at 10:52:28PM +0200, Stefan Westerfeld wrote:
> Hi!
>
> Here is yet-another-patch for making mpeglib resample correct in those cases
> where the samplingrate is something like 32000. The essential part here is
> not the float -> double conversion but this section:
>
I have applied it.
Martin
> // calculate how many input samples we need, then to satisfy the request
> - float wantWavSamples = ((float)samples+byteMultiplikator)*speed;
> + // use a larger amount than "really" required, to ensure that samples are
> + // available for rounding errors and interpolation
> + double wantWavSamples = (double)samples*speed+8.0;
>
> Adding 8.0 should be a pretty safe choice for covering up both: float -> int
> rounding errors here and in the actual conversion, and the fact that you need
> more than one sample to do interpolation (currently one more due to linear
> interpolation). The byteMultiplikator seems to have nothing to do with the
> problem here, so I removed it.
>
> Full patch is attached.
>
> Cu... Stefan
> --
> -* Stefan Westerfeld, stefan@space.twc.de (PGP!), Hamburg/Germany
> KDE Developer, project infos at http://space.twc.de/~stefan/kde *-
> Index: decoderBaseObject_impl.cpp
> ===================================================================
> RCS file: /home/kde/kdemultimedia/mpeglib_artsplug/decoderBaseObject_impl.cpp,v
> retrieving revision 1.9
> diff -u -r1.9 decoderBaseObject_impl.cpp
> --- decoderBaseObject_impl.cpp 2000/08/17 12:01:52 1.9
> +++ decoderBaseObject_impl.cpp 2000/08/23 20:38:17
> @@ -286,10 +286,12 @@
>
> // calculate "how fast" we consume input samples (2.0 means, we need 2
> // input samples to generate one output sample)
> - float speed = (float)wav_samplingRate / samplingRateFloat;
> + double speed = (double)wav_samplingRate / (double)samplingRateFloat;
>
> // calculate how many input samples we need, then to satisfy the request
> - float wantWavSamples = ((float)samples+byteMultiplikator)*speed;
> + // use a larger amount than "really" required, to ensure that samples are
> + // available for rounding errors and interpolation
> + double wantWavSamples = (double)samples*speed+8.0;
>
> // convert that into bytes and try to read that many bytes
> wantBytes=(int) (wantWavSamples*byteMultiplikator);
> @@ -308,7 +310,7 @@
> //haveSamples=samples;
> // calculate where we are now (as floating point position) in our
> // inputsample buffer
> - flpos += (float)haveSamples * speed;
> + flpos += (double)haveSamples * speed;
>
> // Good - so how many input samples we won't need anymore (for the
> // next request)? Skip them.
> Index: decoderBaseObject_impl.h
> ===================================================================
> RCS file: /home/kde/kdemultimedia/mpeglib_artsplug/decoderBaseObject_impl.h,v
> retrieving revision 1.4
> diff -u -r1.4 decoderBaseObject_impl.h
> --- decoderBaseObject_impl.h 2000/07/18 19:23:47 1.4
> +++ decoderBaseObject_impl.h 2000/08/23 20:38:18
> @@ -49,7 +49,7 @@
> DecoderPlugin* decoderPlugin;
> InputStream* inputStream;
> ArtsOutputStream* outputStream;
> - float flpos;
> + double flpos;
> float startTime;
> int instance;
> int lastAudioBufferSize;
_______________________________________________
Kde-multimedia mailing list
Kde-multimedia@master.kde.org
http://master.kde.org/mailman/listinfo/kde-multimedia
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic