diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-06-02 16:30:06 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-06-02 16:30:06 +0200 |
commit | 76e0c15ce430e4ae04d4cb14760be0bf20365500 (patch) | |
tree | 04996b4025879c192f9be5611d331d156591b31f /pph | |
parent | e79761b9a0a7e877e4abe772cefbafbed6cf115f (diff) |
Add PCM rates query support for PCM rate plugins
Follow the new PCM rate-plugin protocol to support the rate range
queries, etc.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'pph')
-rw-r--r-- | pph/rate_speexrate.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/pph/rate_speexrate.c b/pph/rate_speexrate.c index 38244b6..0a1325c 100644 --- a/pph/rate_speexrate.c +++ b/pph/rate_speexrate.c @@ -116,6 +116,26 @@ static void pcm_src_close(void *obj) free(obj); } +#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002 +static int get_supported_rates(void *obj, unsigned int *rate_min, + unsigned int *rate_max) +{ + *rate_min = *rate_max = 0; /* both unlimited */ + return 0; +} + +static void dump(void *obj, snd_output_t *out) +{ + snd_output_printf(out, "Converter: libspeex " +#ifdef USE_LIBSPEEX + "(external)" +#else + "(builtin)" +#endif + "\n"); +} +#endif + static snd_pcm_rate_ops_t pcm_src_ops = { .close = pcm_src_close, .init = pcm_src_init, @@ -125,6 +145,11 @@ static snd_pcm_rate_ops_t pcm_src_ops = { .convert_s16 = pcm_src_convert_s16, .input_frames = input_frames, .output_frames = output_frames, +#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002 + .version = SND_PCM_RATE_PLUGIN_VERSION, + .get_supported_rates = get_supported_rates, + .dump = dump, +#endif }; static int pcm_src_open(unsigned int version, void **objp, @@ -132,18 +157,24 @@ static int pcm_src_open(unsigned int version, void **objp, { struct rate_src *rate; +#if SND_PCM_RATE_PLUGIN_VERSION < 0x010002 if (version != SND_PCM_RATE_PLUGIN_VERSION) { fprintf(stderr, "Invalid rate plugin version %x\n", version); return -EINVAL; } - +#endif rate = calloc(1, sizeof(*rate)); if (! rate) return -ENOMEM; rate->quality = quality; *objp = rate; - *ops = pcm_src_ops; +#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002 + if (version == 0x010001) + memcpy(ops, &pcm_src_ops, sizeof(snd_pcm_rate_old_ops_t)); + else +#endif + *ops = pcm_src_ops; return 0; } |