summaryrefslogtreecommitdiff
path: root/third_party/BaseClasses/seekpt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/BaseClasses/seekpt.cpp')
-rw-r--r--third_party/BaseClasses/seekpt.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/third_party/BaseClasses/seekpt.cpp b/third_party/BaseClasses/seekpt.cpp
new file mode 100644
index 00000000..bb13d6f0
--- /dev/null
+++ b/third_party/BaseClasses/seekpt.cpp
@@ -0,0 +1,83 @@
+//------------------------------------------------------------------------------
+// File: SeekPT.cpp
+//
+// Desc: DirectShow base classes.
+//
+// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
+//------------------------------------------------------------------------------
+
+
+#include <streams.h>
+#include "seekpt.h"
+
+//==================================================================
+// CreateInstance
+// This goes in the factory template table to create new instances
+// If there is already a mapper instance - return that, else make one
+// and save it in a static variable so that forever after we can return that.
+//==================================================================
+
+CUnknown * CSeekingPassThru::CreateInstance(__inout_opt LPUNKNOWN pUnk, __inout HRESULT *phr)
+{
+ return new CSeekingPassThru(NAME("Seeking PassThru"),pUnk, phr);
+}
+
+
+STDMETHODIMP CSeekingPassThru::NonDelegatingQueryInterface(REFIID riid, __deref_out void ** ppv)
+{
+ if (riid == IID_ISeekingPassThru) {
+ return GetInterface((ISeekingPassThru *) this, ppv);
+ } else {
+ if (m_pPosPassThru &&
+ (riid == IID_IMediaSeeking ||
+ riid == IID_IMediaPosition)) {
+ return m_pPosPassThru->NonDelegatingQueryInterface(riid,ppv);
+ } else {
+ return CUnknown::NonDelegatingQueryInterface(riid, ppv);
+ }
+ }
+}
+
+
+CSeekingPassThru::CSeekingPassThru( __in_opt LPCTSTR pName, __inout_opt LPUNKNOWN pUnk, __inout HRESULT *phr )
+ : CUnknown(pName, pUnk, phr),
+ m_pPosPassThru(NULL)
+{
+}
+
+
+CSeekingPassThru::~CSeekingPassThru()
+{
+ delete m_pPosPassThru;
+}
+
+STDMETHODIMP CSeekingPassThru::Init(BOOL bRendererSeeking, IPin *pPin)
+{
+ HRESULT hr = NOERROR;
+ if (m_pPosPassThru) {
+ hr = E_FAIL;
+ } else {
+ m_pPosPassThru =
+ bRendererSeeking ?
+ new CRendererPosPassThru(
+ NAME("Render Seeking COM object"),
+ (IUnknown *)this,
+ &hr,
+ pPin) :
+ new CPosPassThru(
+ NAME("Render Seeking COM object"),
+ (IUnknown *)this,
+ &hr,
+ pPin);
+ if (!m_pPosPassThru) {
+ hr = E_OUTOFMEMORY;
+ } else {
+ if (FAILED(hr)) {
+ delete m_pPosPassThru;
+ m_pPosPassThru = NULL;
+ }
+ }
+ }
+ return hr;
+}
+