On 4/29/2010 5:19 PM, Mark Brown wrote:
On Thu, Apr 29, 2010 at 05:15:38PM +0800, Yu Hang wrote:
For example, the 1st instance had mixes the data into destination buffer, but 2nd instance haven't complete the mix operation. Would the data in destination buffer be playing by HW? Or there is some mechanism to guarantee the data will be played after all mix operation is done.
You need to ensure that the user configures the plugin stack appropriately to ensure that your plugin is the last one that's run, you can't do this purely from within your plugin. Even if that's done you'd also need to rely on them not configuring any DSP in the hardware which would disrupt things.
From the pcm_dmix.c, dmix plugin must be followed by HW plugin. Which means I cannot insert my own plugin below dmix. Unless I patch pcm_dmix.c, I cannot retrieve the final data. Or I can patch pcm_hw.c in order to achieve my goal. Even if I patch pcm_hw.c, how can I know when the data is actually sent to HW? I have totally no idea about ALSA driver mechanism. A biggest question is, how alsa lib (in user space) knows the HW needs new data (it must happen by interrupt) and feed HW with new data.