diff options
author | Max Horn | 2003-07-28 01:13:31 +0000 |
---|---|---|
committer | Max Horn | 2003-07-28 01:13:31 +0000 |
commit | e87bc6d89e260afd6e116c7eace991876cfa4acf (patch) | |
tree | 9366bba8ad4db9185ed499c83123feba91d15c72 /sound/rate.h | |
parent | 12d872f754b9f46e07d078bab5b41683003b6d92 (diff) | |
download | scummvm-rg350-e87bc6d89e260afd6e116c7eace991876cfa4acf.tar.gz scummvm-rg350-e87bc6d89e260afd6e116c7eace991876cfa4acf.tar.bz2 scummvm-rg350-e87bc6d89e260afd6e116c7eace991876cfa4acf.zip |
use a single converter for both channels (if input data is stereo), for improved efficency; renamed MemoryAudioInputStream -> LinearMemoryStream and use some template voodoo to make the baseclass of Input8bitSignedStream etc. variable; added (commented out) draf of WrappedMemoryStream
svn-id: r9209
Diffstat (limited to 'sound/rate.h')
-rw-r--r-- | sound/rate.h | 48 |
1 files changed, 7 insertions, 41 deletions
diff --git a/sound/rate.h b/sound/rate.h index c84e33a2ad..080107c831 100644 --- a/sound/rate.h +++ b/sound/rate.h @@ -56,17 +56,6 @@ static inline void clampedAdd(int16& a, int b) { #define st_fail error -// Resample (high quality) -int st_resample_getopts(eff_t effp, int n, const char **argv); -int st_resample_start(eff_t effp, st_rate_t inrate, st_rate_t outrate); -int st_resample_flow(eff_t effp, AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); -int st_resample_drain(eff_t effp, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); -int st_resample_stop(eff_t effp); - -// Rate (linear filter, low quality) -int st_rate_start(eff_t effp, st_rate_t inrate, st_rate_t outrate); -int st_rate_flow(eff_t effp, AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); - class RateConverter { protected: eff_struct effp; @@ -79,40 +68,17 @@ public: class LinearRateConverter : public RateConverter { public: - LinearRateConverter(st_rate_t inrate, st_rate_t outrate) { - st_rate_start(&effp, inrate, outrate); - } - virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) { - return st_rate_flow(&effp, input, obuf, osamp, vol); - } - virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) { - return (ST_SUCCESS); - } + LinearRateConverter(st_rate_t inrate, st_rate_t outrate); + virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); + virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); }; class ResampleRateConverter : public RateConverter { public: - ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality) { - // FIXME: quality is for now a nasty hack. - // Valid values are 0,1,2,3 (everything else is treated like 0 for now) - const char *arg = 0; - switch (quality) { - case 1: arg = "-qs"; break; - case 2: arg = "-q"; break; - case 3: arg = "-ql"; break; - } - st_resample_getopts(&effp, arg ? 1 : 0, &arg); - st_resample_start(&effp, inrate, outrate); - } - ~ResampleRateConverter() { - st_resample_stop(&effp); - } - virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) { - return st_resample_flow(&effp, input, obuf, osamp, vol); - } - virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) { - return st_resample_drain(&effp, obuf, osamp, vol); - } + ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality); + ~ResampleRateConverter(); + virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); + virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol); }; #endif |