Thanks again.
Sorry, I missed to ask you another question.
How does the ring buffer full detected in the core?
hw_ptr and appl_ptr are from range 0..boundary to detect xruns. The driver should not write to these values and should track own pointers.
The driver does not update the pointers. It has its own pointers wherever required.
Moreover our driver uses the batch mode and updates the hardware pointer for every period. Is it the right way to do?
Moreover our driver uses the batch mode and updates the hardware pointer for every period. Is it the right way to do?
I'm not sure about what pointers you're talking. If it's hw_ptr and appl_ptr, then driver shouldn't write to these pointers. The snd_pcm_period_elapsed() function should be called to synchronize hw_ptr when playback of period is finished.
The driver does not update the appl_ptr and hw_ptr. .pointer function just returns the pos returned by the snd_pcm_indirect_playback_pointer function. This function is called with the pointer returned from the audio engine.
Maybe you can put your code to a public place so we can check it.
Sure, can I send the complete code to this ml?
Jaroslav
Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.