阅读:1713回复:1
encoder minidriver 不能得到接口问题.请帮我看一下
我的驱动中定义了IVideoEncoder接口,但是应用程序中得不到.谁能帮我看一下.个人感觉应该是INF的问题.用户模式应用代码如下
if(piFilter->QueryInterface(CLSID_IVideoEncoderProxy,(void **)&encoder) == S_OK) 这句总是执行不正确.驱动代码在附件中. avshws_test.rar avshws_test.rar { HRESULT hr; String ^ name; // FILTER_INFO temp; ICreateDevEnum* piCreateDevEnum; HRESULT hResult = CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, __uuidof( piCreateDevEnum ), reinterpret_cast< void** >( &piCreateDevEnum ) ); if( SUCCEEDED( hResult ) ) { // Get class enumerator for WDM Streaming Capture Devices category IEnumMoniker* piEnumMoniker; hResult = piCreateDevEnum->CreateClassEnumerator( AM_KSCATEGORY_CAPTURE, &piEnumMoniker, 0 ); piCreateDevEnum->Release(); if( SUCCEEDED( hResult ) ) hResult = piEnumMoniker->Reset(); if( SUCCEEDED( hResult ) ) { // Enumerate KS devices ULONG cFetched; IMoniker* piMoniker; while( (hResult = piEnumMoniker->Next( 1, &piMoniker, &cFetched )) == S_OK ) { IBaseFilter* piFilter; IPropertyBag *pPropBag; hr = piMoniker->BindToStorage(0, 0, IID_IPropertyBag,(void **)&pPropBag); if (SUCCEEDED(hr)) { VARIANT varName; VariantInit(&varName); hr = pPropBag->Read(L"FriendlyName", &varName, 0); if (SUCCEEDED(hr)) { // Display the name in your UI somehow. name = gcnew String(varName.bstrVal); if(name->Compare(name,gcnew String("avshws Source encoder")) == 0) { hResult = piMoniker->BindToObject( NULL, NULL, __uuidof( piFilter ), reinterpret_cast< void** >( &piFilter ) ); IKsPropertySet *pKs=0; IVideoEncoder * encoder; DWORD pTypeSupport = 0; pTypeSupport = KSPROPERTY_WD3KSPROXYSAMPLE_RATE; pTypeSupport = 0; if(piFilter->QueryInterface(CLSID_IVideoEncoderProxy,(void **)&encoder) == S_OK) { hr = pKs->QuerySupported(ENCAPIPARAM_BITRATE_MODE,0,&pTypeSupport); if(hr == S_OK) { hr = S_OK; } pKs->Release(); } } } piMoniker->Release(); } } piEnumMoniker->Release(); } } } |
|
沙发#
发布于:2009-06-12 11:50
怎么都每人看?
|
|