[wdmaudiodev] Re: GFX/LFX fullduplex support.

  • From: pete c <prchan_0779@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Mon, 8 Sep 2008 22:51:50 -0700 (PDT)

i implemented a circular buffer without data synchro/locking. shouldnt be 

--- 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?

On Sat, Sep 6, 2008 at 2:41 AM, pete c <prchan_0779@xxxxxxxxx> wrote:


 >>>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.


Other related posts: