BaseGraph.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:16k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  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.
  14.  *   
  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
  19.  *
  20.  */
  21. #include "stdafx.h"
  22. #include "basegraph.h"
  23. #include "....DSUtilDSUtil.h"
  24. //
  25. // CPlayerWindow
  26. //
  27. BOOL CPlayerWindow::PreCreateWindow(CREATESTRUCT& cs) 
  28. {
  29. if(!CWnd::PreCreateWindow(cs))
  30. return FALSE;
  31. cs.style &= ~WS_BORDER;
  32. cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
  33. ::LoadCursor(NULL, IDC_HAND), NULL, NULL);
  34. return TRUE;
  35. }
  36. BEGIN_MESSAGE_MAP(CPlayerWindow, CWnd)
  37. ON_WM_ERASEBKGND()
  38. END_MESSAGE_MAP()
  39. BOOL CPlayerWindow::OnEraseBkgnd(CDC* pDC)
  40. {
  41. for(CWnd* pChild = GetWindow(GW_CHILD); pChild; pChild = pChild->GetNextWindow())
  42. {
  43. if(!pChild->IsWindowVisible()) continue;
  44. CRect r;
  45. pChild->GetClientRect(&r);
  46. pChild->MapWindowPoints(this, &r);
  47. pDC->ExcludeClipRect(&r);
  48. }
  49. CRect r;
  50. GetClientRect(&r);
  51. pDC->FillSolidRect(&r, 0);
  52. return TRUE;
  53. }
  54. //
  55. // CBaseGraph
  56. //
  57. CBaseGraph::CBaseGraph()
  58. : CUnknown(NAME("CBaseGraph"), NULL)
  59. , m_hNotifyWnd(NULL)
  60. {
  61. }
  62. CBaseGraph::~CBaseGraph()
  63. {
  64. }
  65. STDMETHODIMP CBaseGraph::NonDelegatingQueryInterface(REFIID riid, void** ppv)
  66. {
  67.     CheckPointer(ppv, E_POINTER);
  68. return 
  69. QI(IFilterGraph)
  70. QI(IGraphBuilder)
  71. QI(IFilterGraph2)
  72. QI(IGraphBuilder2)
  73. QI(IMediaControl)
  74. QI(IMediaSeeking)
  75. QI(IMediaEventEx)
  76. QI(IVideoWindow)
  77. QI(IBasicVideo)
  78. QI(IBasicAudio)
  79. QI(IAMOpenProgress)
  80. QI(IGraphEngine)
  81. __super::NonDelegatingQueryInterface(riid, ppv);
  82. }
  83. void CBaseGraph::ClearMessageQueue()
  84. {
  85. while(!m_msgqueue.IsEmpty())
  86. {
  87. GMSG msg = m_msgqueue.RemoveHead();
  88. FreeEventParams(msg.m_lEventCode, msg.m_lParam1, msg.m_lParam2);
  89. }
  90. }
  91. void CBaseGraph::NotifyEvent(long lEventCode, LONG_PTR lParam1, LONG_PTR lParam2)
  92. {
  93. if(!m_hNotifyWnd) return;
  94. GMSG msg;
  95. msg.m_lEventCode = lEventCode;
  96. msg.m_lParam1 = lParam1;
  97. msg.m_lParam2 = lParam2;
  98. m_msgqueue.AddTail(msg);
  99. PostMessage((HWND)m_hNotifyWnd, m_lNotifyMsg, 0, m_lNotifyInstData);
  100. }
  101. // IDispatch
  102. STDMETHODIMP CBaseGraph::GetTypeInfoCount(UINT* pctinfo) {return E_NOTIMPL;}
  103. STDMETHODIMP CBaseGraph::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) {return E_NOTIMPL;}
  104. STDMETHODIMP CBaseGraph::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) {return E_NOTIMPL;}
  105. STDMETHODIMP CBaseGraph::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) {return E_NOTIMPL;}
  106. // IFilterGraph
  107. STDMETHODIMP CBaseGraph::AddFilter(IBaseFilter* pFilter, LPCWSTR pName) {return E_NOTIMPL;}
  108. STDMETHODIMP CBaseGraph::RemoveFilter(IBaseFilter* pFilter) {return E_NOTIMPL;}
  109. STDMETHODIMP CBaseGraph::EnumFilters(IEnumFilters** ppEnum) {return E_NOTIMPL;}
  110. STDMETHODIMP CBaseGraph::FindFilterByName(LPCWSTR pName, IBaseFilter** ppFilter) {return E_NOTIMPL;}
  111. STDMETHODIMP CBaseGraph::ConnectDirect(IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
  112. STDMETHODIMP CBaseGraph::Reconnect(IPin* ppin) {return E_NOTIMPL;}
  113. STDMETHODIMP CBaseGraph::Disconnect(IPin* ppin) {return E_NOTIMPL;}
  114. STDMETHODIMP CBaseGraph::SetDefaultSyncSource() {return E_NOTIMPL;}
  115. // IGraphBuilder
  116. STDMETHODIMP CBaseGraph::Connect(IPin* ppinOut, IPin* ppinIn) {return E_NOTIMPL;}
  117. STDMETHODIMP CBaseGraph::Render(IPin* ppinOut) {return E_NOTIMPL;}
  118. STDMETHODIMP CBaseGraph::RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList) {return E_NOTIMPL;}
  119. STDMETHODIMP CBaseGraph::AddSourceFilter(LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) {*ppFilter = NULL; return RenderFile(lpcwstrFileName, NULL);}//E_NOTIMPL;}
  120. STDMETHODIMP CBaseGraph::SetLogFile(DWORD_PTR hFile) {return E_NOTIMPL;}
  121. STDMETHODIMP CBaseGraph::Abort() {return E_NOTIMPL;}
  122. STDMETHODIMP CBaseGraph::ShouldOperationContinue() {return E_NOTIMPL;}
  123. // IFilterGraph2
  124. STDMETHODIMP CBaseGraph::AddSourceFilterForMoniker(IMoniker* pMoniker, IBindCtx* pCtx, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) {return E_NOTIMPL;}
  125. STDMETHODIMP CBaseGraph::ReconnectEx(IPin* ppin, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
  126. STDMETHODIMP CBaseGraph::RenderEx(IPin* pPinOut, DWORD dwFlags, DWORD* pvContext) {return E_NOTIMPL;}
  127. // IGraphBuilder2
  128. STDMETHODIMP CBaseGraph::IsPinDirection(IPin* pPin, PIN_DIRECTION dir) {return E_NOTIMPL;}
  129. STDMETHODIMP CBaseGraph::IsPinConnected(IPin* pPin) {return E_NOTIMPL;}
  130. STDMETHODIMP CBaseGraph::ConnectFilter(IBaseFilter* pBF, IPin* pPinIn) {return E_NOTIMPL;}
  131. STDMETHODIMP CBaseGraph::ConnectFilter(IPin* pPinOut, IBaseFilter* pBF) {return E_NOTIMPL;}
  132. STDMETHODIMP CBaseGraph::ConnectFilterDirect(IPin* pPinOut, IBaseFilter* pBF, const AM_MEDIA_TYPE* pmt) {return E_NOTIMPL;}
  133. STDMETHODIMP CBaseGraph::NukeDownstream(IUnknown* pUnk) {return E_NOTIMPL;}
  134. STDMETHODIMP CBaseGraph::FindInterface(REFIID iid, void** ppv, BOOL bRemove) {return QueryInterface(iid, ppv);}
  135. STDMETHODIMP CBaseGraph::AddToROT() {return E_NOTIMPL;}
  136. STDMETHODIMP CBaseGraph::RemoveFromROT() {return E_NOTIMPL;}
  137. // IMediaControl
  138. STDMETHODIMP CBaseGraph::Run() {return E_NOTIMPL;}
  139. STDMETHODIMP CBaseGraph::Pause() {return E_NOTIMPL;}
  140. STDMETHODIMP CBaseGraph::Stop() {return E_NOTIMPL;}
  141. STDMETHODIMP CBaseGraph::GetState(LONG msTimeout, OAFilterState* pfs) {return E_NOTIMPL;}
  142. STDMETHODIMP CBaseGraph::RenderFile(BSTR strFilename) {return E_NOTIMPL;}
  143. STDMETHODIMP CBaseGraph::AddSourceFilter(BSTR strFilename, IDispatch** ppUnk) {return E_NOTIMPL;}
  144. STDMETHODIMP CBaseGraph::get_FilterCollection(IDispatch** ppUnk) {return E_NOTIMPL;}
  145. STDMETHODIMP CBaseGraph::get_RegFilterCollection(IDispatch** ppUnk) {return E_NOTIMPL;}
  146. STDMETHODIMP CBaseGraph::StopWhenReady() {return Stop();}
  147. // IMediaEvent
  148. STDMETHODIMP CBaseGraph::GetEventHandle(OAEVENT* hEvent) {return E_NOTIMPL;}
  149. STDMETHODIMP CBaseGraph::GetEvent(long* lEventCode, LONG_PTR* lParam1, LONG_PTR* lParam2, long msTimeout)
  150. {
  151. if(m_msgqueue.IsEmpty()) return E_FAIL;
  152. GMSG msg = m_msgqueue.RemoveHead();
  153. if(lEventCode) *lEventCode = msg.m_lEventCode;
  154. if(lParam1) *lParam1 = msg.m_lParam1;
  155. if(lParam2) *lParam2 = msg.m_lParam2;
  156. return S_OK;
  157. }
  158. STDMETHODIMP CBaseGraph::WaitForCompletion(long msTimeout, long* pEvCode) {return E_NOTIMPL;}
  159. STDMETHODIMP CBaseGraph::CancelDefaultHandling(long lEvCode) {return E_NOTIMPL;}
  160. STDMETHODIMP CBaseGraph::RestoreDefaultHandling(long lEvCode) {return E_NOTIMPL;}
  161. STDMETHODIMP CBaseGraph::FreeEventParams(long lEvCode, LONG_PTR lParam1, LONG_PTR lParam2)
  162. {
  163. if(EC_BG_ERROR == lEvCode)
  164. {
  165. if(lParam1) CoTaskMemFree((void*)lParam1);
  166. }
  167. return S_OK;
  168. }
  169. // IMediaEventEx
  170. STDMETHODIMP CBaseGraph::SetNotifyWindow(OAHWND hwnd, long lMsg, LONG_PTR lInstanceData)
  171. {
  172. m_hNotifyWnd = hwnd;
  173. m_lNotifyMsg = lMsg;
  174. m_lNotifyInstData = lInstanceData;
  175. if(!IsWindow((HWND)m_hNotifyWnd)) 
  176. {
  177. m_hNotifyWnd = NULL;
  178. return E_FAIL;
  179. }
  180. return S_OK;
  181. }
  182. STDMETHODIMP CBaseGraph::SetNotifyFlags(long lNoNotifyFlags) {return E_NOTIMPL;}
  183. STDMETHODIMP CBaseGraph::GetNotifyFlags(long* lplNoNotifyFlags) {return E_NOTIMPL;}
  184. // IMediaSeeking
  185. STDMETHODIMP CBaseGraph::GetCapabilities(DWORD* pCapabilities)
  186. {
  187. return pCapabilities ? *pCapabilities = AM_SEEKING_CanSeekAbsolute|AM_SEEKING_CanGetCurrentPos|AM_SEEKING_CanGetDuration, S_OK : E_POINTER;
  188. }
  189. STDMETHODIMP CBaseGraph::CheckCapabilities(DWORD* pCapabilities)
  190. {
  191. CheckPointer(pCapabilities, E_POINTER);
  192. if(*pCapabilities == 0) return S_OK;
  193. DWORD caps;
  194. GetCapabilities(&caps);
  195. DWORD caps2 = caps & *pCapabilities;
  196. return caps2 == 0 ? E_FAIL : caps2 == *pCapabilities ? S_OK : S_FALSE;
  197. }
  198. STDMETHODIMP CBaseGraph::IsFormatSupported(const GUID* pFormat)
  199. {
  200. return !pFormat ? E_POINTER : *pFormat == TIME_FORMAT_MEDIA_TIME ? S_OK : S_FALSE;
  201. }
  202. STDMETHODIMP CBaseGraph::QueryPreferredFormat(GUID* pFormat)
  203. {
  204. return GetTimeFormat(pFormat);
  205. }
  206. STDMETHODIMP CBaseGraph::GetTimeFormat(GUID* pFormat)
  207. {
  208. return pFormat ? *pFormat = TIME_FORMAT_MEDIA_TIME, S_OK : E_POINTER;
  209. }
  210. STDMETHODIMP CBaseGraph::IsUsingTimeFormat(const GUID* pFormat)
  211. {
  212. return IsFormatSupported(pFormat);
  213. }
  214. STDMETHODIMP CBaseGraph::SetTimeFormat(const GUID* pFormat)
  215. {
  216. return S_OK == IsFormatSupported(pFormat) ? S_OK : E_INVALIDARG;
  217. }
  218. STDMETHODIMP CBaseGraph::GetDuration(LONGLONG* pDuration) {return E_NOTIMPL;}
  219. STDMETHODIMP CBaseGraph::GetStopPosition(LONGLONG* pStop) {return E_NOTIMPL;}
  220. STDMETHODIMP CBaseGraph::GetCurrentPosition(LONGLONG* pCurrent) {return E_NOTIMPL;}
  221. STDMETHODIMP CBaseGraph::ConvertTimeFormat(LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat) {return E_NOTIMPL;}
  222. STDMETHODIMP CBaseGraph::SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags) {return E_NOTIMPL;}
  223. STDMETHODIMP CBaseGraph::GetPositions(LONGLONG* pCurrent, LONGLONG* pStop) {return E_NOTIMPL;}
  224. STDMETHODIMP CBaseGraph::GetAvailable(LONGLONG* pEarliest, LONGLONG* pLatest) {return E_NOTIMPL;}
  225. STDMETHODIMP CBaseGraph::SetRate(double dRate) {return E_NOTIMPL;}
  226. STDMETHODIMP CBaseGraph::GetRate(double* pdRate) {return E_NOTIMPL;}
  227. STDMETHODIMP CBaseGraph::GetPreroll(LONGLONG* pllPreroll) {return E_NOTIMPL;}
  228. // IVideoWindow
  229. STDMETHODIMP CBaseGraph::put_Caption(BSTR strCaption) {return E_NOTIMPL;}    
  230. STDMETHODIMP CBaseGraph::get_Caption(BSTR* strCaption) {return E_NOTIMPL;}
  231. STDMETHODIMP CBaseGraph::put_WindowStyle(long WindowStyle) {return E_NOTIMPL;}
  232. STDMETHODIMP CBaseGraph::get_WindowStyle(long* WindowStyle) {return E_NOTIMPL;}
  233. STDMETHODIMP CBaseGraph::put_WindowStyleEx(long WindowStyleEx) {return E_NOTIMPL;}
  234. STDMETHODIMP CBaseGraph::get_WindowStyleEx(long* WindowStyleEx) {return E_NOTIMPL;}
  235. STDMETHODIMP CBaseGraph::put_AutoShow(long AutoShow) {return E_NOTIMPL;}
  236. STDMETHODIMP CBaseGraph::get_AutoShow(long* AutoShow) {return E_NOTIMPL;}
  237. STDMETHODIMP CBaseGraph::put_WindowState(long WindowState) {return E_NOTIMPL;}
  238. STDMETHODIMP CBaseGraph::get_WindowState(long* WindowState) {return E_NOTIMPL;}
  239. STDMETHODIMP CBaseGraph::put_BackgroundPalette(long BackgroundPalette) {return E_NOTIMPL;}
  240. STDMETHODIMP CBaseGraph::get_BackgroundPalette(long* pBackgroundPalette) {return E_NOTIMPL;}
  241. STDMETHODIMP CBaseGraph::put_Visible(long Visible) {return E_NOTIMPL;}
  242. STDMETHODIMP CBaseGraph::get_Visible(long* pVisible) {return E_NOTIMPL;}
  243. STDMETHODIMP CBaseGraph::put_Left(long Left) {return E_NOTIMPL;}
  244. STDMETHODIMP CBaseGraph::get_Left(long* pLeft) {return E_NOTIMPL;}
  245. STDMETHODIMP CBaseGraph::put_Width(long Width) {return E_NOTIMPL;}
  246. STDMETHODIMP CBaseGraph::get_Width(long* pWidth) {return E_NOTIMPL;}
  247. STDMETHODIMP CBaseGraph::put_Top(long Top) {return E_NOTIMPL;}
  248. STDMETHODIMP CBaseGraph::get_Top(long* pTop) {return E_NOTIMPL;}
  249. STDMETHODIMP CBaseGraph::put_Height(long Height) {return E_NOTIMPL;}
  250. STDMETHODIMP CBaseGraph::get_Height(long* pHeight) {return E_NOTIMPL;}
  251. STDMETHODIMP CBaseGraph::put_Owner(OAHWND Owner) {return E_NOTIMPL;}
  252. STDMETHODIMP CBaseGraph::get_Owner(OAHWND* Owner) {return E_NOTIMPL;}
  253. STDMETHODIMP CBaseGraph::put_MessageDrain(OAHWND Drain) {return E_NOTIMPL;}
  254. STDMETHODIMP CBaseGraph::get_MessageDrain(OAHWND* Drain) {return E_NOTIMPL;}
  255. STDMETHODIMP CBaseGraph::get_BorderColor(long* Color) {return E_NOTIMPL;}
  256. STDMETHODIMP CBaseGraph::put_BorderColor(long Color) {return E_NOTIMPL;}
  257. STDMETHODIMP CBaseGraph::get_FullScreenMode(long* FullScreenMode) {return E_NOTIMPL;}
  258. STDMETHODIMP CBaseGraph::put_FullScreenMode(long FullScreenMode) {return E_NOTIMPL;}
  259. STDMETHODIMP CBaseGraph::SetWindowForeground(long Focus) {return E_NOTIMPL;}
  260. STDMETHODIMP CBaseGraph::NotifyOwnerMessage(OAHWND hwnd, long uMsg, LONG_PTR wParam, LONG_PTR lParam) {return E_NOTIMPL;}
  261. STDMETHODIMP CBaseGraph::SetWindowPosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
  262. STDMETHODIMP CBaseGraph::GetWindowPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
  263. STDMETHODIMP CBaseGraph::GetMinIdealImageSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
  264. STDMETHODIMP CBaseGraph::GetMaxIdealImageSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
  265. STDMETHODIMP CBaseGraph::GetRestorePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
  266. STDMETHODIMP CBaseGraph::HideCursor(long HideCursor) {return E_NOTIMPL;}
  267. STDMETHODIMP CBaseGraph::IsCursorHidden(long* CursorHidden) {return E_NOTIMPL;}
  268. // IBasicVideo
  269. STDMETHODIMP CBaseGraph::get_AvgTimePerFrame(REFTIME* pAvgTimePerFrame) {return E_NOTIMPL;}
  270. STDMETHODIMP CBaseGraph::get_BitRate(long* pBitRate) {return E_NOTIMPL;}
  271. STDMETHODIMP CBaseGraph::get_BitErrorRate(long* pBitErrorRate) {return E_NOTIMPL;}
  272. STDMETHODIMP CBaseGraph::get_VideoWidth(long* pVideoWidth) {return E_NOTIMPL;}
  273. STDMETHODIMP CBaseGraph::get_VideoHeight(long* pVideoHeight) {return E_NOTIMPL;}
  274. STDMETHODIMP CBaseGraph::put_SourceLeft(long SourceLeft) {return E_NOTIMPL;}
  275. STDMETHODIMP CBaseGraph::get_SourceLeft(long* pSourceLeft) {return E_NOTIMPL;}
  276. STDMETHODIMP CBaseGraph::put_SourceWidth(long SourceWidth) {return E_NOTIMPL;}
  277. STDMETHODIMP CBaseGraph::get_SourceWidth(long* pSourceWidth) {return E_NOTIMPL;}
  278. STDMETHODIMP CBaseGraph::put_SourceTop(long SourceTop) {return E_NOTIMPL;}
  279. STDMETHODIMP CBaseGraph::get_SourceTop(long* pSourceTop) {return E_NOTIMPL;}
  280. STDMETHODIMP CBaseGraph::put_SourceHeight(long SourceHeight) {return E_NOTIMPL;}
  281. STDMETHODIMP CBaseGraph::get_SourceHeight(long* pSourceHeight) {return E_NOTIMPL;}
  282. STDMETHODIMP CBaseGraph::put_DestinationLeft(long DestinationLeft) {return E_NOTIMPL;}
  283. STDMETHODIMP CBaseGraph::get_DestinationLeft(long* pDestinationLeft) {return E_NOTIMPL;}
  284. STDMETHODIMP CBaseGraph::put_DestinationWidth(long DestinationWidth) {return E_NOTIMPL;}
  285. STDMETHODIMP CBaseGraph::get_DestinationWidth(long* pDestinationWidth) {return E_NOTIMPL;}
  286. STDMETHODIMP CBaseGraph::put_DestinationTop(long DestinationTop) {return E_NOTIMPL;}
  287. STDMETHODIMP CBaseGraph::get_DestinationTop(long* pDestinationTop) {return E_NOTIMPL;}
  288. STDMETHODIMP CBaseGraph::put_DestinationHeight(long DestinationHeight) {return E_NOTIMPL;}
  289. STDMETHODIMP CBaseGraph::get_DestinationHeight(long* pDestinationHeight) {return E_NOTIMPL;}
  290. STDMETHODIMP CBaseGraph::SetSourcePosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
  291. STDMETHODIMP CBaseGraph::GetSourcePosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
  292. STDMETHODIMP CBaseGraph::SetDefaultSourcePosition() {return E_NOTIMPL;}
  293. STDMETHODIMP CBaseGraph::SetDestinationPosition(long Left, long Top, long Width, long Height) {return E_NOTIMPL;}
  294. STDMETHODIMP CBaseGraph::GetDestinationPosition(long* pLeft, long* pTop, long* pWidth, long* pHeight) {return E_NOTIMPL;}
  295. STDMETHODIMP CBaseGraph::SetDefaultDestinationPosition() {return E_NOTIMPL;}
  296. STDMETHODIMP CBaseGraph::GetVideoSize(long* pWidth, long* pHeight) {return E_NOTIMPL;}
  297. STDMETHODIMP CBaseGraph::GetVideoPaletteEntries(long StartIndex, long Entries, long* pRetrieved, long* pPalette) {return E_NOTIMPL;}
  298. STDMETHODIMP CBaseGraph::GetCurrentImage(long* pBufferSize, long* pDIBImage) {return E_NOTIMPL;}
  299. STDMETHODIMP CBaseGraph::IsUsingDefaultSource() {return E_NOTIMPL;}
  300. STDMETHODIMP CBaseGraph::IsUsingDefaultDestination() {return E_NOTIMPL;}
  301. // IBasicAudio
  302. STDMETHODIMP CBaseGraph::put_Volume(long lVolume) {return E_NOTIMPL;}
  303. STDMETHODIMP CBaseGraph::get_Volume(long* plVolume) {return E_NOTIMPL;}
  304. STDMETHODIMP CBaseGraph::put_Balance(long lBalance) {return E_NOTIMPL;}
  305. STDMETHODIMP CBaseGraph::get_Balance(long* plBalance) {return E_NOTIMPL;}
  306. // IAMOpenProgress
  307. STDMETHODIMP CBaseGraph::QueryProgress(LONGLONG* pllTotal, LONGLONG* pllCurrent) {return E_NOTIMPL;}
  308. STDMETHODIMP CBaseGraph::AbortOperation() {return E_NOTIMPL;}
  309. // IGraphEngine
  310. STDMETHODIMP_(engine_t) CBaseGraph::GetEngine() {return DirectShow;}