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)
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
23 #include "basegraph.h"
24 #include "..\..\DSUtil\DSUtil.h"
30 BOOL
CPlayerWindow::PreCreateWindow(CREATESTRUCT
& cs
)
32 if(!CWnd::PreCreateWindow(cs
))
35 cs
.style
&= ~WS_BORDER
;
36 cs
.lpszClass
= AfxRegisterWndClass(CS_HREDRAW
|CS_VREDRAW
|CS_DBLCLKS
,
37 ::LoadCursor(NULL
, IDC_HAND
), NULL
, NULL
);
42 BEGIN_MESSAGE_MAP(CPlayerWindow
, CWnd
)
46 BOOL
CPlayerWindow::OnEraseBkgnd(CDC
* pDC
)
48 for(CWnd
* pChild
= GetWindow(GW_CHILD
); pChild
; pChild
= pChild
->GetNextWindow())
50 if(!pChild
->IsWindowVisible()) continue;
53 pChild
->GetClientRect(&r
);
54 pChild
->MapWindowPoints(this, &r
);
55 pDC
->ExcludeClipRect(&r
);
60 pDC
->FillSolidRect(&r
, 0);
69 CBaseGraph::CBaseGraph()
70 : CUnknown(NAME("CBaseGraph"), NULL
)
75 CBaseGraph::~CBaseGraph()
79 STDMETHODIMP
CBaseGraph::NonDelegatingQueryInterface(REFIID riid
, void** ppv
)
81 CheckPointer(ppv
, E_POINTER
);
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;
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
);
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
;}
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
;}
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
;}
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
;}
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
;}
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();}
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
;
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
);
201 STDMETHODIMP
CBaseGraph::SetNotifyWindow(OAHWND hwnd
, long lMsg
, LONG_PTR lInstanceData
)
205 m_lNotifyInstData
= lInstanceData
;
207 if(!IsWindow((HWND
)m_hNotifyWnd
))
215 STDMETHODIMP
CBaseGraph::SetNotifyFlags(long lNoNotifyFlags
) {return E_NOTIMPL
;}
216 STDMETHODIMP
CBaseGraph::GetNotifyFlags(long* lplNoNotifyFlags
) {return E_NOTIMPL
;}
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
;
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
;}
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
;}
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
;}
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
;}
349 STDMETHODIMP
CBaseGraph::QueryProgress(LONGLONG
* pllTotal
, LONGLONG
* pllCurrent
) {return E_NOTIMPL
;}
350 STDMETHODIMP
CBaseGraph::AbortOperation() {return E_NOTIMPL
;}
353 STDMETHODIMP_(engine_t
) CBaseGraph::GetEngine() {return DirectShow
;}