2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/controlnode.cpp
5 * PURPOSE: ControlNode interface
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
13 const GUID IID_IKsPropertySet
= {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}};
16 class CControlNode
: public IUnknown
19 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
21 STDMETHODIMP_(ULONG
) AddRef()
23 InterlockedIncrement(&m_Ref
);
26 STDMETHODIMP_(ULONG
) Release()
28 InterlockedDecrement(&m_Ref
);
37 CControlNode(IKsPropertySet
* pProperty
, ULONG NodeType
, ULONG PinId
) : m_Ref(0), m_pKsProperty(pProperty
), m_NodeType(NodeType
), m_PinId(PinId
){};
38 virtual ~CControlNode(){};
42 IKsPropertySet
* m_pKsProperty
;
49 CControlNode::QueryInterface(
55 if (IsEqualGUID(refiid
, IID_IUnknown
))
57 *Output
= PVOID(this);
58 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
61 else if(IsEqualGUID(refiid
, IID_IBDA_FrequencyFilter
))
63 return CBDAFrequencyFilter_fnConstructor(m_pKsProperty
, m_NodeType
, refiid
, Output
);
65 else if(IsEqualGUID(refiid
, IID_IBDA_SignalStatistics
))
67 return CBDASignalStatistics_fnConstructor(m_pKsProperty
, m_NodeType
, refiid
, Output
);
69 else if(IsEqualGUID(refiid
, IID_IBDA_LNBInfo
))
71 return CBDALNBInfo_fnConstructor(m_pKsProperty
, m_NodeType
, refiid
, Output
);
73 else if(IsEqualGUID(refiid
, IID_IBDA_DigitalDemodulator
))
75 return CBDADigitalDemodulator_fnConstructor(m_pKsProperty
, m_NodeType
, refiid
, Output
);
78 WCHAR Buffer
[MAX_PATH
];
80 StringFromCLSID(refiid
, &lpstr
);
81 swprintf(Buffer
, L
"CControlNode::QueryInterface: NoInterface for %s", lpstr
);
82 OutputDebugStringW(Buffer
);
92 CControlNode_fnConstructor(
93 IBaseFilter
* pFilter
,
102 IKsPropertySet
* pProperty
;
105 swprintf(Buffer
, L
"%u", PinId
);
107 // try find target pin
108 hr
= pFilter
->FindPin(Buffer
, &pPin
);
112 #ifdef BDAPLGIN_TRACE
113 swprintf(Buffer
, L
"CControlNode_fnConstructor failed find pin %lu with %lx\n", PinId
, hr
);
114 OutputDebugStringW(Buffer
);
119 // query for IKsPropertySet interface
120 hr
= pPin
->QueryInterface(IID_IKsPropertySet
, (void**)&pProperty
);
124 #ifdef BDAPLGIN_TRACE
125 swprintf(Buffer
, L
"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr
);
126 OutputDebugStringW(Buffer
);
129 // release IPin interface
132 // construct device control
133 CControlNode
* handler
= new CControlNode(pProperty
, NodeType
, PinId
);
135 #ifdef BDAPLGIN_TRACE
136 OutputDebugStringW(L
"CControlNode_fnConstructor\n");
140 return E_OUTOFMEMORY
;
142 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
146 return E_NOINTERFACE
;