core: infrastructure for alternate sampling rate

New parameter to avoid resampling. BIG power savings here...

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
This commit is contained in:
Pierre-Louis Bossart 2011-08-02 18:37:27 -05:00 committed by Arun Raghavan
parent 31a9f195fa
commit 5bcfd2b630
9 changed files with 97 additions and 2 deletions

View file

@ -143,6 +143,7 @@ struct pa_core {
pa_channel_map default_channel_map;
pa_sample_spec default_sample_spec;
uint32_t alternate_sample_rate;
unsigned default_n_fragments, default_fragment_size_msec;
unsigned deferred_volume_safety_margin_usec;
int deferred_volume_extra_delay_usec;

View file

@ -368,6 +368,19 @@ int pa_modargs_get_sample_spec(pa_modargs *ma, pa_sample_spec *rss) {
return 0;
}
int pa_modargs_get_alternate_sample_rate(pa_modargs *ma, uint32_t *alternate_rate) {
pa_assert(ma);
pa_assert(alternate_rate);
if ((pa_modargs_get_value_u32(ma, "alternate_rate", alternate_rate)) < 0 ||
*alternate_rate <= 0 ||
*alternate_rate > PA_RATE_MAX ||
!((*alternate_rate % 4000 == 0) || (*alternate_rate % 11025 == 0)))
return -1;
return 0;
}
int pa_modargs_get_channel_map(pa_modargs *ma, const char *name, pa_channel_map *rmap) {
pa_channel_map map;
const char *cm;

View file

@ -58,6 +58,9 @@ structure if no channel_map is found, using pa_channel_map_init_auto() */
int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *ss, pa_channel_map *map, pa_channel_map_def_t def);
/* Return alternate sample rate from "alternate_sample_rate" parameter */
int pa_modargs_get_alternate_sample_rate(pa_modargs *ma, uint32_t *alternate_rate);
int pa_modargs_get_proplist(pa_modargs *ma, const char *name, pa_proplist *p, pa_update_mode_t m);
/* Iterate through the module argument list. The user should allocate a