* accesses to a minimum, because after a variable amount of accesses, the AC97
* controller doesn't raise the register access finished bit anymore ...
*
- * - Capture support works - basically, but after ~30s (with rates > ~20kHz)
- * ALSA stops reading captured samples from the intermediate buffer and
- * therefore a overrun happens - ATM I don't know what's wrong.
- *
* - Playback support seems to be pretty stable - no issues here.
+ * - Capture support "works" now, too. Overruns don't happen any longer so often.
+ * But there might still be some ...
*/
#include <sound/driver.h>
rec->min_multiple);
rec->mul_elapsed++;
#endif
- rec->min_periods = 0;
+ rec->min_periods = (rec->min_periods % rec->min_multiple);
snd_pcm_period_elapsed(substream);
}
}
rec->mul_elapsed_real += (rec->min_periods /
rec->min_multiple);
rec->mul_elapsed++;
-
- if (!(rec->mul_elapsed % 4)) {
- struct snd_pcm_runtime *runtime = substream->runtime;
- unsigned int appl_ptr =
- frames_to_bytes(runtime,
- (unsigned int)runtime->control->
- appl_ptr) % rec->sw_buffer_size;
- int diff = rec->sw_data - appl_ptr;
- if (diff < 0)
- diff += rec->sw_buffer_size;
- snd_printk(KERN_DEBUG
- "STAT: mul_elapsed: %d, sw_data: %u, "
- "appl_ptr (bytes): %u, diff: %d\n",
- rec->mul_elapsed, rec->sw_data, appl_ptr,
- diff);
- }
#endif
- rec->min_periods = 0;
+ rec->min_periods = (rec->min_periods % rec->min_multiple);
snd_pcm_period_elapsed(substream);
}
}