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 (janderwald@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(HANDLE hFile
, ULONG NodeType
, ULONG PinId
) : m_Ref(0), m_hFile(hFile
), m_NodeType(NodeType
), m_PinId(PinId
){};
38 virtual ~CControlNode(){};
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_hFile
, m_NodeType
, refiid
, Output
);
65 else if(IsEqualGUID(refiid
, IID_IBDA_SignalStatistics
))
67 return CBDASignalStatistics_fnConstructor(m_hFile
, m_NodeType
, refiid
, Output
);
69 else if(IsEqualGUID(refiid
, IID_IBDA_LNBInfo
))
71 return CBDALNBInfo_fnConstructor(m_hFile
, m_NodeType
, refiid
, Output
);
73 else if(IsEqualGUID(refiid
, IID_IBDA_DigitalDemodulator
))
75 return CBDADigitalDemodulator_fnConstructor(m_hFile
, 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 IKsObject
* pObject
= NULL
;
103 HANDLE hFile
= INVALID_HANDLE_VALUE
;
106 swprintf(Buffer
, L
"%u", PinId
);
108 // try find target pin
109 hr
= pFilter
->FindPin(Buffer
, &pPin
);
113 #ifdef BDAPLGIN_TRACE
114 swprintf(Buffer
, L
"CControlNode_fnConstructor failed find pin %lu with %lx\n", PinId
, hr
);
115 OutputDebugStringW(Buffer
);
120 // query IKsObject interface
121 hr
= pPin
->QueryInterface(IID_IKsObject
, (void**)&pObject
);
123 #ifdef BDAPLGIN_TRACE
124 swprintf(Buffer
, L
"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr
);
125 OutputDebugStringW(Buffer
);
131 hFile
= pObject
->KsGetObjectHandle();
132 // release IKsObject interface
135 // release IPin interface
138 // construct device control
139 CControlNode
* handler
= new CControlNode(hFile
, NodeType
, PinId
);
141 #ifdef BDAPLGIN_TRACE
142 OutputDebugStringW(L
"CControlNode_fnConstructor\n");
146 return E_OUTOFMEMORY
;
148 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
152 return E_NOINTERFACE
;