84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//------------------------------------------------------------------------------
 | 
						|
// 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;
 | 
						|
}
 | 
						|
 |