[BDAPLGIN]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 25 Feb 2010 16:14:54 +0000 (16:14 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 25 Feb 2010 16:14:54 +0000 (16:14 +0000)
- Simply construction of CBDAFrequencyFilter, CBDALNBInfo, CBDASignalStatistics
- Find IBDA_NetworkProvider in filter graph
- Check for IBaseFilter interface when constructing the CBDADeviceControl object

svn path=/trunk/; revision=45681

reactos/dll/directx/bdaplgin/controlnode.cpp
reactos/dll/directx/bdaplgin/devicecontrol.cpp
reactos/dll/directx/bdaplgin/digitaldemo.cpp
reactos/dll/directx/bdaplgin/frequencyfilter.cpp
reactos/dll/directx/bdaplgin/lnbinfo.cpp
reactos/dll/directx/bdaplgin/pincontrol.cpp
reactos/dll/directx/bdaplgin/precomp.h
reactos/dll/directx/bdaplgin/signalstatistics.cpp

index 53d3649..fb371d0 100644 (file)
@@ -31,12 +31,12 @@ public:
         return m_Ref;
     }
 
         return m_Ref;
     }
 
-    CControlNode(IUnknown * pUnkOuter, ULONG NodeType, ULONG PinId) : m_Ref(0), m_pUnkOuter(pUnkOuter), m_NodeType(NodeType), m_PinId(PinId){};
+    CControlNode(HANDLE hFile, ULONG NodeType, ULONG PinId) : m_Ref(0), m_hFile(hFile), m_NodeType(NodeType), m_PinId(PinId){};
     virtual ~CControlNode(){};
 
 protected:
     LONG m_Ref;
     virtual ~CControlNode(){};
 
 protected:
     LONG m_Ref;
-    IUnknown * m_pUnkOuter;
+    HANDLE m_hFile;
     ULONG m_NodeType;
     ULONG m_PinId;
 };
     ULONG m_NodeType;
     ULONG m_PinId;
 };
@@ -60,24 +60,21 @@ CControlNode::QueryInterface(
     }
     else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
     {
     }
     else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
     {
-        return CBDAFrequencyFilter_fnConstructor(m_pUnkOuter, refiid, Output);
+        return CBDAFrequencyFilter_fnConstructor(m_hFile, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
     {
     }
     else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
     {
-        return CBDASignalStatistics_fnConstructor(m_pUnkOuter, refiid, Output);
+        return CBDASignalStatistics_fnConstructor(m_hFile, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
     {
     }
     else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
     {
-        return CBDALNBInfo_fnConstructor(m_pUnkOuter, refiid, Output);
+        return CBDALNBInfo_fnConstructor(m_hFile, refiid, Output);
     }
     else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
     {
     }
     else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
     {
-        return CBDADigitalDemodulator_fnConstructor(m_pUnkOuter, refiid, Output);
+        return CBDADigitalDemodulator_fnConstructor(m_hFile, refiid, Output);
     }
 
     }
 
-
-
-
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
     OutputDebugStringW(Buffer);
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
     OutputDebugStringW(Buffer);
@@ -90,17 +87,14 @@ CControlNode::QueryInterface(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     ULONG NodeType,
     ULONG PinId,
     REFIID riid,
     LPVOID * ppv)
 {
     ULONG NodeType,
     ULONG PinId,
     REFIID riid,
     LPVOID * ppv)
 {
-    // sanity check
-    assert(pUnkOuter);
-
     // construct device control
     // construct device control
-    CControlNode * handler = new CControlNode(pUnkOuter, NodeType, PinId);
+    CControlNode * handler = new CControlNode(hFile, NodeType, PinId);
 
     OutputDebugStringW(L"CControlNode_fnConstructor\n");
 
 
     OutputDebugStringW(L"CControlNode_fnConstructor\n");
 
index 8b224c3..e64b832 100644 (file)
@@ -21,6 +21,8 @@ const GUID IID_IBDA_Topology      = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x
 const GUID IID_IKsObject           = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
 const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID IID_IKsObject           = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
 const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID IID_IBaseFilter         = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
+
 
 class CBDADeviceControl : public IBDA_DeviceControl,
                           public IBDA_Topology
 
 class CBDADeviceControl : public IBDA_DeviceControl,
                           public IBDA_Topology
@@ -103,7 +105,7 @@ CBDADeviceControl::QueryInterface(
         reinterpret_cast<IBDA_Topology*>(*Output)->AddRef();
         return NOERROR;
     }
         reinterpret_cast<IBDA_Topology*>(*Output)->AddRef();
         return NOERROR;
     }
-#if 0
+
     if (IsEqualIID(refiid, IID_IDistributorNotify))
     {
         OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IDistributorNotify interface\n");
     if (IsEqualIID(refiid, IID_IDistributorNotify))
     {
         OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IDistributorNotify interface\n");
@@ -118,10 +120,8 @@ CBDADeviceControl::QueryInterface(
 
     if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
     {
 
     if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
     {
-        HRESULT hr = CoCreateInstance(CLSID_DVBTNetworkProvider, 0, CLSCTX_INPROC, IID_IBDA_NetworkProvider, (void**)Output);
-        swprintf(Buffer, L"CBDADeviceControl::QueryInterface: failed to construct IID_IBDA_NetworkProvider interface with %lx", hr);
-        OutputDebugStringW(Buffer);
-        return hr;
+        OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IBDA_NetworkProvider interface\n");
+        return E_NOINTERFACE;
     }
 
     if (IsEqualGUID(refiid, IID_IMatrixMixer))
     }
 
     if (IsEqualGUID(refiid, IID_IMatrixMixer))
@@ -141,7 +141,6 @@ CBDADeviceControl::QueryInterface(
         OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IAC3Filter interface\n");
         return E_NOINTERFACE;
     }
         OutputDebugStringW(L"CBDADeviceControl::QueryInterface: No IID_IAC3Filter interface\n");
         return E_NOINTERFACE;
     }
-#endif
 
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s", lpstr);
 
     StringFromCLSID(refiid, &lpstr);
     swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s", lpstr);
@@ -385,7 +384,7 @@ CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG
     if (FAILED(hr))
         return hr;
 
     if (FAILED(hr))
         return hr;
 
-    hr = CControlNode_fnConstructor(m_pUnkOuter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
+    hr = CControlNode_fnConstructor(m_Handle, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
 
     swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
 
     swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
     OutputDebugStringW(Buffer);
@@ -401,6 +400,7 @@ CBDADeviceControl_fnConstructor(
 {
     HRESULT hr;
     IKsObject *pObject = NULL;
 {
     HRESULT hr;
     IKsObject *pObject = NULL;
+    IBaseFilter *pFilter = NULL;
     HANDLE hFile;
 
     // sanity check
     HANDLE hFile;
 
     // sanity check
@@ -409,9 +409,22 @@ CBDADeviceControl_fnConstructor(
     // query for IKsObject
     hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
 
     // query for IKsObject
     hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
 
+    if (FAILED(hr))
+        return E_NOINTERFACE;
+
     // sanity check
     assert(hr == NOERROR);
 
     // sanity check
     assert(hr == NOERROR);
 
+    // query for IBaseFilter interface support
+    hr = pUnkOuter->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
+
+    if (FAILED(hr))
+    {
+        // release 
+       pObject->Release();
+       return E_NOINTERFACE;
+    }
+
     // another sanity check
     assert(pObject != NULL);
 
     // another sanity check
     assert(pObject != NULL);
 
index e8b5497..f70bd1c 100644 (file)
@@ -206,35 +206,10 @@ CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInvers
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv)
 {
     REFIID riid,
     LPVOID * ppv)
 {
-    HRESULT hr;
-    IKsObject *pObject = NULL;
-    HANDLE hFile;
-
-    // sanity check
-    assert(pUnkOuter);
-
-    // query for IKsObject
-    hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
-
-    // sanity check
-    assert(hr == NOERROR);
-
-    // another sanity check
-    assert(pObject != NULL);
-
-    // get file handle
-    hFile = pObject->KsGetObjectHandle();
-
-    // one more sanity check
-    assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
-
-    // release IKsObject interface
-    pObject->Release();
-
     // construct device control
     CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile);
 
     // construct device control
     CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile);
 
index f0fe1b9..8ccb5f7 100644 (file)
@@ -185,35 +185,10 @@ CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier)
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv)
 {
     REFIID riid,
     LPVOID * ppv)
 {
-    HRESULT hr;
-    IKsObject *pObject = NULL;
-    HANDLE hFile;
-
-    // sanity check
-    assert(pUnkOuter);
-
-    // query for IKsObject
-    hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
-
-    // sanity check
-    assert(hr == NOERROR);
-
-    // another sanity check
-    assert(pObject != NULL);
-
-    // get file handle
-    hFile = pObject->KsGetObjectHandle();
-
-    // one more sanity check
-    assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
-
-    // release IKsObject interface
-    pObject->Release();
-
     // construct device control
     CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile);
 
     // construct device control
     CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile);
 
index 0d17f4f..5756198 100644 (file)
@@ -133,35 +133,10 @@ CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency)
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv)
 {
     REFIID riid,
     LPVOID * ppv)
 {
-    HRESULT hr;
-    IKsObject *pObject = NULL;
-    HANDLE hFile;
-
-    // sanity check
-    assert(pUnkOuter);
-
-    // query for IKsObject
-    hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
-
-    // sanity check
-    assert(hr == NOERROR);
-
-    // another sanity check
-    assert(pObject != NULL);
-
-    // get file handle
-    hFile = pObject->KsGetObjectHandle();
-
-    // one more sanity check
-    assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
-
-    // release IKsObject interface
-    pObject->Release();
-
     // construct device control
     CBDALNBInfo * handler = new CBDALNBInfo(hFile);
 
     // construct device control
     CBDALNBInfo * handler = new CBDALNBInfo(hFile);
 
index 8117fe7..6811420 100644 (file)
@@ -10,6 +10,7 @@
 #include "precomp.h"
 
 const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
 #include "precomp.h"
 
 const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
 
 class CBDAPinControl : public IBDA_PinControl
 {
 
 class CBDAPinControl : public IBDA_PinControl
 {
@@ -38,13 +39,14 @@ public:
     HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
 
 
     HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
 
 
-    CBDAPinControl(HANDLE hFile) : m_Ref(0), m_Handle(hFile){};
+    CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin){};
     virtual ~CBDAPinControl(){};
 
 protected:
     LONG m_Ref;
     HANDLE m_Handle;
     virtual ~CBDAPinControl(){};
 
 protected:
     LONG m_Ref;
     HANDLE m_Handle;
-
+    IBDA_NetworkProvider * m_pProvider;
+    IPin * m_pConnectedPin;
 };
 
 HRESULT
 };
 
 HRESULT
@@ -53,9 +55,6 @@ CBDAPinControl::QueryInterface(
     IN  REFIID refiid,
     OUT PVOID* Output)
 {
     IN  REFIID refiid,
     OUT PVOID* Output)
 {
-    WCHAR Buffer[MAX_PATH];
-    LPOLESTR lpstr;
-
     if (IsEqualGUID(refiid, IID_IUnknown))
     {
         *Output = PVOID(this);
     if (IsEqualGUID(refiid, IID_IUnknown))
     {
         *Output = PVOID(this);
@@ -69,10 +68,6 @@ CBDAPinControl::QueryInterface(
         return NOERROR;
     }
 
         return NOERROR;
     }
 
-    StringFromCLSID(refiid, &lpstr);
-    swprintf(Buffer, L"CBDADeviceControl::QueryInterface: NoInterface for %s", lpstr);
-    OutputDebugStringW(Buffer);
-    CoTaskMemFree(lpstr);
     return E_NOINTERFACE;
 }
 //-------------------------------------------------------------------
     return E_NOINTERFACE;
 }
 //-------------------------------------------------------------------
@@ -109,7 +104,121 @@ CBDAPinControl_fnConstructor(
     REFIID riid,
     LPVOID * ppv)
 {
     REFIID riid,
     LPVOID * ppv)
 {
-    CBDAPinControl * handler = new CBDAPinControl(NULL);
+    HRESULT hr;
+    IKsObject * pObject = NULL;
+    IPin * pPin = NULL, * pConnectedPin = NULL;
+    IEnumFilters *pEnumFilters = NULL;
+    IBDA_NetworkProvider * pNetworkProvider = NULL;
+    IBaseFilter * ppFilter[1];
+    PIN_INFO PinInfo;
+    FILTER_INFO FilterInfo;
+    HANDLE hFile = INVALID_HANDLE_VALUE;
+
+    if (!pUnkOuter)
+        return E_POINTER;
+
+    // query for IKsObject interface
+    hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+    if (FAILED(hr))
+        return hr;
+
+    // query for IPin interface
+    hr = pObject->QueryInterface(IID_IPin, (void**)&pPin);
+
+    if (FAILED(hr))
+    {
+        //clean up
+       pObject->Release();
+       return hr;
+    }
+
+    // get pin info
+    hr = pPin->QueryPinInfo(&PinInfo);
+
+    if (FAILED(hr))
+    {
+        //clean up
+       pObject->Release();
+       pPin->Release();
+       return hr;
+    }
+
+    // sanity checks
+    assert(PinInfo.dir == PINDIR_OUTPUT);
+    assert(PinInfo.pFilter != NULL);
+
+    // query filter info
+    hr = PinInfo.pFilter->QueryFilterInfo(&FilterInfo);
+
+    // sanity check
+    assert(FilterInfo.pGraph != NULL);
+
+    // get IEnumFilters interface
+    hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters);
+
+    if (FAILED(hr))
+    {
+        //clean up
+       FilterInfo.pGraph->Release();
+       PinInfo.pFilter->Release();
+       pObject->Release();
+       pPin->Release();
+       return hr;
+    }
+
+    while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+    {
+        // check if that filter supports the IBDA_NetworkProvider interface
+        hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
+
+        // release IBaseFilter
+        ppFilter[0]->Release();
+
+        if (SUCCEEDED(hr))
+            break;
+    }
+
+    // release IEnumFilters interface
+    pEnumFilters->Release();
+
+    // release IFilterGraph interface
+    FilterInfo.pGraph->Release();
+
+    // release IBaseFilter interface
+    PinInfo.pFilter->Release();
+
+    if (pNetworkProvider)
+    {
+        // get connected pin handle
+        hr = pPin->ConnectedTo(&pConnectedPin);
+
+        // get file handle
+        hFile = pObject->KsGetObjectHandle();
+
+        if (FAILED(hr) || hFile == INVALID_HANDLE_VALUE)
+        {
+            // pin not connected
+            pNetworkProvider->Release();
+            // set zero
+            pNetworkProvider = NULL;
+        }
+    }
+
+    // release IPin 
+    pPin->Release();
+
+    // release IKsObject
+    pObject->Release();
+
+
+    if (pNetworkProvider == NULL)
+    {
+        // no network provider interface in graph
+        return E_NOINTERFACE;
+    }
+
+    CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin);
 
     OutputDebugStringW(L"CBDAPinControl_fnConstructor");
 
 
     OutputDebugStringW(L"CBDAPinControl_fnConstructor");
 
@@ -124,4 +233,4 @@ CBDAPinControl_fnConstructor(
     }
 
     return NOERROR;
     }
 
     return NOERROR;
-}
\ No newline at end of file
+}
index 1fd67ca..109fd85 100644 (file)
@@ -54,7 +54,7 @@ CBDAPinControl_fnConstructor(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
 HRESULT
 WINAPI
 CControlNode_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     ULONG NodeType,
     ULONG PinId,
     REFIID riid,
     ULONG NodeType,
     ULONG PinId,
     REFIID riid,
@@ -65,7 +65,7 @@ CControlNode_fnConstructor(
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
 HRESULT
 WINAPI
 CBDAFrequencyFilter_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv);
 
     REFIID riid,
     LPVOID * ppv);
 
@@ -74,7 +74,7 @@ CBDAFrequencyFilter_fnConstructor(
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv);
 
     REFIID riid,
     LPVOID * ppv);
 
@@ -83,7 +83,7 @@ CBDASignalStatistics_fnConstructor(
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
 HRESULT
 WINAPI
 CBDALNBInfo_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv);
 
     REFIID riid,
     LPVOID * ppv);
 
@@ -91,7 +91,7 @@ CBDALNBInfo_fnConstructor(
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
 HRESULT
 WINAPI
 CBDADigitalDemodulator_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv);
 
     REFIID riid,
     LPVOID * ppv);
 
index 62f80b6..c460292 100644 (file)
@@ -169,35 +169,10 @@ CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
 HRESULT
 WINAPI
 CBDASignalStatistics_fnConstructor(
-    IUnknown * pUnkOuter,
+    HANDLE hFile,
     REFIID riid,
     LPVOID * ppv)
 {
     REFIID riid,
     LPVOID * ppv)
 {
-    HRESULT hr;
-    IKsObject *pObject = NULL;
-    HANDLE hFile;
-
-    // sanity check
-    assert(pUnkOuter);
-
-    // query for IKsObject
-    hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
-
-    // sanity check
-    assert(hr == NOERROR);
-
-    // another sanity check
-    assert(pObject != NULL);
-
-    // get file handle
-    hFile = pObject->KsGetObjectHandle();
-
-    // one more sanity check
-    assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
-
-    // release IKsObject interface
-    pObject->Release();
-
     // construct device control
     CBDASignalStatistics * handler = new CBDASignalStatistics(hFile);
 
     // construct device control
     CBDASignalStatistics * handler = new CBDASignalStatistics(hFile);