在当前的系统中只有一个audio capture filter,可以写一个简单的程序把系统中所有的filter 都枚举出来。这个和PC上的差不多。但是枚举设备和PC上就差了不少,关键是很多在PC上的API很多都不能在WINCE上用。
1)Initialiseaudio capture device
CoCreateInstance(CLSID_AudioCapture,0, CLSCTX_INPROC,IID_IBaseFilter,reinterpret_cast<void**>(&pInputDevice));
2)Query propertyinterface
pInputDevice->QueryInterface(&pInPropertyBag );
3)set device IDand load property bag
VariantInit(&varDeviceId );
V_VT( &varDeviceId )= VT_I4;
V_I4( &varDeviceId )= deviceId;
PropBag.Write(L"WaveInId", &varDeviceId );
pInPropertyBag->Load(&PropBag,0);
VariantClear(&varDeviceId );
4) Create Graph Builder
CoCreateInstance(CLSID_FilterGraph,0, CLSCTX_INPROC_SERVER,IID_IGraphBuilder,reinterpret_cast<void**>(&pGraph));//Initialize Graph builder
pGraph->AddFilter(pInputDevice,TEXT("AudioCapture"));
5) Create Capture Graph Builder
CoCreateInstance(CLSID_CaptureGraphBuilder,0, CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2,reinterpret_cast<void**>(& pBuild));
pBuild->SetFiltergraph(pGraph );
6) findpin
pBuild->FindPin(
pInputDevice,// Pointerto the filter to search.
PINDIR_OUTPUT,// Search for an output pin.
&PIN_CATEGORY_CAPTURE,//Search for a preview pin.
&MEDIATYPE_Audio,//Search for a video pin.
TRUE,// The pinmust be unconnected.
0,// Return the first matching pin (index 0).
&pCapturePin);
6) query interface for stream config
pCapturePin->QueryInterface(IID_IAMStreamConfig,reinterpret_cast<void**>(&m_pIAMStreamConfig));