• Home
  • Raw
  • Download

Lines Matching full:params

2  *  PCM - Params functions
28 static void dump_hw_params(snd_pcm_hw_params_t *params, const char *type, in dump_hw_params() argument
55 snd_pcm_hw_params_dump(params, out); in dump_hw_params()
59 static inline void dump_hw_params(snd_pcm_hw_params_t *params, const char *type, in dump_hw_params() argument
81 #define hw_param_mask(params,var) \ argument
82 &((params)->masks[(var) - SND_PCM_HW_PARAM_FIRST_MASK])
84 #define hw_param_interval(params,var) \ argument
85 &((params)->intervals[(var) - SND_PCM_HW_PARAM_FIRST_INTERVAL])
90 static void _snd_pcm_hw_param_any(snd_pcm_hw_params_t *params, snd_pcm_hw_param_t var) in _snd_pcm_hw_param_any() argument
93 snd_mask_any(hw_param_mask(params, var)); in _snd_pcm_hw_param_any()
94 params->cmask |= 1 << var; in _snd_pcm_hw_param_any()
95 params->rmask |= 1 << var; in _snd_pcm_hw_param_any()
99 snd_interval_any(hw_param_interval(params, var)); in _snd_pcm_hw_param_any()
100 params->cmask |= 1 << var; in _snd_pcm_hw_param_any()
101 params->rmask |= 1 << var; in _snd_pcm_hw_param_any()
107 int snd_pcm_hw_param_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_any() argument
110 _snd_pcm_hw_param_any(params, var); in snd_pcm_hw_param_any()
111 return snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_any()
114 void _snd_pcm_hw_params_any(snd_pcm_hw_params_t *params) in _snd_pcm_hw_params_any() argument
117 memset(params, 0, sizeof(*params)); in _snd_pcm_hw_params_any()
119 _snd_pcm_hw_param_any(params, k); in _snd_pcm_hw_params_any()
121 _snd_pcm_hw_param_any(params, k); in _snd_pcm_hw_params_any()
122 params->rmask = ~0U; in _snd_pcm_hw_params_any()
123 params->cmask = 0; in _snd_pcm_hw_params_any()
124 params->info = ~0U; in _snd_pcm_hw_params_any()
128 defined by PARAMS. Return -EINVAL otherwise
130 int snd_pcm_hw_param_get(const snd_pcm_hw_params_t *params, snd_pcm_hw_param_t var, in snd_pcm_hw_param_get() argument
134 const snd_mask_t *mask = hw_param_mask_c(params, var); in snd_pcm_hw_param_get()
143 const snd_interval_t *i = hw_param_interval_c(params, var); in snd_pcm_hw_param_get()
157 int snd_pcm_hw_param_get_min(const snd_pcm_hw_params_t *params, snd_pcm_hw_param_t var, in snd_pcm_hw_param_get_min() argument
161 const snd_mask_t *m = hw_param_mask_c(params, var); in snd_pcm_hw_param_get_min()
169 const snd_interval_t *i = hw_param_interval_c(params, var); in snd_pcm_hw_param_get_min()
182 int snd_pcm_hw_param_get_max(const snd_pcm_hw_params_t *params, snd_pcm_hw_param_t var, in snd_pcm_hw_param_get_max() argument
186 const snd_mask_t *m = hw_param_mask_c(params, var); in snd_pcm_hw_param_get_max()
194 const snd_interval_t *i = hw_param_interval_c(params, var); in snd_pcm_hw_param_get_max()
209 const snd_mask_t *snd_pcm_hw_param_get_mask(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_get_mask() argument
213 return hw_param_mask_c(params, var); in snd_pcm_hw_param_get_mask()
219 const snd_interval_t *snd_pcm_hw_param_get_interval(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_get_interval() argument
223 return hw_param_interval_c(params, var); in snd_pcm_hw_param_get_interval()
228 int _snd_pcm_hw_param_set_interval(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_interval() argument
234 changed = snd_interval_refine(hw_param_interval(params, var), val); in _snd_pcm_hw_param_set_interval()
236 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_interval()
237 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_interval()
242 void _snd_pcm_hw_param_set_empty(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_empty() argument
246 snd_mask_none(hw_param_mask(params, var)); in _snd_pcm_hw_param_set_empty()
247 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_empty()
248 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_empty()
250 snd_interval_none(hw_param_interval(params, var)); in _snd_pcm_hw_param_set_empty()
251 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_empty()
252 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_empty()
258 static int _snd_pcm_hw_param_set_integer(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_integer() argument
263 changed = snd_interval_setinteger(hw_param_interval(params, var)); in _snd_pcm_hw_param_set_integer()
265 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_integer()
266 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_integer()
271 /* Inside configuration space defined by PARAMS remove from PAR all
276 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_integer() argument
286 save = *params; in snd_pcm_hw_param_set_integer()
289 save = *params; in snd_pcm_hw_param_set_integer()
290 params = &save; in snd_pcm_hw_param_set_integer()
296 err = _snd_pcm_hw_param_set_integer(params, var); in snd_pcm_hw_param_set_integer()
299 if (params->rmask) { in snd_pcm_hw_param_set_integer()
300 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_integer()
307 *params = save; in snd_pcm_hw_param_set_integer()
311 static int _snd_pcm_hw_param_set_first(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_first() argument
316 changed = snd_mask_refine_first(hw_param_mask(params, var)); in _snd_pcm_hw_param_set_first()
318 changed = snd_interval_refine_first(hw_param_interval(params, var)); in _snd_pcm_hw_param_set_first()
324 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_first()
325 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_first()
331 /* Inside configuration space defined by PARAMS remove from PAR all
336 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_first() argument
342 err = _snd_pcm_hw_param_set_first(params, var); in snd_pcm_hw_param_set_first()
345 if (params->rmask) { in snd_pcm_hw_param_set_first()
346 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_first()
350 return snd_pcm_hw_param_get(params, var, rval, dir); in snd_pcm_hw_param_set_first()
353 static int _snd_pcm_hw_param_set_last(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_last() argument
358 changed = snd_mask_refine_last(hw_param_mask(params, var)); in _snd_pcm_hw_param_set_last()
360 changed = snd_interval_refine_last(hw_param_interval(params, var)); in _snd_pcm_hw_param_set_last()
366 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_last()
367 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_last()
373 /* Inside configuration space defined by PARAMS remove from PAR all
378 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_last() argument
384 err = _snd_pcm_hw_param_set_last(params, var); in snd_pcm_hw_param_set_last()
387 if (params->rmask) { in snd_pcm_hw_param_set_last()
388 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_last()
392 return snd_pcm_hw_param_get(params, var, rval, dir); in snd_pcm_hw_param_set_last()
395 int _snd_pcm_hw_param_set_min(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_min() argument
411 changed = snd_mask_refine_min(hw_param_mask(params, var), val + !!openmin); in _snd_pcm_hw_param_set_min()
413 changed = snd_interval_refine_min(hw_param_interval(params, var), val, openmin); in _snd_pcm_hw_param_set_min()
419 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_min()
420 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_min()
425 /* Inside configuration space defined by PARAMS remove from PAR all
429 int snd_pcm_hw_param_set_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_min() argument
439 save = *params; in snd_pcm_hw_param_set_min()
442 save = *params; in snd_pcm_hw_param_set_min()
443 params = &save; in snd_pcm_hw_param_set_min()
449 err = _snd_pcm_hw_param_set_min(params, var, *val, dir ? *dir : 0); in snd_pcm_hw_param_set_min()
452 if ((mode != SND_TEST || hw_is_interval(var)) && params->rmask) { in snd_pcm_hw_param_set_min()
453 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_min()
456 if (snd_pcm_hw_param_empty(params, var)) { in snd_pcm_hw_param_set_min()
461 return snd_pcm_hw_param_get_min(params, var, val, dir); in snd_pcm_hw_param_set_min()
464 *params = save; in snd_pcm_hw_param_set_min()
466 dump_hw_params(params, "set_min", var, *val, err); in snd_pcm_hw_param_set_min()
470 int _snd_pcm_hw_param_set_max(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_max() argument
485 snd_mask_none(hw_param_mask(params, var)); in _snd_pcm_hw_param_set_max()
488 changed = snd_mask_refine_max(hw_param_mask(params, var), val - !!openmax); in _snd_pcm_hw_param_set_max()
490 changed = snd_interval_refine_max(hw_param_interval(params, var), val, openmax); in _snd_pcm_hw_param_set_max()
496 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_max()
497 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_max()
502 /* Inside configuration space defined by PARAMS remove from PAR all
506 int snd_pcm_hw_param_set_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_max() argument
516 save = *params; in snd_pcm_hw_param_set_max()
519 save = *params; in snd_pcm_hw_param_set_max()
520 params = &save; in snd_pcm_hw_param_set_max()
526 err = _snd_pcm_hw_param_set_max(params, var, *val, dir ? *dir : 0); in snd_pcm_hw_param_set_max()
529 if ((mode != SND_TEST || hw_is_interval(var)) && params->rmask) { in snd_pcm_hw_param_set_max()
530 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_max()
533 if (snd_pcm_hw_param_empty(params, var)) { in snd_pcm_hw_param_set_max()
538 return snd_pcm_hw_param_get_max(params, var, val, dir); in snd_pcm_hw_param_set_max()
541 *params = save; in snd_pcm_hw_param_set_max()
543 dump_hw_params(params, "set_max", var, *val, err); in snd_pcm_hw_param_set_max()
547 int _snd_pcm_hw_param_set_minmax(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_minmax() argument
573 snd_mask_t *mask = hw_param_mask(params, var); in _snd_pcm_hw_param_set_minmax()
591 snd_interval_t *i = hw_param_interval(params, var); in _snd_pcm_hw_param_set_minmax()
607 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_minmax()
608 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_minmax()
613 /* Inside configuration space defined by PARAMS remove from PAR all
617 int snd_pcm_hw_param_set_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_minmax() argument
629 save = *params; in snd_pcm_hw_param_set_minmax()
632 save = *params; in snd_pcm_hw_param_set_minmax()
633 params = &save; in snd_pcm_hw_param_set_minmax()
639 err = _snd_pcm_hw_param_set_minmax(params, var, in snd_pcm_hw_param_set_minmax()
644 if ((mode != SND_TEST || hw_is_interval(var)) && params->rmask) { in snd_pcm_hw_param_set_minmax()
645 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_minmax()
649 err = snd_pcm_hw_param_get_min(params, var, min, mindir); in snd_pcm_hw_param_set_minmax()
652 return snd_pcm_hw_param_get_max(params, var, max, maxdir); in snd_pcm_hw_param_set_minmax()
655 *params = save; in snd_pcm_hw_param_set_minmax()
657 dump_hw_params(params, "set_minmax", var, *min, err); in snd_pcm_hw_param_set_minmax()
661 int _snd_pcm_hw_param_set(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set() argument
666 snd_mask_t *m = hw_param_mask(params, var); in _snd_pcm_hw_param_set()
675 changed = snd_mask_refine_set(hw_param_mask(params, var), val); in _snd_pcm_hw_param_set()
678 snd_interval_t *i = hw_param_interval(params, var); in _snd_pcm_hw_param_set()
704 params->cmask |= 1 << var; in _snd_pcm_hw_param_set()
705 params->rmask |= 1 << var; in _snd_pcm_hw_param_set()
710 /* Inside configuration space defined by PARAMS remove from PAR all
714 int snd_pcm_hw_param_set(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set() argument
724 save = *params; in snd_pcm_hw_param_set()
727 save = *params; in snd_pcm_hw_param_set()
728 params = &save; in snd_pcm_hw_param_set()
734 err = _snd_pcm_hw_param_set(params, var, val, dir); in snd_pcm_hw_param_set()
737 if ((mode != SND_TEST || hw_is_interval(var)) && params->rmask) { in snd_pcm_hw_param_set()
738 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set()
745 *params = save; in snd_pcm_hw_param_set()
747 dump_hw_params(params, "set", var, val, err); in snd_pcm_hw_param_set()
751 int _snd_pcm_hw_param_set_mask(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_set_mask() argument
756 changed = snd_mask_refine(hw_param_mask(params, var), val); in _snd_pcm_hw_param_set_mask()
758 params->cmask |= 1 << var; in _snd_pcm_hw_param_set_mask()
759 params->rmask |= 1 << var; in _snd_pcm_hw_param_set_mask()
764 /* Inside configuration space defined by PARAMS remove from PAR all values
771 int snd_pcm_hw_param_set_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_mask() argument
781 save = *params; in snd_pcm_hw_param_set_mask()
784 save = *params; in snd_pcm_hw_param_set_mask()
785 params = &save; in snd_pcm_hw_param_set_mask()
791 err = _snd_pcm_hw_param_set_mask(params, var, val); in snd_pcm_hw_param_set_mask()
794 if (mode != SND_TEST && params->rmask) { in snd_pcm_hw_param_set_mask()
795 err = snd_pcm_hw_refine(pcm, params); in snd_pcm_hw_param_set_mask()
802 *params = save; in snd_pcm_hw_param_set_mask()
806 /* Inside configuration space defined by PARAMS set PAR to the available value
812 int snd_pcm_hw_param_set_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_near() argument
837 save = *params; in snd_pcm_hw_param_set_near()
839 err = snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, var, &min, &mindir); in snd_pcm_hw_param_set_near()
841 i = hw_param_interval(params, var); in snd_pcm_hw_param_set_near()
843 err = snd_pcm_hw_param_get_min(params, var, val, dir); in snd_pcm_hw_param_set_near()
845 dump_hw_params(params, "set_near", var, *val, err); in snd_pcm_hw_param_set_near()
858 *params = params1; in snd_pcm_hw_param_set_near()
862 *params = save; in snd_pcm_hw_param_set_near()
863 err = snd_pcm_hw_param_set_max(pcm, params, SND_CHANGE, var, &max, &maxdir); in snd_pcm_hw_param_set_near()
865 dump_hw_params(params, "set_near", var, *val, err); in snd_pcm_hw_param_set_near()
872 err = snd_pcm_hw_param_set_last(pcm, params, var, val, dir); in snd_pcm_hw_param_set_near()
874 err = snd_pcm_hw_param_set_first(pcm, params, var, val, dir); in snd_pcm_hw_param_set_near()
876 dump_hw_params(params, "set_near", var, *val, err); in snd_pcm_hw_param_set_near()
881 /* Inside configuration space defined by PARAMS set PAR to the available value
889 int snd_pcm_hw_param_set_next(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
920 save = *params;
922 (err = snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, var, &min, &mindir)) >= 0) {
931 *params = params1;
937 *params = save;
938 err = snd_pcm_hw_param_set_max(pcm, params, SND_CHANGE, var, &max, &maxdir);
945 v = snd_pcm_hw_param_set_last(pcm, params, var, dir);
947 v = snd_pcm_hw_param_set_first(pcm, params, var, dir);
954 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_set_near_minmax() argument
962 return snd_pcm_hw_param_set_near(pcm, params, var, &min, mindir); in snd_pcm_hw_param_set_near_minmax()
963 tmp = *params; in snd_pcm_hw_param_set_near_minmax()
968 tmp = *params; in snd_pcm_hw_param_set_near_minmax()
974 err = snd_pcm_hw_param_set_minmax(pcm, params, SND_CHANGE, var, &min, mindir, in snd_pcm_hw_param_set_near_minmax()
982 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_refine_near() argument
993 if ((err = snd_pcm_hw_param_set_near_minmax(pcm, params, var, in snd_pcm_hw_param_refine_near()
1000 snd_pcm_hw_params_t *params, in snd_pcm_hw_param_refine_multiple() argument
1005 const snd_interval_t *st = hw_param_interval_c(params, var); in snd_pcm_hw_param_refine_multiple()
1013 if (! snd_pcm_hw_param_set(pcm, params, SND_TRY, var, cur, 0)) in snd_pcm_hw_param_refine_multiple()
1022 return snd_pcm_hw_param_refine_near(pcm, params, var, src); in snd_pcm_hw_param_refine_multiple()
1027 int snd_pcm_hw_param_empty(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_empty() argument
1031 return snd_mask_empty(hw_param_mask_c(params, var)); in snd_pcm_hw_param_empty()
1033 return snd_interval_empty(hw_param_interval_c(params, var)); in snd_pcm_hw_param_empty()
1038 int snd_pcm_hw_param_always_eq(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_always_eq() argument
1043 return snd_mask_always_eq(hw_param_mask_c(params, var), in snd_pcm_hw_param_always_eq()
1046 return snd_interval_always_eq(hw_param_interval_c(params, var), in snd_pcm_hw_param_always_eq()
1052 int snd_pcm_hw_param_never_eq(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_never_eq() argument
1057 return snd_mask_never_eq(hw_param_mask_c(params, var), in snd_pcm_hw_param_never_eq()
1060 return snd_interval_never_eq(hw_param_interval_c(params, var), in snd_pcm_hw_param_never_eq()
1070 /* Choose one configuration from configuration space defined by PARAMS
1081 static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) in snd_pcm_hw_params_choose() argument
1088 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_params_choose()
1091 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_ACCESS, NULL, 0); in snd_pcm_hw_params_choose()
1094 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_FORMAT, NULL, 0); in snd_pcm_hw_params_choose()
1097 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_SUBFORMAT, NULL, 0); in snd_pcm_hw_params_choose()
1100 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_CHANNELS, NULL, 0); in snd_pcm_hw_params_choose()
1103 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_RATE, NULL, 0); in snd_pcm_hw_params_choose()
1109 err = snd_pcm_hw_param_get_min(params, SND_PCM_HW_PARAM_PERIOD_TIME, &min, &dir); in snd_pcm_hw_params_choose()
1111 err = snd_pcm_hw_param_get_max(params, SND_PCM_HW_PARAM_PERIOD_TIME, &max, &dir); in snd_pcm_hw_params_choose()
1115 snd_pcm_hw_param_set_min(pcm, params, SND_CHANGE, SND_PCM_HW_PARAM_PERIOD_TIME, &min, &dir); in snd_pcm_hw_params_choose()
1120 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0); in snd_pcm_hw_params_choose()
1123 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_SIZE, NULL, 0); in snd_pcm_hw_params_choose()
1126 err = snd_pcm_hw_param_set_last(pcm, params, SND_PCM_HW_PARAM_BUFFER_SIZE, NULL, 0); in snd_pcm_hw_params_choose()
1131 err = snd_pcm_hw_param_set_last(pcm, params, SND_PCM_HW_PARAM_BUFFER_SIZE, NULL, 0); in snd_pcm_hw_params_choose()
1134 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_SIZE, NULL, 0); in snd_pcm_hw_params_choose()
1137 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0); in snd_pcm_hw_params_choose()
1141 err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_TICK_TIME, NULL, 0); in snd_pcm_hw_params_choose()
1146 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_params_choose()
1153 static unsigned int snd_pcm_hw_param_count(const snd_pcm_hw_params_t *params,
1157 const snd_mask_t *mask = hw_param_mask_c(params, var);
1161 const snd_interval_t *i = hw_param_interval_c(params, var);
1169 int _snd_pcm_hw_param_refine(snd_pcm_hw_params_t *params, in _snd_pcm_hw_param_refine() argument
1175 snd_mask_t *d = hw_param_mask(params, var); in _snd_pcm_hw_param_refine()
1179 snd_interval_t *d = hw_param_interval(params, var); in _snd_pcm_hw_param_refine()
1185 params->cmask |= 1 << var; in _snd_pcm_hw_param_refine()
1186 params->rmask |= 1 << var; in _snd_pcm_hw_param_refine()
1192 static void _snd_pcm_hw_param_copy(snd_pcm_hw_params_t *params, snd_pcm_hw_param_t var,
1196 snd_mask_t *d = hw_param_mask(params, var);
1199 params->cmask |= 1 << var;
1200 params->rmask |= 1 << var;
1204 snd_interval_t *d = hw_param_interval(params, var);
1207 params->cmask |= 1 << var;
1208 params->rmask |= 1 << var;
1215 void snd_pcm_hw_param_dump(const snd_pcm_hw_params_t *params, in snd_pcm_hw_param_dump() argument
1219 const snd_mask_t *mask = hw_param_mask_c(params, var); in snd_pcm_hw_param_dump()
1253 snd_interval_print(hw_param_interval_c(params, var), out); in snd_pcm_hw_param_dump()
1290 int (*choose_param)(const snd_pcm_hw_params_t *params,
1293 int (*next_value)(snd_pcm_hw_params_t *params,
1298 int (*min_badness)(const snd_pcm_hw_params_t *params,
1312 int (*next_value)(snd_pcm_hw_params_t *params,
1317 unsigned int (*min_badness)(const snd_pcm_hw_params_t *params,
1336 int snd_pcm_hw_params_strategy(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
1345 int badness = strategy->min_badness(params, badness_max, pcm, strategy);
1349 snd_pcm_hw_params_dump(params, stdout);
1355 var = strategy->choose_param(params, pcm, strategy);
1361 params1 = *params;
1368 *params = params1;
1379 *params = best_params;
1394 int snd_pcm_hw_strategy_simple_choose_param(const snd_pcm_hw_params_t *params,
1408 choices = snd_pcm_hw_param_count(params, var);
1423 int snd_pcm_hw_strategy_simple_next_value(snd_pcm_hw_params_t *params,
1431 return pars[var].next_value(params, var, value, dir, pcm, &pars[var]);
1435 int snd_pcm_hw_strategy_simple_min_badness(const snd_pcm_hw_params_t *params,
1447 b = pars[var].min_badness(params, var, pcm, &pars[var]);
1462 unsigned int snd_pcm_hw_strategy_simple_near_min_badness(const snd_pcm_hw_params_t *params,
1468 snd_pcm_hw_params_t params1 = *params;
1478 int snd_pcm_hw_strategy_simple_near_next_value(snd_pcm_hw_params_t *params,
1487 return snd_pcm_hw_param_set_near(pcm, params, var, p->best, dir);
1489 return snd_pcm_hw_param_set_next(pcm, params, var, p->best, 0, value, dir);
1499 unsigned int snd_pcm_hw_strategy_simple_choices_min_badness(const snd_pcm_hw_params_t *params,
1507 …if (snd_pcm_hw_param_set(pcm, (snd_pcm_hw_params_t *) params, SND_TEST, var, p->choices[k].value, …
1514 int snd_pcm_hw_strategy_simple_choices_next_value(snd_pcm_hw_params_t *params,
1532 int err = snd_pcm_hw_param_set(pcm, params, SND_TRY, var, v, 0);
1688 typedef int (*snd_pcm_hw_rule_func_t)(snd_pcm_hw_params_t *params,
1698 static int snd_pcm_hw_rule_mul(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_mul() argument
1702 snd_interval_mul(hw_param_interval_c(params, rule->deps[0]), in snd_pcm_hw_rule_mul()
1703 hw_param_interval_c(params, rule->deps[1]), &t); in snd_pcm_hw_rule_mul()
1704 return snd_interval_refine(hw_param_interval(params, rule->var), &t); in snd_pcm_hw_rule_mul()
1707 static int snd_pcm_hw_rule_div(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_div() argument
1711 snd_interval_div(hw_param_interval_c(params, rule->deps[0]), in snd_pcm_hw_rule_div()
1712 hw_param_interval_c(params, rule->deps[1]), &t); in snd_pcm_hw_rule_div()
1713 return snd_interval_refine(hw_param_interval(params, rule->var), &t); in snd_pcm_hw_rule_div()
1716 static int snd_pcm_hw_rule_muldivk(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_muldivk() argument
1720 snd_interval_muldivk(hw_param_interval_c(params, rule->deps[0]), in snd_pcm_hw_rule_muldivk()
1721 hw_param_interval_c(params, rule->deps[1]), in snd_pcm_hw_rule_muldivk()
1723 return snd_interval_refine(hw_param_interval(params, rule->var), &t); in snd_pcm_hw_rule_muldivk()
1726 static int snd_pcm_hw_rule_mulkdiv(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_mulkdiv() argument
1730 snd_interval_mulkdiv(hw_param_interval_c(params, rule->deps[0]), in snd_pcm_hw_rule_mulkdiv()
1732 hw_param_interval_c(params, rule->deps[1]), &t); in snd_pcm_hw_rule_mulkdiv()
1733 return snd_interval_refine(hw_param_interval(params, rule->var), &t); in snd_pcm_hw_rule_mulkdiv()
1736 static int snd_pcm_hw_rule_format(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_format() argument
1741 snd_mask_t *mask = hw_param_mask(params, rule->var); in snd_pcm_hw_rule_format()
1742 snd_interval_t *i = hw_param_interval(params, rule->deps[0]); in snd_pcm_hw_rule_format()
1761 static int snd_pcm_hw_rule_sample_bits(snd_pcm_hw_params_t *params, in snd_pcm_hw_rule_sample_bits() argument
1766 snd_interval_t *i = hw_param_interval(params, rule->var); in snd_pcm_hw_rule_sample_bits()
1767 snd_mask_t *mask = hw_param_mask(params, rule->deps[0]); in snd_pcm_hw_rule_sample_bits()
2074 int snd_pcm_hw_refine_soft(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params) in snd_pcm_hw_refine_soft() argument
2087 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_soft()
2091 if (!(params->rmask & (1 << k))) in snd_pcm_hw_refine_soft()
2093 changed = snd_mask_refine(hw_param_mask(params, k), in snd_pcm_hw_refine_soft()
2096 params->cmask |= 1 << k; in snd_pcm_hw_refine_soft()
2102 if (!(params->rmask & (1 << k))) in snd_pcm_hw_refine_soft()
2104 changed = snd_interval_refine(hw_param_interval(params, k), in snd_pcm_hw_refine_soft()
2107 params->cmask |= 1 << k; in snd_pcm_hw_refine_soft()
2115 vstamps[k] = (params->rmask & (1 << k)) ? 1 : 0; in snd_pcm_hw_refine_soft()
2134 snd_pcm_hw_param_dump(params, r->var, log); in snd_pcm_hw_refine_soft()
2138 changed = r->func(params, r); in snd_pcm_hw_refine_soft()
2141 snd_pcm_hw_param_dump(params, r->var, log); in snd_pcm_hw_refine_soft()
2144 snd_pcm_hw_param_dump(params, r->deps[d], log); in snd_pcm_hw_refine_soft()
2150 params->cmask |= 1 << r->var; in snd_pcm_hw_refine_soft()
2159 if (!params->msbits) { in snd_pcm_hw_refine_soft()
2160 i = hw_param_interval(params, SND_PCM_HW_PARAM_SAMPLE_BITS); in snd_pcm_hw_refine_soft()
2162 params->msbits = snd_interval_value(i); in snd_pcm_hw_refine_soft()
2163 m = hw_param_mask_c(params, SNDRV_PCM_HW_PARAM_FORMAT); in snd_pcm_hw_refine_soft()
2166 params->msbits = snd_pcm_format_width(format); in snd_pcm_hw_refine_soft()
2170 if (!params->rate_den) { in snd_pcm_hw_refine_soft()
2171 i = hw_param_interval(params, SND_PCM_HW_PARAM_RATE); in snd_pcm_hw_refine_soft()
2173 params->rate_num = snd_interval_value(i); in snd_pcm_hw_refine_soft()
2174 params->rate_den = 1; in snd_pcm_hw_refine_soft()
2177 params->rmask = 0; in snd_pcm_hw_refine_soft()
2182 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_soft()
2188 int _snd_pcm_hw_params_refine(snd_pcm_hw_params_t *params, in _snd_pcm_hw_params_refine() argument
2197 changed = _snd_pcm_hw_param_refine(params, k, src); in _snd_pcm_hw_params_refine()
2201 params->info &= src->info; in _snd_pcm_hw_params_refine()
2202 params->flags = src->flags; /* propagate all flags to slave */ in _snd_pcm_hw_params_refine()
2206 int snd_pcm_hw_refine_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_refine_slave() argument
2208 snd_pcm_hw_params_t *params), in snd_pcm_hw_refine_slave() argument
2210 snd_pcm_hw_params_t *params, in snd_pcm_hw_refine_slave()
2213 snd_pcm_hw_params_t *params), in snd_pcm_hw_refine_slave()
2215 snd_pcm_hw_params_t *params, in snd_pcm_hw_refine_slave()
2230 err = cprepare(pcm, params); in snd_pcm_hw_refine_slave()
2242 cmask = params->cmask; in snd_pcm_hw_refine_slave()
2243 params->cmask = 0; in snd_pcm_hw_refine_slave()
2246 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_slave()
2250 err = schange(pcm, params, &sparams); in snd_pcm_hw_refine_slave()
2254 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_slave()
2262 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_slave()
2266 cchange(pcm, params, &sparams); in snd_pcm_hw_refine_slave()
2272 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine_slave()
2276 cchange(pcm, params, &sparams); in snd_pcm_hw_refine_slave()
2282 err = cchange(pcm, params, &sparams); in snd_pcm_hw_refine_slave()
2288 err = snd_pcm_hw_refine_soft(pcm, params); in snd_pcm_hw_refine_slave()
2289 changed = params->cmask; in snd_pcm_hw_refine_slave()
2290 params->cmask |= cmask; in snd_pcm_hw_refine_slave()
2304 int snd_pcm_hw_params_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, in snd_pcm_hw_params_slave() argument
2306 snd_pcm_hw_params_t *params, in snd_pcm_hw_params_slave()
2309 snd_pcm_hw_params_t *params), in snd_pcm_hw_params_slave() argument
2311 snd_pcm_hw_params_t *params, in snd_pcm_hw_params_slave()
2322 err = schange(pcm, params, &slave_params); in snd_pcm_hw_params_slave()
2327 cchange(pcm, params, &slave_params); in snd_pcm_hw_params_slave()
2331 static int snd_pcm_sw_params_default(snd_pcm_t *pcm, snd_pcm_sw_params_t *params) in snd_pcm_sw_params_default() argument
2333 assert(pcm && params); in snd_pcm_sw_params_default()
2335 params->proto = SNDRV_PCM_VERSION; in snd_pcm_sw_params_default()
2336 params->tstamp_mode = SND_PCM_TSTAMP_NONE; in snd_pcm_sw_params_default()
2337 params->tstamp_type = pcm->tstamp_type; in snd_pcm_sw_params_default()
2338 params->period_step = 1; in snd_pcm_sw_params_default()
2339 params->sleep_min = 0; in snd_pcm_sw_params_default()
2340 params->avail_min = pcm->period_size; in snd_pcm_sw_params_default()
2341 params->xfer_align = 1; in snd_pcm_sw_params_default()
2342 params->start_threshold = 1; in snd_pcm_sw_params_default()
2343 params->stop_threshold = pcm->buffer_size; in snd_pcm_sw_params_default()
2344 params->silence_threshold = 0; in snd_pcm_sw_params_default()
2345 params->silence_size = 0; in snd_pcm_sw_params_default()
2346 params->boundary = pcm->buffer_size; in snd_pcm_sw_params_default()
2348 if (params->boundary == 0) in snd_pcm_sw_params_default()
2350 while (params->boundary * 2 <= LONG_MAX - pcm->buffer_size) in snd_pcm_sw_params_default()
2351 params->boundary *= 2; in snd_pcm_sw_params_default()
2359 int snd_pcm_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) in snd_pcm_hw_refine() argument
2366 assert(pcm && params); in snd_pcm_hw_refine()
2369 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine()
2372 res = pcm->ops->hw_refine(pcm->op_arg, params); in snd_pcm_hw_refine()
2377 snd_pcm_hw_params_dump(params, log); in snd_pcm_hw_refine()
2384 space defined by PARAMS.
2395 int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) in _snd_pcm_hw_params_internal() argument
2400 err = snd_pcm_hw_refine(pcm, params); in _snd_pcm_hw_params_internal()
2403 snd_pcm_hw_params_choose(pcm, params); in _snd_pcm_hw_params_internal()
2410 err = pcm->ops->hw_params(pcm->op_arg, params); in _snd_pcm_hw_params_internal()
2417 INTERNAL(snd_pcm_hw_params_get_access)(params, &pcm->access); in _snd_pcm_hw_params_internal()
2418 INTERNAL(snd_pcm_hw_params_get_format)(params, &pcm->format); in _snd_pcm_hw_params_internal()
2419 INTERNAL(snd_pcm_hw_params_get_subformat)(params, &pcm->subformat); in _snd_pcm_hw_params_internal()
2420 INTERNAL(snd_pcm_hw_params_get_channels)(params, &pcm->channels); in _snd_pcm_hw_params_internal()
2421 INTERNAL(snd_pcm_hw_params_get_rate)(params, &pcm->rate, 0); in _snd_pcm_hw_params_internal()
2422 …snd_interval_copy(&pcm->periods, &params->intervals[SND_PCM_HW_PARAM_PERIODS - SND_PCM_HW_PARAM_FI… in _snd_pcm_hw_params_internal()
2423 …snd_interval_copy(&pcm->buffer_time, &params->intervals[SND_PCM_HW_PARAM_BUFFER_TIME - SND_PCM_HW_… in _snd_pcm_hw_params_internal()
2424 INTERNAL(snd_pcm_hw_params_get_period_time)(params, &pcm->period_time, 0); in _snd_pcm_hw_params_internal()
2425 INTERNAL(snd_pcm_hw_params_get_period_size)(params, &pcm->period_size, 0); in _snd_pcm_hw_params_internal()
2426 INTERNAL(snd_pcm_hw_params_get_buffer_size)(params, &pcm->buffer_size); in _snd_pcm_hw_params_internal()
2437 pcm->hw_flags = params->flags; in _snd_pcm_hw_params_internal()
2438 pcm->info = params->info; in _snd_pcm_hw_params_internal()
2439 pcm->msbits = params->msbits; in _snd_pcm_hw_params_internal()
2440 pcm->rate_num = params->rate_num; in _snd_pcm_hw_params_internal()
2441 pcm->rate_den = params->rate_den; in _snd_pcm_hw_params_internal()
2442 pcm->fifo_size = params->fifo_size; in _snd_pcm_hw_params_internal()
2444 /* Default sw params */ in _snd_pcm_hw_params_internal()