[ros-diffs] [janderwald] 46471: [BDAPLGIN] - Enhance debug traces [KSPROXY] - Check if the input / output pin has any methods while enumerating them [MSDVBNP] - Implement IBaseFilter::Stop, IBaseFilter::Run, IBaseFilter::Pause - Fix missing AddRef in IBaseFilter::QueryFilterInfo - Implement IBDA_NetworkProvider::RegisterDeviceFilter, IBDA_NetworkProvider::UnRegisterDeviceFilter - Partly implement ITuner::put_TuneRequest - ReactOS DVBT Network Provider is now able to tune a channel, though sound is missing

janderwald at svn.reactos.org janderwald at svn.reactos.org
Fri Mar 26 18:51:56 CET 2010


Author: janderwald
Date: Fri Mar 26 18:51:54 2010
New Revision: 46471

URL: http://svn.reactos.org/svn/reactos?rev=46471&view=rev
Log:
[BDAPLGIN]
- Enhance debug traces
[KSPROXY]
- Check if the input / output pin has any methods while enumerating them
[MSDVBNP]
- Implement IBaseFilter::Stop, IBaseFilter::Run, IBaseFilter::Pause
- Fix missing AddRef in IBaseFilter::QueryFilterInfo
- Implement IBDA_NetworkProvider::RegisterDeviceFilter, IBDA_NetworkProvider::UnRegisterDeviceFilter
- Partly implement ITuner::put_TuneRequest
- ReactOS DVBT Network Provider is now able to tune a channel, though sound is missing

Modified:
    trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp
    trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp
    trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
    trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp
    trunk/reactos/dll/directx/ksproxy/enumpins.cpp
    trunk/reactos/dll/directx/ksproxy/input_pin.cpp
    trunk/reactos/dll/directx/ksproxy/output_pin.cpp
    trunk/reactos/dll/directx/msdvbnp/msdvbnp.cpp
    trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp
    trunk/reactos/dll/directx/msdvbnp/pin.cpp
    trunk/reactos/dll/directx/msdvbnp/precomp.h
    trunk/reactos/dll/directx/msdvbnp/scanningtuner.cpp

Modified: trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/devicecontrol.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -472,8 +472,8 @@
     hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_BDA_NODE_PIN) + sizeof(ULONG), &PinId, sizeof(ULONG), &BytesReturned);
 
 #ifdef BDAPLGIN_TRACE
-    WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx, BytesReturned %lu PinId %lu\n", hr, BytesReturned, PinId);
+    WCHAR Buffer[200];
+    swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx, BytesReturned %lu PinId %lu ulInputPinId %lu ulOutputPinId %lu ulNodeType %lu\n", hr, BytesReturned, PinId, ulInputPinId, ulOutputPinId, ulNodeType);
     OutputDebugStringW(Buffer);
 #endif
 

Modified: trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/digitaldemo.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -111,7 +111,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: pModulationType %lu hr %lx\n", *pModulationType, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -142,7 +142,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: pFECMethod %lu hr %lx\n", *pFECMethod, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -172,7 +172,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: pFECRate %lu hr %lx\n", *pFECRate, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -202,7 +202,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: pFECMethod %lu hr %lx\n", *pFECMethod, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -232,7 +232,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: pFECRate %lu hr %lx\n", *pFECRate, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -262,7 +262,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: pSymbolRate %lu hr %lx\n", *pSymbolRate, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -292,7 +292,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx\n", hr);
+    swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: pSpectralInversion %lu hr %lx\n", *pSpectralInversion, hr);
     OutputDebugStringW(Buffer);
 #endif
 

Modified: trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/frequencyfilter.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -122,7 +122,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu ulFrequency %lu hr %lx\n", m_NodeId, ulFrequency, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -152,7 +152,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu Polarity %lu hr %lx\n", m_NodeId, Polarity, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -182,7 +182,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Range: m_NodeId %lu ulRange %lu hr %lx\n", m_NodeId, ulRange, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -212,7 +212,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu ulBandwidth %lu hr %lx\n", m_NodeId, ulBandwidth, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -241,7 +241,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu ulMultiplier %lu hr %lx\n", m_NodeId, ulMultiplier, hr);
     OutputDebugStringW(Buffer);
 #endif
 

Modified: trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/bdaplgin/lnbinfo.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -102,7 +102,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu ulLOFLow %lu hr %lx\n", m_NodeId, ulLOFLow, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -132,7 +132,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu ulLOFHigh %lu hr %lx\n", m_NodeId, ulLOFHigh, hr);
     OutputDebugStringW(Buffer);
 #endif
 
@@ -162,7 +162,7 @@
 
 #ifdef BDAPLGIN_TRACE
     WCHAR Buffer[100];
-    swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx\n", m_NodeId, hr);
+    swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu ulSwitchFrequency %lu hr %lx\n", m_NodeId, ulSwitchFrequency, hr);
     OutputDebugStringW(Buffer);
 #endif
 

Modified: trunk/reactos/dll/directx/ksproxy/enumpins.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ksproxy/enumpins.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ksproxy/enumpins.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/ksproxy/enumpins.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -64,6 +64,14 @@
         return NOERROR;
     }
 
+    WCHAR Buffer[100];
+    LPOLESTR lpstr;
+    StringFromCLSID(refiid, &lpstr);
+    swprintf(Buffer, L"CEnumPins::QueryInterface: NoInterface for %s\n", lpstr);
+    OutputDebugStringW(Buffer);
+    CoTaskMemFree(lpstr);
+
+DebugBreak();
     return E_NOINTERFACE;
 }
 

Modified: trunk/reactos/dll/directx/ksproxy/input_pin.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ksproxy/input_pin.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ksproxy/input_pin.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/ksproxy/input_pin.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -1629,6 +1629,7 @@
         {
 #ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+            DebugBreak();
 #endif
             return hr;
         }
@@ -1639,6 +1640,7 @@
         {
 #ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+            DebugBreak();
 #endif
             return hr;
         }
@@ -1683,6 +1685,8 @@
 
     Length = NumProperty + NumMethods + NumEvents;
 
+    assert(Length);
+
     // allocate guid buffer
     pGuid = (LPGUID)CoTaskMemAlloc(Length);
     if (!pGuid)
@@ -1695,6 +1699,12 @@
     NumMethods /= sizeof(GUID);
     NumEvents /= sizeof(GUID);
 
+#ifdef KSPROXY_TRACE
+    WCHAR Buffer[200];
+    swprintf(Buffer, L"CInputPin::GetSupportedSets NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+    OutputDebugStringW(Buffer);
+#endif
+
     // get all properties
     hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
     if (FAILED(hr))
@@ -1705,7 +1715,7 @@
     Length -= BytesReturned;
 
     // get all methods
-    if (Length)
+    if (Length && NumMethods)
     {
         hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
         if (FAILED(hr))
@@ -1717,7 +1727,7 @@
     }
 
     // get all events
-    if (Length)
+    if (Length && NumEvents)
     {
         hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
         if (FAILED(hr))
@@ -1728,12 +1738,6 @@
         Length -= BytesReturned;
     }
 
-#ifdef KSPROXY_TRACE
-    WCHAR Buffer[200];
-    swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
-    OutputDebugStringW(Buffer);
-#endif
-
     *pOutGuid = pGuid;
     *NumGuids = NumProperty+NumEvents+NumMethods;
     return S_OK;
@@ -1779,6 +1783,7 @@
         {
             // store plugin
             m_Plugins.push_back(pUnknown);
+DebugBreak();
         }
         // close key
         RegCloseKey(hSubKey);

Modified: trunk/reactos/dll/directx/ksproxy/output_pin.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ksproxy/output_pin.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ksproxy/output_pin.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/ksproxy/output_pin.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -1985,8 +1985,12 @@
         hr = CreatePinHandle(Medium, Interface, pmt);
         if (FAILED(hr))
         {
-            m_InterfaceHandler->Release();
-            m_InterfaceHandler = InterfaceHandler;
+#ifdef KSPROXY_TRACE
+            WCHAR Buffer[100];
+            swprintf(Buffer, L"COutputPin::CreatePinHandle failed with %lx\n", hr);
+            OutputDebugStringW(Buffer);
+#endif
+            return hr;
         }
 
         if (!m_InterfaceHandler)
@@ -2181,6 +2185,7 @@
         {
 #ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CInputPin::CreatePinHandle GetSupportedSets failed\n");
+            DebugBreak();
 #endif
             return hr;
         }
@@ -2191,6 +2196,7 @@
         {
 #ifdef KSPROXY_TRACE
             OutputDebugStringW(L"CInputPin::CreatePinHandle LoadProxyPlugins failed\n");
+            DebugBreak();
 #endif
             return hr;
         }
@@ -2234,6 +2240,8 @@
 
     Length = NumProperty + NumMethods + NumEvents;
 
+    assert(Length);
+
     // allocate guid buffer
     pGuid = (LPGUID)CoTaskMemAlloc(Length);
     if (!pGuid)
@@ -2256,7 +2264,7 @@
     Length -= BytesReturned;
 
     // get all methods
-    if (Length)
+    if (Length && NumMethods)
     {
         hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
         if (FAILED(hr))
@@ -2268,7 +2276,7 @@
     }
 
     // get all events
-    if (Length)
+    if (Length && NumEvents)
     {
         hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
         if (FAILED(hr))
@@ -2330,6 +2338,7 @@
         {
             // store plugin
             m_Plugins.push_back(pUnknown);
+DebugBreak();
         }
         // close key
         RegCloseKey(hSubKey);

Modified: trunk/reactos/dll/directx/msdvbnp/msdvbnp.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/msdvbnp.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/msdvbnp/msdvbnp.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/msdvbnp/msdvbnp.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -8,8 +8,6 @@
  */
 
 #include "precomp.h"
-
-const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
 
 static INTERFACE_TABLE InterfaceTable[] =
 {

Modified: trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/msdvbnp/networkprovider.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -8,11 +8,15 @@
  */
 #include "precomp.h"
 
+#define DEVICE_FILTER_MASK (0x80000000)
+
 class CNetworkProvider : public IBaseFilter,
                          public IAMovieSetup,
                          public IBDA_NetworkProvider
 {
 public:
+    typedef std::vector<IUnknown*>DeviceFilterStack;
+
     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
 
     STDMETHODIMP_(ULONG) AddRef()
@@ -58,7 +62,7 @@
     HRESULT STDMETHODCALLTYPE RegisterDeviceFilter(IUnknown *pUnkFilterControl, ULONG *ppvRegisitrationContext);
     HRESULT STDMETHODCALLTYPE UnRegisterDeviceFilter(ULONG pvRegistrationContext);
 
-    CNetworkProvider() : m_Ref(0), m_pGraph(0), m_ReferenceClock(0), m_FilterState(State_Stopped) {m_Pins[0] = 0;};
+    CNetworkProvider(LPCGUID ClassID);
     virtual ~CNetworkProvider(){};
 
 protected:
@@ -67,6 +71,9 @@
     IReferenceClock * m_ReferenceClock;
     FILTER_STATE m_FilterState;
     IPin * m_Pins[1];
+    GUID m_ClassID;
+    DeviceFilterStack m_DeviceFilters;
+    IScanningTuner * m_Tuner;
 };
 
 HRESULT
@@ -75,6 +82,9 @@
     IN  REFIID refiid,
     OUT PVOID* Output)
 {
+    ULONG Index;
+    HRESULT hr;
+
     *Output = NULL;
 
     if (IsEqualGUID(refiid, IID_IUnknown))
@@ -94,7 +104,47 @@
         IsEqualGUID(refiid, IID_IScanningTuner))
     {
         // construct scanning tuner
-        return CScanningTunner_fnConstructor(NULL, refiid, Output);
+        if (!m_Tuner)
+        {
+            HRESULT hr = CScanningTunner_fnConstructor(m_DeviceFilters, refiid, (void**)&m_Tuner);
+            if (FAILED(hr))
+                return hr;
+        }
+        m_Tuner->AddRef();
+        *Output = (IUnknown*)m_Tuner;
+
+        return NOERROR;
+    }
+
+    if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
+    {
+        *Output = (IBDA_NetworkProvider*)(this);
+        reinterpret_cast<IBDA_NetworkProvider*>(*Output)->AddRef();
+        return NOERROR;
+    }
+
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get device filter
+        IUnknown *pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        // query for requested interface
+        hr =  pFilter->QueryInterface(refiid, Output);
+        if (SUCCEEDED(hr))
+        {
+#ifdef MSDVBNP_TRACE
+            WCHAR Buffer[MAX_PATH];
+            LPOLESTR lpstr;
+            StringFromCLSID(refiid, &lpstr);
+            swprintf(Buffer, L"CNetworkProvider::QueryInterface: DeviceFilter %lu supports %s !!!\n", Index, lpstr);
+            OutputDebugStringW(Buffer);
+            CoTaskMemFree(lpstr);
+#endif
+            return hr;
+        }
     }
 
     WCHAR Buffer[MAX_PATH];
@@ -103,10 +153,22 @@
     swprintf(Buffer, L"CNetworkProvider::QueryInterface: NoInterface for %s !!!\n", lpstr);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
-
+    DebugBreak();
 
     return E_NOINTERFACE;
 }
+
+CNetworkProvider::CNetworkProvider(LPCGUID ClassID) : m_Ref(0),
+                                                      m_pGraph(0), 
+                                                      m_ReferenceClock(0),
+                                                      m_FilterState(State_Stopped),
+                                                      m_DeviceFilters(),
+                                                      m_Tuner(0)
+{
+    m_Pins[0] = 0;
+
+    CopyMemory(&m_ClassID, ClassID, sizeof(GUID));
+};
 
 //-------------------------------------------------------------------
 // IBaseFilter interface
@@ -117,24 +179,29 @@
 CNetworkProvider::GetClassID(
     CLSID *pClassID)
 {
-    OutputDebugStringW(L"CNetworkProvider::GetClassID : NotImplemented\n");
-    return E_NOTIMPL;
+    OutputDebugStringW(L"CNetworkProvider::GetClassID\n");
+    CopyMemory(&pClassID, &m_ClassID, sizeof(GUID));
+
+    return S_OK;
 }
 
 HRESULT
 STDMETHODCALLTYPE
 CNetworkProvider::Stop()
 {
-    OutputDebugStringW(L"CNetworkProvider::Stop : NotImplemented\n");
-    return E_NOTIMPL;
+    OutputDebugStringW(L"CNetworkProvider::Stop\n");
+    m_FilterState = State_Stopped;
+    return S_OK;
 }
 
 HRESULT
 STDMETHODCALLTYPE
 CNetworkProvider::Pause()
 {
-    OutputDebugStringW(L"CNetworkProvider::Pause : NotImplemented\n");
-    return E_NOTIMPL;
+    OutputDebugStringW(L"CNetworkProvider::Pause\n");
+
+    m_FilterState = State_Paused;
+    return S_OK;
 }
 
 HRESULT
@@ -142,8 +209,10 @@
 CNetworkProvider::Run(
     REFERENCE_TIME tStart)
 {
-    OutputDebugStringW(L"CNetworkProvider::Run : NotImplemented\n");
-    return E_NOTIMPL;
+    OutputDebugStringW(L"CNetworkProvider::Run\n");
+
+    m_FilterState = State_Running;
+    return S_OK;
 }
 
 HRESULT
@@ -166,7 +235,6 @@
         pClock->AddRef();
 
     }
-
     if (m_ReferenceClock)
     {
         m_ReferenceClock->Release();
@@ -227,6 +295,9 @@
     pInfo->achName[0] = L'\0';
     pInfo->pGraph = m_pGraph;
 
+    if (m_pGraph)
+        m_pGraph->AddRef();
+
     return S_OK;
 }
 
@@ -257,7 +328,6 @@
 CNetworkProvider::QueryVendorInfo(
     LPWSTR *pVendorInfo)
 {
-    OutputDebugStringW(L"CNetworkProvider::QueryVendorInfo : NotImplemented\n");
     return E_NOTIMPL;
 }
 
@@ -336,16 +406,95 @@
     IUnknown *pUnkFilterControl,
     ULONG *ppvRegisitrationContext)
 {
-    OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter : NotImplemented\n");
-    return E_NOTIMPL;
+    HRESULT hr;
+    IBDA_DeviceControl * pDeviceControl = NULL;
+    IBDA_Topology *pTopology = NULL;
+
+    OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter\n");
+
+    if (!pUnkFilterControl || !ppvRegisitrationContext)
+    {
+        //invalid argument
+        return E_POINTER;
+    }
+
+    // the filter must support IBDA_DeviceControl and IBDA_Topology
+    hr = pUnkFilterControl->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
+    if (FAILED(hr))
+    {
+        OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter Filter does not support IBDA_DeviceControl\n");
+        return hr;
+    }
+
+    hr = pUnkFilterControl->QueryInterface(IID_IBDA_Topology, (void**)&pTopology);
+    if (FAILED(hr))
+    {
+        pDeviceControl->Release();
+        OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter Filter does not support IID_IBDA_Topology\n");
+        return hr;
+    }
+
+    //TODO
+    // analyize device filter
+
+    // increment reference
+    pUnkFilterControl->AddRef();
+
+    // release IBDA_DeviceControl interface
+    pDeviceControl->Release();
+
+    // release IBDA_Topology interface
+    pTopology->Release();
+
+    // store registration ctx
+    *ppvRegisitrationContext = (m_DeviceFilters.size() | DEVICE_FILTER_MASK);
+
+    // store filter
+    m_DeviceFilters.push_back(pUnkFilterControl);
+
+    OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter complete\n");
+
+    return S_OK;
 }
 
 HRESULT
 STDMETHODCALLTYPE
 CNetworkProvider::UnRegisterDeviceFilter(ULONG pvRegistrationContext)
 {
-    OutputDebugStringW(L"CNetworkProvider::UnRegisterDeviceFilter : NotImplemented\n");
-    return E_NOTIMPL;
+    ULONG Index;
+    IUnknown * pUnknown;
+
+    OutputDebugStringW(L"CNetworkProvider::UnRegisterDeviceFilter\n");
+
+    if (!(pvRegistrationContext & DEVICE_FILTER_MASK))
+    {
+        // invalid argument
+        return E_INVALIDARG;
+    }
+
+    // get real index
+    Index = pvRegistrationContext & ~DEVICE_FILTER_MASK;
+
+    if (Index >= m_DeviceFilters.size())
+    {
+        // invalid argument
+        return E_INVALIDARG;
+    }
+
+    pUnknown = m_DeviceFilters[Index];
+    if (!pUnknown)
+    {
+        // filter was already de-registered
+        return E_INVALIDARG;
+    }
+
+    // remove from vector
+    m_DeviceFilters[Index] = NULL;
+
+    // release extra reference
+    pUnknown->Release();
+
+    return NOERROR;
 }
 
 HRESULT
@@ -355,7 +504,7 @@
     REFIID riid,
     LPVOID * ppv)
 {
-    CNetworkProvider * handler = new CNetworkProvider();
+    CNetworkProvider * handler = new CNetworkProvider(&CLSID_DVBTNetworkProvider);
 
 #ifdef MSDVBNP_TRACE
     WCHAR Buffer[MAX_PATH];

Modified: trunk/reactos/dll/directx/msdvbnp/pin.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/pin.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/msdvbnp/pin.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/msdvbnp/pin.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -8,8 +8,10 @@
  */
 #include "precomp.h"
 
+#ifndef _MSC_VER
 const GUID KSDATAFORMAT_TYPE_BDA_ANTENNA = {0x71985f41, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
 const GUID GUID_NULL                     = {0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+#endif
 
 class CPin : public IPin
 {

Modified: trunk/reactos/dll/directx/msdvbnp/precomp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/precomp.h?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/msdvbnp/precomp.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/msdvbnp/precomp.h [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -9,15 +9,18 @@
 #include <ks.h>
 #define __STREAMS__
 #include <ksproxy.h>
+#include <ksmedia.h>
 #include <stdio.h>
 #include <wchar.h>
 #include <tchar.h>
 #include <uuids.h>
 #include <bdatypes.h>
 #include <bdaiface.h>
+#include <bdatif.h>
 #include <bdamedia.h>
 #include <tuner.h>
 #include <assert.h>
+#include <vector>
 
 typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
 
@@ -46,7 +49,7 @@
 HRESULT
 WINAPI
 CScanningTunner_fnConstructor(
-    IUnknown *pUnknown,
+    std::vector<IUnknown*> & m_DeviceFilter,
     REFIID riid,
     LPVOID * ppv);
 
@@ -79,4 +82,8 @@
     REFIID riid,
     LPVOID * ppv);
 
+#ifndef _MSC_VER
+extern const GUID CLSID_DVBTNetworkProvider;
 #endif
+
+#endif

Modified: trunk/reactos/dll/directx/msdvbnp/scanningtuner.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/msdvbnp/scanningtuner.cpp?rev=46471&r1=46470&r2=46471&view=diff
==============================================================================
--- trunk/reactos/dll/directx/msdvbnp/scanningtuner.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/msdvbnp/scanningtuner.cpp [iso-8859-1] Fri Mar 26 18:51:54 2010
@@ -48,12 +48,19 @@
     HRESULT STDMETHODCALLTYPE ScanDown(long MillisecondsPause);
     HRESULT STDMETHODCALLTYPE AutoProgram();
 
-    CScanningTunner() : m_Ref(0), m_TuningSpace(0){};
-    virtual ~CScanningTunner(){};
-
+    CScanningTunner(std::vector<IUnknown*> & DeviceFilters) : m_Ref(0), m_TuningSpace(0), m_DeviceFilters(DeviceFilters){};
+    virtual ~CScanningTunner() {};
+    HRESULT STDMETHODCALLTYPE StartChanges();
+    HRESULT STDMETHODCALLTYPE CommitChanges();
+    HRESULT STDMETHODCALLTYPE CheckChanges();
+    HRESULT STDMETHODCALLTYPE SetLnbInfo(IBDA_LNBInfo * pLnbInfo, ULONG ulLOFLow, ULONG ulLOFHigh, ULONG ulSwitchFrequency);
+    HRESULT STDMETHODCALLTYPE SetDigitalDemodulator(IBDA_DigitalDemodulator * pDigitalDemo, ModulationType ModType, FECMethod InnerFEC, BinaryConvolutionCodeRate InnerFECRate, FECMethod OuterFEC, BinaryConvolutionCodeRate OuterFECRate, ULONG SymbolRate);
+    HRESULT SetFrequency(IBDA_FrequencyFilter * pFrequency, ULONG FrequencyMultiplier, ULONG Frequency, Polarisation Polarity, ULONG Range, ULONG Bandwidth);
+    HRESULT STDMETHODCALLTYPE performDVBTTune(IDVBTuneRequest * pDVBTRequest, IDVBTLocator *pDVBTLocator);
 protected:
     LONG m_Ref;
     ITuningSpace * m_TuningSpace;
+    std::vector<IUnknown*> & m_DeviceFilters;
 };
 
 HRESULT
@@ -140,8 +147,48 @@
 CScanningTunner::put_TuneRequest(
     ITuneRequest *TuneRequest)
 {
-    OutputDebugStringW(L"CScanningTunner::put_TuneRequest : NotImplemented\n");
-    return E_NOTIMPL;
+    IDVBTuneRequest * pDVBTRequest;
+    ILocator *pLocator;
+    IDVBTLocator *pDVBTLocator;
+    HRESULT hr;
+    
+
+    OutputDebugStringW(L"CScanningTunner::put_TuneRequest\n");
+
+    // query for IDVBTuneRequest interface
+    hr = TuneRequest->QueryInterface(IID_IDVBTuneRequest, (void**)&pDVBTRequest);
+
+    // sanity check
+    assert(hr == NOERROR);
+
+    // get the IDVBTLocator
+    hr = pDVBTRequest->get_Locator((ILocator**)&pLocator);
+
+    // sanity check
+    assert(hr == NOERROR);
+    assert(pLocator);
+
+    hr = pLocator->QueryInterface(IID_ILocator, (void**)&pDVBTLocator);
+
+    // sanity check
+    assert(hr == NOERROR);
+
+
+    StartChanges();
+    CommitChanges();
+    StartChanges();
+
+    hr = performDVBTTune(pDVBTRequest, pDVBTLocator);
+
+
+    pDVBTLocator->Release();
+    pDVBTRequest->Release();
+
+    CheckChanges();
+    CommitChanges();
+    StartChanges();
+
+    return NOERROR;
 }
 
 HRESULT
@@ -233,20 +280,431 @@
     return E_NOTIMPL;
 }
 
+//-------------------------------------------------------------------
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::performDVBTTune(
+    IDVBTuneRequest * pDVBTRequest,
+    IDVBTLocator *pDVBTLocator)
+{
+    HRESULT hr;
+    ULONG Index;
+    IBDA_Topology *pTopo;
+    IUnknown *pNode;
+    IBDA_FrequencyFilter * pFrequency;
+    IBDA_LNBInfo * pLnbInfo;
+    IBDA_DigitalDemodulator *pDigitalDemo;
+    LONG BandWidth;
+    LONG Frequency;
+    LONG SymbolRate;
+    FECMethod InnerFEC, OuterFEC;
+    BinaryConvolutionCodeRate InnerFECRate, OuterFECRate;
+    ModulationType Modulation;
+
+    pDVBTLocator->get_Bandwidth(&BandWidth);
+    pDVBTLocator->get_CarrierFrequency(&Frequency);
+    pDVBTLocator->get_InnerFEC(&InnerFEC);
+    pDVBTLocator->get_InnerFECRate(&InnerFECRate);
+    pDVBTLocator->get_Modulation(&Modulation);
+    pDVBTLocator->get_OuterFEC(&OuterFEC);
+    pDVBTLocator->get_OuterFECRate(&OuterFECRate);
+    pDVBTLocator->get_SymbolRate(&SymbolRate);
+
+
+    WCHAR Buffer[1000];
+    swprintf(Buffer, L"BandWidth %lu Frequency %lu Rate %lu InnerFEC %ld OuterFEC %ld InnerFECRate %ld OuterFECRate %ld Modulation %lu\n",
+             BandWidth, Frequency, SymbolRate, InnerFEC, OuterFEC, InnerFECRate, OuterFECRate, Modulation);
+
+    OutputDebugStringW(Buffer);
+
+
+
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get device filter
+        IUnknown * pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        hr = pFilter->QueryInterface(IID_IBDA_Topology, (void**)&pTopo);
+        // sanity check
+        assert(hr == NOERROR);
+
+        pNode = NULL;
+        hr = pTopo->GetControlNode(0, 1, 0, &pNode); //HACK
+
+        WCHAR Buffer[100];
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune GetControlNode %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        if (FAILED(hr))
+            continue;
+
+        // sanity check
+        assert(hr == NOERROR);
+        assert(pNode);
+
+        hr = pNode->QueryInterface(IID_IBDA_FrequencyFilter, (void**)&pFrequency);
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_FrequencyFilter hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        hr = SetFrequency(pFrequency, 1000 /* FIXME */, Frequency, BDA_POLARISATION_NOT_DEFINED /* FIXME */, BDA_RANGE_NOT_SET /* FIXME */, BandWidth);
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune SetFrequency hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        //sanity check
+        assert(hr == NOERROR);
+
+        // release interface
+        pFrequency->Release();
+
+
+        hr = pNode->QueryInterface(IID_IBDA_LNBInfo, (void**)&pLnbInfo);
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_LNBInfo hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        hr = SetLnbInfo(pLnbInfo, ULONG_MAX /* FIXME */, ULONG_MAX /* FIXME*/, ULONG_MAX /*FIXME*/);
+
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune SetLnbInfo hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        // release interface
+        pLnbInfo->Release();
+
+        hr = pNode->QueryInterface(IID_IBDA_DigitalDemodulator, (void**)&pDigitalDemo);
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_DigitalDemodulator hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        hr = SetDigitalDemodulator(pDigitalDemo, Modulation, InnerFEC, InnerFECRate, OuterFEC, OuterFECRate, SymbolRate);
+
+        swprintf(Buffer, L"CScanningTunner::performDVBTTune SetDigitalDemodulator hr %lx\n", hr);
+        OutputDebugStringW(Buffer);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        // release interface
+        pDigitalDemo->Release();
+
+        // release control node
+        pNode->Release();
+
+        // release IBDA_Topology;
+        pTopo->Release();
+
+    }
+    return hr;
+}
+
+
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::CheckChanges()
+{
+    ULONG Index;
+    HRESULT hResult = NOERROR;
+    IBDA_DeviceControl * pDeviceControl;
+
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get filter
+        IUnknown * pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        // query for IBDA_DeviceControl interface
+        hResult = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
+
+        // sanity check
+        assert(hResult == NOERROR);
+
+        //start changes
+        hResult = pDeviceControl->CheckChanges();
+
+        // fix for unimplemented
+        if (hResult == E_NOTIMPL)
+            hResult = NOERROR;
+
+        // release interface
+        pDeviceControl->Release();
+
+        if (FAILED(hResult))
+        {
+            //shouldnt happen
+            break;
+        }
+    }
+    // done
+    return hResult;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::CommitChanges()
+{
+    ULONG Index;
+    HRESULT hResult = NOERROR;
+    IBDA_DeviceControl * pDeviceControl;
+
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get filter
+        IUnknown * pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        // query for IBDA_DeviceControl interface
+        HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        //start changes
+        hr = pDeviceControl->CommitChanges();
+
+        // fix for unimplemented
+        if (hr == E_NOTIMPL)
+            hr = NOERROR;
+
+        if (FAILED(hr))
+        {
+            pDeviceControl->StartChanges();
+            pDeviceControl->CommitChanges();
+            hResult = E_UNEXPECTED;
+        }
+
+        // release interface
+        pDeviceControl->Release();
+
+    }
+
+    //done
+    return hResult;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::StartChanges()
+{
+    ULONG Index;
+    IBDA_DeviceControl * pDeviceControl;
+
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get filter
+        IUnknown * pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        // query for IBDA_DeviceControl interface
+        HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        //start changes
+        hr = pDeviceControl->StartChanges();
+
+        // release interface
+        pDeviceControl->Release();
+
+        // fix for unimplemented
+        if (hr == E_NOTIMPL)
+            hr = NOERROR;
+
+        if (FAILED(hr))
+            return hr;
+
+    }
+
+    // now commit the changes
+    for(Index = 0; Index < m_DeviceFilters.size(); Index++)
+    {
+        // get filter
+        IUnknown * pFilter = m_DeviceFilters[Index];
+
+        if (!pFilter)
+            continue;
+
+        // query for IBDA_DeviceControl interface
+        HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
+
+        // sanity check
+        assert(hr == NOERROR);
+
+        hr = pDeviceControl->CommitChanges();
+
+        // release interface
+        pDeviceControl->Release();
+    }
+
+    // done
+    return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::SetLnbInfo(
+    IBDA_LNBInfo * pLnbInfo,
+    ULONG ulLOFLow,
+    ULONG ulLOFHigh,
+    ULONG ulSwitchFrequency)
+{
+    HRESULT hr;
+
+    hr = pLnbInfo->put_LocalOscilatorFrequencyLowBand(ulLOFLow);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+
+    if (FAILED(hr))
+        return hr;
+
+    hr = pLnbInfo->put_LocalOscilatorFrequencyHighBand(ulLOFHigh);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+
+    if (FAILED(hr))
+        return hr;
+
+    hr = pLnbInfo->put_HighLowSwitchFrequency(ulSwitchFrequency);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+
+    return hr;
+}
+
+HRESULT
+CScanningTunner::SetFrequency(
+    IBDA_FrequencyFilter * pFrequency,
+    ULONG FrequencyMultiplier,
+    ULONG Frequency,
+    Polarisation Polarity,
+    ULONG Range,
+    ULONG Bandwidth)
+{
+    HRESULT hr;
+
+    hr = pFrequency->put_FrequencyMultiplier(FrequencyMultiplier);
+    if (FAILED(hr))
+        return hr;
+
+    hr = pFrequency->put_Frequency(Frequency);
+    if (FAILED(hr))
+        return hr;
+
+    hr = pFrequency->put_Polarity(Polarity);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND))
+        hr = NOERROR;
+
+    if (FAILED(hr))
+        return hr;
+
+    hr = pFrequency->put_Range(Range);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND))
+        hr = NOERROR;
+
+    if (FAILED(hr))
+        return hr;
+
+    hr = pFrequency->put_Bandwidth(Bandwidth);
+    return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::SetDigitalDemodulator(
+    IBDA_DigitalDemodulator * pDigitalDemo,
+    ModulationType ModType,
+    FECMethod InnerFEC,
+    BinaryConvolutionCodeRate InnerFECRate,
+    FECMethod OuterFEC,
+    BinaryConvolutionCodeRate OuterFECRate,
+    ULONG SymbolRate)
+{
+    HRESULT hr;
+
+    hr = pDigitalDemo->put_ModulationType(&ModType);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+
+    if (FAILED(hr))
+        return hr;
+
+    hr = pDigitalDemo->put_InnerFECMethod(&InnerFEC);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+    if (FAILED(hr))
+        return hr;
+
+    hr = pDigitalDemo->put_InnerFECRate(&InnerFECRate);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+    if (FAILED(hr))
+        return hr;
+
+    hr = pDigitalDemo->put_OuterFECMethod(&OuterFEC);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+    if (FAILED(hr))
+        return hr;
+
+    hr = pDigitalDemo->put_OuterFECRate(&OuterFECRate);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+    if (FAILED(hr))
+        return hr;
+
+    hr = pDigitalDemo->put_SymbolRate(&SymbolRate);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+    if (FAILED(hr))
+        return hr;
+
+    SpectralInversion Inversion = BDA_SPECTRAL_INVERSION_NOT_DEFINED;
+    hr = pDigitalDemo->put_SpectralInversion(&Inversion);
+    if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+        hr = NOERROR;
+
+    return hr;
+}
+
+
 HRESULT
 WINAPI
 CScanningTunner_fnConstructor(
-    IUnknown *pUnknown,
+    std::vector<IUnknown*> & DeviceFilter,
     REFIID riid,
     LPVOID * ppv)
 {
-    CScanningTunner * handler = new CScanningTunner();
+    CScanningTunner * handler = new CScanningTunner(DeviceFilter);
 
 #ifdef MSDVBNP_TRACE
     WCHAR Buffer[MAX_PATH];
     LPOLESTR lpstr;
     StringFromCLSID(riid, &lpstr);
-    swprintf(Buffer, L"CScanningTunner_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+    swprintf(Buffer, L"CScanningTunner_fnConstructor riid %s\n", lpstr);
     OutputDebugStringW(Buffer);
 #endif
 




More information about the Ros-diffs mailing list