2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/input_cpp.cpp
5 * PURPOSE: InputPin of Proxy Filter
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class COutputPin
: public IPin
,
14 public IQualityControl,
17 public ISpecifyPropertyPages,
18 public IStreamBuilder,
19 public IKsPropertySet,
22 public IKsAggregateControl
24 public IAMStreamConfig,
25 public IMemAllocatorNotifyCallbackTemp
29 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
31 STDMETHODIMP_(ULONG
) AddRef()
33 InterlockedIncrement(&m_Ref
);
36 STDMETHODIMP_(ULONG
) Release()
38 InterlockedDecrement(&m_Ref
);
48 HRESULT STDMETHODCALLTYPE
Connect(IPin
*pReceivePin
, const AM_MEDIA_TYPE
*pmt
);
49 HRESULT STDMETHODCALLTYPE
ReceiveConnection(IPin
*pConnector
, const AM_MEDIA_TYPE
*pmt
);
50 HRESULT STDMETHODCALLTYPE
Disconnect();
51 HRESULT STDMETHODCALLTYPE
ConnectedTo(IPin
**pPin
);
52 HRESULT STDMETHODCALLTYPE
ConnectionMediaType(AM_MEDIA_TYPE
*pmt
);
53 HRESULT STDMETHODCALLTYPE
QueryPinInfo(PIN_INFO
*pInfo
);
54 HRESULT STDMETHODCALLTYPE
QueryDirection(PIN_DIRECTION
*pPinDir
);
55 HRESULT STDMETHODCALLTYPE
QueryId(LPWSTR
*Id
);
56 HRESULT STDMETHODCALLTYPE
QueryAccept(const AM_MEDIA_TYPE
*pmt
);
57 HRESULT STDMETHODCALLTYPE
EnumMediaTypes(IEnumMediaTypes
**ppEnum
);
58 HRESULT STDMETHODCALLTYPE
QueryInternalConnections(IPin
**apPin
, ULONG
*nPin
);
59 HRESULT STDMETHODCALLTYPE
EndOfStream();
60 HRESULT STDMETHODCALLTYPE
BeginFlush();
61 HRESULT STDMETHODCALLTYPE
EndFlush();
62 HRESULT STDMETHODCALLTYPE
NewSegment(REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
);
65 HANDLE STDMETHODCALLTYPE
KsGetObjectHandle();
68 COutputPin(IBaseFilter
* ParentFilter
, LPCWSTR PinName
) : m_Ref(0), m_ParentFilter(ParentFilter
), m_PinName(PinName
){};
69 virtual ~COutputPin(){};
73 IBaseFilter
* m_ParentFilter
;
79 COutputPin::QueryInterface(
84 if (IsEqualGUID(refiid
, IID_IUnknown
) ||
85 IsEqualGUID(refiid
, IID_IPin
))
87 *Output
= PVOID(this);
88 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
91 else if (IsEqualGUID(refiid
, IID_IKsObject
))
93 *Output
= (IKsObject
*)(this);
94 reinterpret_cast<IKsObject
*>(*Output
)->AddRef();
98 WCHAR Buffer
[MAX_PATH
];
100 StringFromCLSID(refiid
, &lpstr
);
101 swprintf(Buffer
, L
"COutputPin::QueryInterface: NoInterface for %s\n", lpstr
);
102 OutputDebugStringW(Buffer
);
103 CoTaskMemFree(lpstr
);
105 return E_NOINTERFACE
;
108 //-------------------------------------------------------------------
113 COutputPin::KsGetObjectHandle()
115 OutputDebugStringW(L
"COutputPin::KsGetObjectHandle CALLED\n");
122 //-------------------------------------------------------------------
127 COutputPin::Connect(IPin
*pReceivePin
, const AM_MEDIA_TYPE
*pmt
)
129 OutputDebugStringW(L
"COutputPin::Connect called\n");
135 COutputPin::ReceiveConnection(IPin
*pConnector
, const AM_MEDIA_TYPE
*pmt
)
137 OutputDebugStringW(L
"COutputPin::ReceiveConnection called\n");
142 COutputPin::Disconnect( void)
144 OutputDebugStringW(L
"COutputPin::Disconnect called\n");
149 COutputPin::ConnectedTo(IPin
**pPin
)
152 OutputDebugStringW(L
"COutputPin::ConnectedTo called\n");
153 return VFW_E_NOT_CONNECTED
;
157 COutputPin::ConnectionMediaType(AM_MEDIA_TYPE
*pmt
)
159 OutputDebugStringW(L
"COutputPin::ConnectionMediaType called\n");
164 COutputPin::QueryPinInfo(PIN_INFO
*pInfo
)
166 wcscpy(pInfo
->achName
, m_PinName
);
167 pInfo
->dir
= PINDIR_OUTPUT
;
168 pInfo
->pFilter
= m_ParentFilter
;
169 m_ParentFilter
->AddRef();
175 COutputPin::QueryDirection(PIN_DIRECTION
*pPinDir
)
179 *pPinDir
= PINDIR_OUTPUT
;
187 COutputPin::QueryId(LPWSTR
*Id
)
189 *Id
= (LPWSTR
)CoTaskMemAlloc((wcslen(m_PinName
)+1)*sizeof(WCHAR
));
191 return E_OUTOFMEMORY
;
193 wcscpy(*Id
, m_PinName
);
198 COutputPin::QueryAccept(const AM_MEDIA_TYPE
*pmt
)
200 OutputDebugStringW(L
"COutputPin::QueryAccept called\n");
205 COutputPin::EnumMediaTypes(IEnumMediaTypes
**ppEnum
)
207 OutputDebugStringW(L
"COutputPin::EnumMediaTypes called\n");
212 COutputPin::QueryInternalConnections(IPin
**apPin
, ULONG
*nPin
)
214 OutputDebugStringW(L
"COutputPin::QueryInternalConnections called\n");
219 COutputPin::EndOfStream( void)
221 OutputDebugStringW(L
"COutputPin::EndOfStream called\n");
226 COutputPin::BeginFlush( void)
228 OutputDebugStringW(L
"COutputPin::BeginFlush called\n");
233 COutputPin::EndFlush( void)
235 OutputDebugStringW(L
"COutputPin::EndFlush called\n");
240 COutputPin::NewSegment(REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
)
242 OutputDebugStringW(L
"COutputPin::NewSegment called\n");
248 COutputPin_Constructor(
249 IBaseFilter
* ParentFilter
,
254 COutputPin
* handler
= new COutputPin(ParentFilter
, PinName
);
257 return E_OUTOFMEMORY
;
259 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
263 return E_NOINTERFACE
;