i implemented a circular buffer without data synchro/locking. shouldnt be needed. --- On Mon, 9/8/08, Wayne <brocean@xxxxxxxxx> wrote: From: Wayne <brocean@xxxxxxxxx> Subject: [wdmaudiodev] Re: GFX/LFX fullduplex support. To: wdmaudiodev@xxxxxxxxxxxxx Date: Monday, September 8, 2008, 11:47 PM Hi pete c, Did you do any synchronization to prevent data race, or to maintain data consistency, e.g. available data length in the buffer? BR, Wayne On Sat, Sep 6, 2008 at 2:41 AM, pete c <prchan_0779@xxxxxxxxx> wrote: Tim, >>>How are you sending the data from the render end back to the capture end? The GFX-render side allocates a share memory mapped file which is used as a circular buffer for the LFX-capture side to exchange render data. The GFX-render side maintains a current write buffer pointer that it uses to write render data to (then increments when written to) and the LFX-capture side maintains a current read buffer pointer to read the render data from (then increments when read from). As of right now the current circular buffer contains 10 buffers(so a total of 100 ms of buffering) and the GFX-render write buffer pointer maintains a spacing of 2 buffers behind the LFX-catpure read buffer pointer. So for example on my laptop there is a service that runs every minute that is related to the WLAN, when enabled the LFX-capture read buffer pointer catches up with the GFX-render write buffer pointer, which leads me to assume that the GFX has been delayed, while the LFX continues to run ahead of the GFX allowing the read and write buffer pointers to meet. When this WLAN service is diabled everything runs smoothly and the read/write pointers maintain a ~2 buffer spacing and never meet. The same skewing situation happens when i insert a USB jump drive into my laptop. The GFX/LFX should be running in ~10ms intervals, which is set by the OS? --- On Fri, 9/5/08, Tim Roberts <timr@xxxxxxxxx> wrote: From: Tim Roberts <timr@xxxxxxxxx> Subject: [wdmaudiodev] Re: GFX/LFX fullduplex support. To: wdmaudiodev@xxxxxxxxxxxxx Date: Friday, September 5, 2008, 12:10 PM pete c wrote: ive been experiementing with a GFX-render and an LFX-capture APO framework, they run smoothly with not much going on in the Vista OS background; however once other apps/services begin running simultaneously the GFX/LFX drift is much more drastic almost as if higher priority tasks in Vista are prempting the GFX-render process; and the LFX-capture begins to overrun the GFX-render side which is not good for AEC. Is there anyway to set kernel priorities to the GFX/LFX processes (like in an RTOS) or does this depend on the parent Audio Graph process priority level? The audio graph runs in a separate system process, and already runs at a raised priority. Besides, you should know that raising the priority won't solve the problem. It just delays it. You need to be able to handle this skew. How are you sending the data from the render end back to the capture end? -- Tim Roberts, timr@xxxxxxxxx Providenza & Boekelheide, Inc.