From e618ef6f0062f88d73b811b9e964827b37e9d735 Mon Sep 17 00:00:00 2001 From: Abramo Bagnara Date: Sat, 30 Dec 2000 17:20:23 +0000 Subject: [PATCH] Fixed a bug in interval printing. Added missing mmap functions. Added _try hw_params variant. --- include/pcm.h | 28 +++++++++++++------- src/pcm/interval.c | 7 ++--- src/pcm/pcm_mmap.c | 10 ++++++++ src/pcm/pcm_params.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 12 deletions(-) diff --git a/include/pcm.h b/include/pcm.h index 42ace3a8..9e38827b 100644 --- a/include/pcm.h +++ b/include/pcm.h @@ -105,6 +105,10 @@ int mask_single(const mask_t *mask); int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params); int snd_pcm_hw_param_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var); +int snd_pcm_hw_param_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int par); +int snd_pcm_hw_param_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int par); int snd_pcm_hw_param_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var, unsigned int val); int snd_pcm_hw_param_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, @@ -113,24 +117,30 @@ int snd_pcm_hw_param_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var, unsigned int val); int snd_pcm_hw_param_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var, unsigned int min, unsigned int max); -int snd_pcm_hw_param_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, - unsigned int par); -int snd_pcm_hw_param_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, - unsigned int par); int snd_pcm_hw_param_set(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var, unsigned int val); int snd_pcm_hw_param_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int var, const mask_t *mask); +int snd_pcm_hw_param_min_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val); +int snd_pcm_hw_param_max_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val); +int snd_pcm_hw_param_minmax_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int min, unsigned int max); +int snd_pcm_hw_param_set_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val); +int snd_pcm_hw_param_mask_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, const mask_t *mask); int snd_pcm_hw_param_value(const snd_pcm_hw_params_t *params, - unsigned int var); + unsigned int var); const mask_t *snd_pcm_hw_param_value_mask(const snd_pcm_hw_params_t *params, - unsigned int var); + unsigned int var); const interval_t *snd_pcm_hw_param_value_interval(const snd_pcm_hw_params_t *params, - unsigned int var); + unsigned int var); unsigned int snd_pcm_hw_param_value_min(const snd_pcm_hw_params_t *params, - unsigned int var); + unsigned int var); unsigned int snd_pcm_hw_param_value_max(const snd_pcm_hw_params_t *params, - unsigned int var); + unsigned int var); int snd_pcm_hw_params_try_explain_failure(snd_pcm_t *pcm, snd_pcm_hw_params_t *fail, snd_pcm_hw_params_t *success, diff --git a/src/pcm/interval.c b/src/pcm/interval.c index 081702ef..2a5283d9 100644 --- a/src/pcm/interval.c +++ b/src/pcm/interval.c @@ -308,12 +308,13 @@ int interval_mulkdiv(interval_t *a, unsigned int k, void interval_print(const interval_t *i, FILE *fp) { - if (interval_single(i)) { + if (interval_empty(i)) + fprintf(fp, "NONE"); + else if (interval_single(i)) fprintf(fp, "%u", interval_value(i)); - } else { + else fprintf(fp, "%c%u %u%c", i->openmin ? '(' : '[', i->min, i->max, i->openmax ? ')' : ']'); - } } diff --git a/src/pcm/pcm_mmap.c b/src/pcm/pcm_mmap.c index 5c11ce4b..0ade84ab 100644 --- a/src/pcm/pcm_mmap.c +++ b/src/pcm/pcm_mmap.c @@ -34,6 +34,16 @@ #endif +const snd_pcm_channel_area_t *snd_pcm_mmap_running_areas(snd_pcm_t *pcm) +{ + return pcm->running_areas; +} + +const snd_pcm_channel_area_t *snd_pcm_mmap_stopped_areas(snd_pcm_t *pcm) +{ + return pcm->stopped_areas; +} + const snd_pcm_channel_area_t *snd_pcm_mmap_areas(snd_pcm_t *pcm) { if (pcm->stopped_areas && diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c index 879a4968..ba58a677 100644 --- a/src/pcm/pcm_params.c +++ b/src/pcm/pcm_params.c @@ -308,6 +308,18 @@ int snd_pcm_hw_param_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, return snd_pcm_hw_param_value_min(params, var); } +int snd_pcm_hw_param_min_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val) +{ + snd_pcm_hw_params_t save; + int err; + save = *params; + err = snd_pcm_hw_param_min(pcm, params, var, val); + if (err < 0) + *params = save; + return err; +} + int _snd_pcm_hw_param_max(snd_pcm_hw_params_t *params, int hw, unsigned int var, unsigned int val) { @@ -347,6 +359,18 @@ int snd_pcm_hw_param_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, return snd_pcm_hw_param_value_max(params, var); } +int snd_pcm_hw_param_max_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val) +{ + snd_pcm_hw_params_t save; + int err; + save = *params; + err = snd_pcm_hw_param_max(pcm, params, var, val); + if (err < 0) + *params = save; + return err; +} + int _snd_pcm_hw_param_minmax(snd_pcm_hw_params_t *params, int hw, unsigned int var, unsigned int min, unsigned int max) @@ -409,6 +433,19 @@ int snd_pcm_hw_param_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, return 0; } +int snd_pcm_hw_param_minmax_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, + unsigned int min, unsigned int max) +{ + snd_pcm_hw_params_t save; + int err; + save = *params; + err = snd_pcm_hw_param_minmax(pcm, params, var, min, max); + if (err < 0) + *params = save; + return err; +} + int _snd_pcm_hw_param_set(snd_pcm_hw_params_t *params, int hw, unsigned int var, unsigned int val) { @@ -448,6 +485,18 @@ int snd_pcm_hw_param_set(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, return snd_pcm_hw_param_value(params, var); } +int snd_pcm_hw_param_set_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, unsigned int val) +{ + snd_pcm_hw_params_t save; + int err; + save = *params; + err = snd_pcm_hw_param_set(pcm, params, var, val); + if (err < 0) + *params = save; + return err; +} + int _snd_pcm_hw_param_mask(snd_pcm_hw_params_t *params, int hw, unsigned int var, const mask_t *val) { @@ -484,6 +533,18 @@ int snd_pcm_hw_param_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, return 0; } +int snd_pcm_hw_param_mask_try(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, + unsigned int var, const mask_t *val) +{ + snd_pcm_hw_params_t save; + int err; + save = *params; + err = snd_pcm_hw_param_mask(pcm, params, var, val); + if (err < 0) + *params = save; + return err; +} + /* Inside configuration space defined by PARAMS set PAR to the available value nearest to VAL. Reduce configuration space accordingly. This function cannot be called for SND_PCM_HW_PARAM_ACCESS, -- 2.47.1