Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
//==========================================================================;
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright (c) 1992 - 1998 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//--------------------------------------------------------------------------;
|
|
|
|
#include <streams.h> // ActiveMovie base class definitions
|
|
#include <mmsystem.h> // Needed for definition of timeGetTime
|
|
#include <limits.h> // Standard data type limit definitions
|
|
#include <measure.h> // Used for time critical log functions
|
|
|
|
#include "amextra.h"
|
|
|
|
#pragma warning(disable:4355)
|
|
|
|
// Implements CRenderedInputPin class
|
|
|
|
CRenderedInputPin::CRenderedInputPin(TCHAR *pObjectName,
|
|
CBaseFilter *pFilter,
|
|
CCritSec *pLock,
|
|
HRESULT *phr,
|
|
LPCWSTR pName) :
|
|
CBaseInputPin(pObjectName, pFilter, pLock, phr, pName),
|
|
m_bAtEndOfStream(FALSE),
|
|
m_bCompleteNotified(FALSE)
|
|
{
|
|
}
|
|
|
|
|
|
// Flush end of stream condition - caller should do any
|
|
// necessary stream level locking before calling this
|
|
|
|
STDMETHODIMP CRenderedInputPin::EndOfStream()
|
|
{
|
|
HRESULT hr = CheckStreaming();
|
|
|
|
// Do EC_COMPLETE handling for rendered pins
|
|
if (S_OK == hr && !m_bAtEndOfStream) {
|
|
m_bAtEndOfStream = TRUE;
|
|
FILTER_STATE fs;
|
|
EXECUTE_ASSERT(SUCCEEDED(m_pFilter->GetState(0, &fs)));
|
|
if (fs == State_Running) {
|
|
DoCompleteHandling();
|
|
}
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
|
|
// Called to complete the flush
|
|
|
|
STDMETHODIMP CRenderedInputPin::EndFlush()
|
|
{
|
|
CAutoLock lck(m_pLock);
|
|
|
|
// Clean up renderer state
|
|
m_bAtEndOfStream = FALSE;
|
|
m_bCompleteNotified = FALSE;
|
|
|
|
return CBaseInputPin::EndFlush();
|
|
}
|
|
|
|
|
|
// Notify of Run() from filter
|
|
|
|
HRESULT CRenderedInputPin::Run(REFERENCE_TIME tStart)
|
|
{
|
|
UNREFERENCED_PARAMETER(tStart);
|
|
m_bCompleteNotified = FALSE;
|
|
if (m_bAtEndOfStream) {
|
|
DoCompleteHandling();
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
// Clear status on going into paused state
|
|
|
|
HRESULT CRenderedInputPin::Active()
|
|
{
|
|
m_bAtEndOfStream = FALSE;
|
|
m_bCompleteNotified = FALSE;
|
|
return CBaseInputPin::Active();
|
|
}
|
|
|
|
|
|
// Do stuff to deliver end of stream
|
|
|
|
void CRenderedInputPin::DoCompleteHandling()
|
|
{
|
|
ASSERT(m_bAtEndOfStream);
|
|
if (!m_bCompleteNotified) {
|
|
m_bCompleteNotified = TRUE;
|
|
m_pFilter->NotifyEvent(EC_COMPLETE, S_OK, (long)(IBaseFilter *)m_pFilter);
|
|
}
|
|
}
|
|
|