X64 transport [Part 5] (Update plugins.cpp)
[xy_vsfilter.git] / src / apps / mplayerc / BaseGraph.cpp
blob87a63200a3faf62eeb8c17748cf833f27edd9712
1 /*
2 * Copyright (C) 2003-2006 Gabest
3 * http://www.gabest.org
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
9 *
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GNU Make; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18 * http://www.gnu.org/copyleft/gpl.html
22 #include "stdafx.h"
23 #include "basegraph.h"
24 #include "..\..\DSUtil\DSUtil.h"
27 // CPlayerWindow
30 BOOL CPlayerWindow::PreCreateWindow(CREATESTRUCT& cs)
32 if(!CWnd::PreCreateWindow(cs))
33 return FALSE;
35 cs.style &= ~WS_BORDER;
36 cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
37 ::LoadCursor(NULL, IDC_HAND), NULL, NULL);
39 return TRUE;
42 BEGIN_MESSAGE_MAP(CPlayerWindow, CWnd)
43 ON_WM_ERASEBKGND()
44 END_MESSAGE_MAP()
46 BOOL CPlayerWindow::OnEraseBkgnd(CDC* pDC)
48 for(CWnd* pChild = GetWindow(GW_CHILD); pChild; pChild = pChild->GetNextWindow())
50 if(!pChild->IsWindowVisible()) continue;
52 CRect r;
53 pChild->GetClientRect(&r);
54 pChild->MapWindowPoints(this, &r);
55 pDC->ExcludeClipRect(&r);
58 CRect r;
59 GetClientRect(&r);
60 pDC->FillSolidRect(&r, 0);
62 return TRUE;
66 // CBaseGraph
69 CBaseGraph::CBaseGraph()
70 : CUnknown(NAME("CBaseGraph"), NULL)
71 , m_hNotifyWnd(NULL)
75 CBaseGraph::~CBaseGraph()
79 STDMETHODIMP CBaseGraph::NonDelegatingQueryInterface(REFIID riid, void** ppv)
81 CheckPointer(ppv, E_POINTER);
83 return
84 QI(IFilterGraph)
85 QI(IGraphBuilder)
86 QI(IFilterGraph2)
87 QI(IGraphBuilder2)
88 QI(IMediaControl)
89 QI(IMediaSeeking)
90 QI(IMediaEventEx)
91 QI(IVideoWindow)
92 QI(IBasicVideo)
93 QI(IBasicAudio)
94 QI(IAMOpenProgress)
95 QI(IGraphEngine)
96 __super::NonDelegatingQueryInterface(riid, ppv);
99 void CBaseGraph::ClearMessageQueue()
101 while(!m_msgqueue.IsEmpty())
103 GMSG msg = m_msgqueue.RemoveHead();
104 FreeEventParams(msg.m_lEventCode, msg.m_lParam1, msg.m_lParam2);
109 void CBaseGraph::NotifyEvent(long lEventCode, LONG_PTR lParam1, LONG_PTR lParam2)
111 if(!m_hNotifyWnd) return;
113 GMSG msg;
114 msg.m_lEventCode = lEventCode;
115 msg.m_lParam1 = lParam1;
116 msg.m_lParam2 = lParam2;
117 m_msgqueue.AddTail(msg);
119 PostMessage((HWND)m_hNotifyWnd, m_lNotifyMsg, 0, m_lNotifyInstData);
122 // IDispatch
123 STDMETHODIMP CBaseGraph::GetTypeInfoCount(UINT* pctinfo) {return E_NOTIMPL;}
124 STDMETHODIMP CBaseGraph::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) {return E_NOTIMPL;}
125 STDMETHODIMP CBaseGraph::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) {return E_NOTIMPL;}
126 STDMETHODIMP CBaseGraph::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) {return E_NOTIMPL;}
128 // IFilterGraph
129 STDMETHODIMP CBaseGraph::AddFilter(IBaseFilter* pFilter, LPCWSTR pName) {return E_NOTIMPL;}
130 STDMETHODIMP CBaseGraph::RemoveFilter(IBaseFilter* pFilter) {return E_NOTIMPL;}
131 STDMETHODIMP CBaseGraph::EnumFilters(IEnumFilters** ppEnum) {return E_NOTIMPL;}
132 STDMETHODIMP CBaseGraph::FindFilterByName(LPCWSTR pName, IBaseFilter** ppFilter) {return E_NOTIMPL;}
133 STDMETHODIMP CBaseGraph::ConnectDirect(IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
134 STDMETHODIMP CBaseGraph::Reconnect(IPin* ppin) {return E_NOTIMPL;}
135 STDMETHODIMP CBaseGraph::Disconnect(IPin* ppin) {return E_NOTIMPL;}
136 STDMETHODIMP CBaseGraph::SetDefaultSyncSource() {return E_NOTIMPL;}
138 // IGraphBuilder
139 STDMETHODIMP CBaseGraph::Connect(IPin* ppinOut, IPin* ppinIn) {return E_NOTIMPL;}
140 STDMETHODIMP CBaseGraph::Render(IPin* ppinOut) {return E_NOTIMPL;}
141 STDMETHODIMP CBaseGraph::RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList) {return E_NOTIMPL;}
142 STDMETHODIMP CBaseGraph::AddSourceFilter(LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) {*ppFilter = NULL; return RenderFile(lpcwstrFileName, NULL);}//E_NOTIMPL;}
143 STDMETHODIMP CBaseGraph::SetLogFile(DWORD_PTR hFile) {return E_NOTIMPL;}
144 STDMETHODIMP CBaseGraph::Abort() {return E_NOTIMPL;}
145 STDMETHODIMP CBaseGraph::ShouldOperationContinue() {return E_NOTIMPL;}
147 // IFilterGraph2
148 STDMETHODIMP CBaseGraph::AddSourceFilterForMoniker(IMoniker* pMoniker, IBindCtx* pCtx, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) {return E_NOTIMPL;}
149 STDMETHODIMP CBaseGraph::ReconnectEx(IPin* ppin, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
150 STDMETHODIMP CBaseGraph::RenderEx(IPin* pPinOut, DWORD dwFlags, DWORD* pvContext) {return E_NOTIMPL;}
152 // IGraphBuilder2
153 STDMETHODIMP CBaseGraph::IsPinDirection(IPin* pPin, PIN_DIRECTION dir) {return E_NOTIMPL;}
154 STDMETHODIMP CBaseGraph::IsPinConnected(IPin* pPin) {return E_NOTIMPL;}
155 STDMETHODIMP CBaseGraph::ConnectFilter(IBaseFilter* pBF, IPin* pPinIn) {return E_NOTIMPL;}
156 STDMETHODIMP CBaseGraph::ConnectFilter(IPin* pPinOut, IBaseFilter* pBF) {return E_NOTIMPL;}
157 STDMETHODIMP CBaseGraph::ConnectFilterDirect(IPin* pPinOut, IBaseFilter* pBF, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
158 STDMETHODIMP CBaseGraph::NukeDownstream(IUnknown* pUnk) {return E_NOTIMPL;}
159 STDMETHODIMP CBaseGraph::FindInterface(REFIID iid, void** ppv, BOOL bRemove) {return QueryInterface(iid, ppv);}
160 STDMETHODIMP CBaseGraph::AddToROT() {return E_NOTIMPL;}
161 STDMETHODIMP CBaseGraph::RemoveFromROT() {return E_NOTIMPL;}
163 // IMediaControl
164 STDMETHODIMP CBaseGraph::Run() {return E_NOTIMPL;}
165 STDMETHODIMP CBaseGraph::Pause() {return E_NOTIMPL;}
166 STDMETHODIMP CBaseGraph::Stop() {return E_NOTIMPL;}
167 STDMETHODIMP CBaseGraph::GetState(LONG msTimeout, OAFilterState* pfs) {return E_NOTIMPL;}
168 STDMETHODIMP CBaseGraph::RenderFile(BSTR strFilename) {return E_NOTIMPL;}
169 STDMETHODIMP CBaseGraph::AddSourceFilter(BSTR strFilename, IDispatch** ppUnk) {return E_NOTIMPL;}
170 STDMETHODIMP CBaseGraph::get_FilterCollection(IDispatch** ppUnk) {return E_NOTIMPL;}
171 STDMETHODIMP CBaseGraph::get_RegFilterCollection(IDispatch** ppUnk) {return E_NOTIMPL;}
172 STDMETHODIMP CBaseGraph::StopWhenReady() {return Stop();}
174 // IMediaEvent
175 STDMETHODIMP CBaseGraph::GetEventHandle(OAEVENT* hEvent) {return E_NOTIMPL;}
176 STDMETHODIMP CBaseGraph::GetEvent(long* lEventCode, LONG_PTR* lParam1, LONG_PTR* lParam2, long msTimeout)
178 if(m_msgqueue.IsEmpty()) return E_FAIL;
180 GMSG msg = m_msgqueue.RemoveHead();
181 if(lEventCode) *lEventCode = msg.m_lEventCode;
182 if(lParam1) *lParam1 = msg.m_lParam1;
183 if(lParam2) *lParam2 = msg.m_lParam2;
185 return S_OK;
187 STDMETHODIMP CBaseGraph::WaitForCompletion(long msTimeout, long* pEvCode) {return E_NOTIMPL;}
188 STDMETHODIMP CBaseGraph::CancelDefaultHandling(long lEvCode) {return E_NOTIMPL;}
189 STDMETHODIMP CBaseGraph::RestoreDefaultHandling(long lEvCode) {return E_NOTIMPL;}
190 STDMETHODIMP CBaseGraph::FreeEventParams(long lEvCode, LONG_PTR lParam1, LONG_PTR lParam2)
192 if(EC_BG_ERROR == lEvCode)
194 if(lParam1) CoTaskMemFree((void*)lParam1);
197 return S_OK;
200 // IMediaEventEx
201 STDMETHODIMP CBaseGraph::SetNotifyWindow(OAHWND hwnd, long lMsg, LONG_PTR lInstanceData)
203 m_hNotifyWnd = hwnd;
204 m_lNotifyMsg = lMsg;
205 m_lNotifyInstData = lInstanceData;
207 if(!IsWindow((HWND)m_hNotifyWnd))
209 m_hNotifyWnd = NULL;
210 return E_FAIL;
213 return S_OK;
215 STDMETHODIMP CBaseGraph::SetNotifyFlags(long lNoNotifyFlags) {return E_NOTIMPL;}
216 STDMETHODIMP CBaseGraph::GetNotifyFlags(long* lplNoNotifyFlags) {return E_NOTIMPL;}
218 // IMediaSeeking
219 STDMETHODIMP CBaseGraph::GetCapabilities(DWORD* pCapabilities)
221 return pCapabilities ? *pCapabilities = AM_SEEKING_CanSeekAbsolute|AM_SEEKING_CanGetCurrentPos|AM_SEEKING_CanGetDuration, S_OK : E_POINTER;
223 STDMETHODIMP CBaseGraph::CheckCapabilities(DWORD* pCapabilities)
225 CheckPointer(pCapabilities, E_POINTER);
227 if(*pCapabilities == 0) return S_OK;
229 DWORD caps;
230 GetCapabilities(&caps);
232 DWORD caps2 = caps & *pCapabilities;
234 return caps2 == 0 ? E_FAIL : caps2 == *pCapabilities ? S_OK : S_FALSE;
236 STDMETHODIMP CBaseGraph::IsFormatSupported(const GUID* pFormat)
238 return !pFormat ? E_POINTER : *pFormat == TIME_FORMAT_MEDIA_TIME ? S_OK : S_FALSE;
240 STDMETHODIMP CBaseGraph::QueryPreferredFormat(GUID* pFormat)
242 return GetTimeFormat(pFormat);
244 STDMETHODIMP CBaseGraph::GetTimeFormat(GUID* pFormat)
246 return pFormat ? *pFormat = TIME_FORMAT_MEDIA_TIME, S_OK : E_POINTER;
248 STDMETHODIMP CBaseGraph::IsUsingTimeFormat(const GUID* pFormat)
250 return IsFormatSupported(pFormat);
252 STDMETHODIMP CBaseGraph::SetTimeFormat(const GUID* pFormat)
254 return S_OK == IsFormatSupported(pFormat) ? S_OK : E_INVALIDARG;
256 STDMETHODIMP CBaseGraph::GetDuration(LONGLONG* pDuration) {return E_NOTIMPL;}
257 STDMETHODIMP CBaseGraph::GetStopPosition(LONGLONG* pStop) {return E_NOTIMPL;}
258 STDMETHODIMP CBaseGraph::GetCurrentPosition(LONGLONG* pCurrent) {return E_NOTIMPL;}
259 STDMETHODIMP CBaseGraph::ConvertTimeFormat(LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat) {return E_NOTIMPL;}
260 STDMETHODIMP CBaseGraph::SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags) {return E_NOTIMPL;}
261 STDMETHODIMP CBaseGraph::GetPositions(LONGLONG* pCurrent, LONGLONG* pStop) {return E_NOTIMPL;}
262 STDMETHODIMP CBaseGraph::GetAvailable(LONGLONG* pEarliest, LONGLONG* pLatest) {return E_NOTIMPL;}
263 STDMETHODIMP CBaseGraph::SetRate(double dRate) {return E_NOTIMPL;}
264 STDMETHODIMP CBaseGraph::GetRate(double* pdRate) {return E_NOTIMPL;}
265 STDMETHODIMP CBaseGraph::GetPreroll(LONGLONG* pllPreroll) {return E_NOTIMPL;}
267 // IVideoWindow
268 STDMETHODIMP CBaseGraph::put_Caption(BSTR strCaption) {return E_NOTIMPL;}
269 STDMETHODIMP CBaseGraph::get_Caption(BSTR* strCaption) {return E_NOTIMPL;}
270 STDMETHODIMP CBaseGraph::put_WindowStyle(long WindowStyle) {return E_NOTIMPL;}
271 STDMETHODIMP CBaseGraph::get_WindowStyle(long* WindowStyle) {return E_NOTIMPL;}
272 STDMETHODIMP CBaseGraph::put_WindowStyleEx(long WindowStyleEx) {return E_NOTIMPL;}
273 STDMETHODIMP CBaseGraph::get_WindowStyleEx(long* WindowStyleEx) {return E_NOTIMPL;}
274 STDMETHODIMP CBaseGraph::put_AutoShow(long AutoShow) {return E_NOTIMPL;}
275 STDMETHODIMP CBaseGraph::get_AutoShow(long* AutoShow) {return E_NOTIMPL;}
276 STDMETHODIMP CBaseGraph::put_WindowState(long WindowState) {return E_NOTIMPL;}
277 STDMETHODIMP CBaseGraph::get_WindowState(long* WindowState) {return E_NOTIMPL;}
278 STDMETHODIMP CBaseGraph::put_BackgroundPalette(long BackgroundPalette) {return E_NOTIMPL;}
279 STDMETHODIMP CBaseGraph::get_BackgroundPalette(long* pBackgroundPalette) {return E_NOTIMPL;}
280 STDMETHODIMP CBaseGraph::put_Visible(long Visible) {return E_NOTIMPL;}
281 STDMETHODIMP CBaseGraph::get_Visible(long* pVisible) {return E_NOTIMPL;}
282 STDMETHODIMP CBaseGraph::put_Left(long Left) {return E_NOTIMPL;}
283 STDMETHODIMP CBaseGraph::get_Left(long* pLeft) {return E_NOTIMPL;}
284 STDMETHODIMP CBaseGraph::put_Width(long Width) {return E_NOTIMPL;}
285 STDMETHODIMP CBaseGraph::get_Width(long* pWidth) {return E_NOTIMPL;}
286 STDMETHODIMP CBaseGraph::put_Top(long Top) {return E_NOTIMPL;}
287 STDMETHODIMP CBaseGraph::get_Top(long* pTop) {return E_NOTIMPL;}
288 STDMETHODIMP CBaseGraph::put_Height(long Height) {return E_NOTIMPL;}
289 STDMETHODIMP CBaseGraph::get_Height(long* pHeight) {return E_NOTIMPL;}
290 STDMETHODIMP CBaseGraph::put_Owner(OAHWND Owner) {return E_NOTIMPL;}
291 STDMETHODIMP CBaseGraph::get_Owner(OAHWND* Owner) {return E_NOTIMPL;}
292 STDMETHODIMP CBaseGraph::put_MessageDrain(OAHWND Drain) {return E_NOTIMPL;}
293 STDMETHODIMP CBaseGraph::get_MessageDrain(OAHWND* Drain) {return E_NOTIMPL;}
294 STDMETHODIMP CBaseGraph::get_BorderColor(long* Color) {return E_NOTIMPL;}
295 STDMETHODIMP CBaseGraph::put_BorderColor(long Color) {return E_NOTIMPL;}
296 STDMETHODIMP CBaseGraph::get_FullScreenMode(long* FullScreenMode) {return E_NOTIMPL;}
297 STDMETHODIMP CBaseGraph::put_FullScreenMode(long FullScreenMode) {return E_NOTIMPL;}
298 STDMETHODIMP CBaseGraph::SetWindowForeground(long Focus) {return E_NOTIMPL;}
299 STDMETHODIMP CBaseGraph::NotifyOwnerMessage(OAHWND hwnd, long uMsg, LONG_PTR wParam, LONG_PTR lParam) {return E_NOTIMPL;}
300 STDMETHODIMP CBaseGraph::SetWindowPosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
301 STDMETHODIMP CBaseGraph::GetWindowPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
302 STDMETHODIMP CBaseGraph::GetMinIdealImageSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
303 STDMETHODIMP CBaseGraph::GetMaxIdealImageSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
304 STDMETHODIMP CBaseGraph::GetRestorePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
305 STDMETHODIMP CBaseGraph::HideCursor(long HideCursor) {return E_NOTIMPL;}
306 STDMETHODIMP CBaseGraph::IsCursorHidden(long* CursorHidden) {return E_NOTIMPL;}
308 // IBasicVideo
309 STDMETHODIMP CBaseGraph::get_AvgTimePerFrame(REFTIME* pAvgTimePerFrame) {return E_NOTIMPL;}
310 STDMETHODIMP CBaseGraph::get_BitRate(long* pBitRate) {return E_NOTIMPL;}
311 STDMETHODIMP CBaseGraph::get_BitErrorRate(long* pBitErrorRate) {return E_NOTIMPL;}
312 STDMETHODIMP CBaseGraph::get_VideoWidth(long* pVideoWidth) {return E_NOTIMPL;}
313 STDMETHODIMP CBaseGraph::get_VideoHeight(long* pVideoHeight) {return E_NOTIMPL;}
314 STDMETHODIMP CBaseGraph::put_SourceLeft(long SourceLeft) {return E_NOTIMPL;}
315 STDMETHODIMP CBaseGraph::get_SourceLeft(long* pSourceLeft) {return E_NOTIMPL;}
316 STDMETHODIMP CBaseGraph::put_SourceWidth(long SourceWidth) {return E_NOTIMPL;}
317 STDMETHODIMP CBaseGraph::get_SourceWidth(long* pSourceWidth) {return E_NOTIMPL;}
318 STDMETHODIMP CBaseGraph::put_SourceTop(long SourceTop) {return E_NOTIMPL;}
319 STDMETHODIMP CBaseGraph::get_SourceTop(long* pSourceTop) {return E_NOTIMPL;}
320 STDMETHODIMP CBaseGraph::put_SourceHeight(long SourceHeight) {return E_NOTIMPL;}
321 STDMETHODIMP CBaseGraph::get_SourceHeight(long* pSourceHeight) {return E_NOTIMPL;}
322 STDMETHODIMP CBaseGraph::put_DestinationLeft(long DestinationLeft) {return E_NOTIMPL;}
323 STDMETHODIMP CBaseGraph::get_DestinationLeft(long* pDestinationLeft) {return E_NOTIMPL;}
324 STDMETHODIMP CBaseGraph::put_DestinationWidth(long DestinationWidth) {return E_NOTIMPL;}
325 STDMETHODIMP CBaseGraph::get_DestinationWidth(long* pDestinationWidth) {return E_NOTIMPL;}
326 STDMETHODIMP CBaseGraph::put_DestinationTop(long DestinationTop) {return E_NOTIMPL;}
327 STDMETHODIMP CBaseGraph::get_DestinationTop(long* pDestinationTop) {return E_NOTIMPL;}
328 STDMETHODIMP CBaseGraph::put_DestinationHeight(long DestinationHeight) {return E_NOTIMPL;}
329 STDMETHODIMP CBaseGraph::get_DestinationHeight(long* pDestinationHeight) {return E_NOTIMPL;}
330 STDMETHODIMP CBaseGraph::SetSourcePosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
331 STDMETHODIMP CBaseGraph::GetSourcePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
332 STDMETHODIMP CBaseGraph::SetDefaultSourcePosition() {return E_NOTIMPL;}
333 STDMETHODIMP CBaseGraph::SetDestinationPosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
334 STDMETHODIMP CBaseGraph::GetDestinationPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
335 STDMETHODIMP CBaseGraph::SetDefaultDestinationPosition() {return E_NOTIMPL;}
336 STDMETHODIMP CBaseGraph::GetVideoSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
337 STDMETHODIMP CBaseGraph::GetVideoPaletteEntries(long StartIndex, long Entries, long* pRetrieved, long* pPalette) {return E_NOTIMPL;}
338 STDMETHODIMP CBaseGraph::GetCurrentImage(long* pBufferSize, long* pDIBImage) {return E_NOTIMPL;}
339 STDMETHODIMP CBaseGraph::IsUsingDefaultSource() {return E_NOTIMPL;}
340 STDMETHODIMP CBaseGraph::IsUsingDefaultDestination() {return E_NOTIMPL;}
342 // IBasicAudio
343 STDMETHODIMP CBaseGraph::put_Volume(long lVolume) {return E_NOTIMPL;}
344 STDMETHODIMP CBaseGraph::get_Volume(long* plVolume) {return E_NOTIMPL;}
345 STDMETHODIMP CBaseGraph::put_Balance(long lBalance) {return E_NOTIMPL;}
346 STDMETHODIMP CBaseGraph::get_Balance(long* plBalance) {return E_NOTIMPL;}
348 // IAMOpenProgress
349 STDMETHODIMP CBaseGraph::QueryProgress(LONGLONG* pllTotal, LONGLONG* pllCurrent) {return E_NOTIMPL;}
350 STDMETHODIMP CBaseGraph::AbortOperation() {return E_NOTIMPL;}
352 // IGraphEngine
353 STDMETHODIMP_(engine_t) CBaseGraph::GetEngine() {return DirectShow;}