[wdmaudiodev] Re: SYSVAD SwapAPO

  • From: Tim Roberts <timr@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Tue, 26 Mar 2019 10:27:04 -0700

amd 22102018 wrote:

Guys I am Working on SwapAPO(Slate Audio Sample).
May i know how the SwapAPO is getting called from the sysvad audio driver i.e how is it hooked
i know that the Presence of APO is detected by the Audio Engine by making entries in the .INF file.My Question is how APO is Hooked with the driver how it is getting called

It is NOT called (or "hooked") from the SysVad driver.  The driver does not know whether or not an APO is present.  The APO is loaded into the Audio Engine, and gets called when the Audio Engine has new data, before it writes the data into the device's circular buffer (or, on the input side, after it reads new data from the circular buffer).

I want to implement an existing algorithm written in MATLAB as a sAPO and hook it to the Audio Engine & Audio Driver. How can it be Done. I Have converted the MATLAB code in to the "C Code" and by using Visual Studio i have converted it to the .dll

You said you are working with sysvad and have it working. Right?  In that case, you can see the code.  You can see that there is an APOProcess method that does the real work.

How the GUID can be Assigned to this APO in the C Code and add it to my existing Project of "Slate Audio Sample & SwapAPO" & this APO is for capture graph.

What GUID do you mean?  You'll need to create new GUIDs in the IDL files.  Those are referenced symbolically in the code, so it's centralized.

i used the .dll in >INF and it is loading clearly that i can see it in Driver Properties (But i want GUID for it so that i can use it in INF "FX STREAMEFFECTS _CLSID" )i know generating sample GUID;s using visual studio.

Did you search the code to look for the GUIDs in the INF file? That would tell you what you need to change.  They only occur in one file.

I have tested it with the test test tone and captured it using audacity the channels are getting swapped. While debugging using WINDBG when the set the Break Point at "APOProcess" it is not getting breaked and the APO Process call i am unable to see it using windbg but the effects are getting applied and the file is getting saved in to the C:\ location as it is present in the "savedata.cpp"

What process were you debugging?  Remember that your APO is not running in the Audacity process, so you can't debug Audacity. Your APO is loaded and running in the protected Audio Engine process.  In order to debug that process, you need to turn off it's "protected" status by turning on the DisableProtectedAudioDG, then "attach" to the process using windbg.


However, if you use debug prints with OutputDebugString,  you can see those with a tool like DebugView even without using a debugger.

Tim Roberts, timr@xxxxxxxxx
Providenza & Boekelheide, Inc.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Other related posts: