@@ -968,21 +968,11 @@ int snd_pcm_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params)
}
#endif
__snd_pcm_lock(pcm); /* forced lock due to pcm field change */
- err = pcm->ops->sw_params(pcm->op_arg, params);
+ err = _snd_pcm_sw_params_internal(pcm, params);
if (err < 0) {
__snd_pcm_unlock(pcm);
return err;
}
- pcm->tstamp_mode = params->tstamp_mode;
- pcm->tstamp_type = params->tstamp_type;
- pcm->period_step = params->period_step;
- pcm->avail_min = params->avail_min;
- pcm->period_event = sw_get_period_event(params);
- pcm->start_threshold = params->start_threshold;
- pcm->stop_threshold = params->stop_threshold;
- pcm->silence_threshold = params->silence_threshold;
- pcm->silence_size = params->silence_size;
- pcm->boundary = params->boundary;
__snd_pcm_unlock(pcm);
return 0;
}
@@ -661,6 +661,7 @@ static inline int muldiv_near(int a, int b, int c)
return n;
}
+int _snd_pcm_sw_params_internal(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
int snd_pcm_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
#undef _snd_pcm_hw_params
@@ -2439,3 +2439,24 @@ int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
return 0;
}
+int _snd_pcm_sw_params_internal(snd_pcm_t *pcm, snd_pcm_sw_params_t *params)
+{
+ int err;
+
+ assert(pcm && params);
+ assert(pcm->setup);
+ err = pcm->ops->sw_params(pcm->op_arg, params);
+ if (err < 0)
+ return err;
+ pcm->tstamp_mode = params->tstamp_mode;
+ pcm->tstamp_type = params->tstamp_type;
+ pcm->period_step = params->period_step;
+ pcm->avail_min = params->avail_min;
+ pcm->period_event = sw_get_period_event(params);
+ pcm->start_threshold = params->start_threshold;
+ pcm->stop_threshold = params->stop_threshold;
+ pcm->silence_threshold = params->silence_threshold;
+ pcm->silence_size = params->silence_size;
+ pcm->boundary = params->boundary;
+ return 0;
+}