1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //------------------------------------------------------------------------------
- // 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;
- }
|