aboutsummaryrefslogtreecommitdiff
path: root/sound/rate.h
diff options
context:
space:
mode:
authorMax Horn2003-07-28 01:13:31 +0000
committerMax Horn2003-07-28 01:13:31 +0000
commite87bc6d89e260afd6e116c7eace991876cfa4acf (patch)
tree9366bba8ad4db9185ed499c83123feba91d15c72 /sound/rate.h
parent12d872f754b9f46e07d078bab5b41683003b6d92 (diff)
downloadscummvm-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.h48
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