SwapAPO工程概述
2022-09-16
287
0
SwapAPO是微软自带的一个APO工程,其功能实现的是左右声道的数据交换。具有很强的参考意义。
工程源代码地址位于:https://github.com/Microsoft/Windows-driver-samples/tree/main/audio/sysvad
SwapAPO工程配置
工程目录如下:
- 工程配置类型为动态库DLL
- 平台工具集:WindowsApplicationForDrivers10.0
SwapAPO工程说明
SwapAPO从源代码来看,包括两种类型的APO,分别为流式音频Stream effects (SFX)和模式音频Mode effects (MFX).
共实在之前有关于这两种APO类型的介绍,不过我们应该能通过代码更加详细的学习和了解这两种APO的工作机理。
- Resource.h:资源宏定义
- SwapAPO.h :分别为SwapAPO中SFX和MFX类的声明。当然,也包括一些这两个类成员函数使用一些通用函数声明。
- Swap.cpp:SwapAPO中通用函数的实现。
- SwapAPOMFX.cpp: SwapAPO MFX类的实现
- SwapAPOSFX.cpp: SwapAPO SFX类的实现
- SwapAPODll.def: 由于该工程为DLL,故定义DLL导出的函数。这里为COM的通用导出函数DllCanUnloadNow和DllGetClassObject。
- SwapAPODll.cpp: 以ATL实现的DllCanUnloadNow和DllGetClassObject函数,有兴趣的可以看一下CAtlDllModuleT活动模板类的原理。不过对于学习APO,这里就忽略掉。除非你的C++功底够深。
- SwapAPODll.idl:SwapAPODll的UUID说明
- SwapAPOInterface.idl:SwapAPO接口UUID说明
SwapAPO编译结果
SwapAPO编译出来的主要为SwapAPO.dll。不过也有几个值得关注的文件:
其实以上编译出来的文件主要说明了COM中包含的SFX和MFX的IID和其接口UUID:
- COM接口UUID
MIDL_DEFINE_GUID(IID, LIBID_SwapAPODlllib,0x7092F0B2,0xD28D,0x4095,0x95,0xA7,0x6C,0x37,0xA9,0x74,0x32,0xA2);
MIDL_DEFINE_GUID(CLSID, CLSID_SwapAPOMFX,0x06687E71,0xF043,0x403A,0xBF,0x49,0xCB,0x59,0x1B,0xA6,0xE1,0x03);
MIDL_DEFINE_GUID(CLSID, CLSID_SwapAPOSFX,0xB48DEA3F,0xD962,0x425a,0x8D,0x9A,0x9A,0x5B,0xB3,0x7A,0x99,0x04);
对应于SwapAPODll.idl
- SFX和MFX接口UUID:
MIDL_DEFINE_GUID(IID, IID_ISwapAPOMFX,0x3865B91A,0x096E,0x4ACA,0xBF,0x56,0xB1,0x7D,0x49,0xC7,0x74,0x06);
MIDL_DEFINE_GUID(IID, IID_ISwapAPOSFX,0x658A4077,0xB277,0x4d14,0x97,0xE1,0x03,0x56,0x04,0x4D,0x81,0x10);
对应于:SwapAPOInterface.idl