AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
amextra.cpp
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // File: AMExtra.cpp
3 //
4 // Desc: DirectShow base classes - implements CRenderedInputPin class.
5 //
6 // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
7 //------------------------------------------------------------------------------
8 
9 
10 #include <streams.h> // DirectShow base class definitions
11 #include <mmsystem.h> // Needed for definition of timeGetTime
12 #include <limits.h> // Standard data type limit definitions
13 #include <measure.h> // Used for time critical log functions
14 
15 #include "amextra.h"
16 
17 #pragma warning(disable:4355)
18 
19 // Implements CRenderedInputPin class
20 
21 CRenderedInputPin::CRenderedInputPin(__in_opt LPCTSTR pObjectName,
22  __in CBaseFilter *pFilter,
23  __in CCritSec *pLock,
24  __inout HRESULT *phr,
25  __in_opt LPCWSTR pName) :
26  CBaseInputPin(pObjectName, pFilter, pLock, phr, pName),
27  m_bAtEndOfStream(FALSE),
28  m_bCompleteNotified(FALSE)
29 {
30 }
31 #ifdef UNICODE
32 CRenderedInputPin::CRenderedInputPin(__in_opt LPCSTR pObjectName,
33  __in CBaseFilter *pFilter,
34  __in CCritSec *pLock,
35  __inout HRESULT *phr,
36  __in_opt LPCWSTR pName) :
37  CBaseInputPin(pObjectName, pFilter, pLock, phr, pName),
38  m_bAtEndOfStream(FALSE),
39  m_bCompleteNotified(FALSE)
40 {
41 }
42 #endif
43 
44 // Flush end of stream condition - caller should do any
45 // necessary stream level locking before calling this
46 
48 {
49  HRESULT hr = CheckStreaming();
50 
51  // Do EC_COMPLETE handling for rendered pins
52  if (S_OK == hr && !m_bAtEndOfStream) {
53  m_bAtEndOfStream = TRUE;
54  FILTER_STATE fs;
55  EXECUTE_ASSERT(SUCCEEDED(m_pFilter->GetState(0, &fs)));
56  if (fs == State_Running) {
57  DoCompleteHandling();
58  }
59  }
60  return hr;
61 }
62 
63 
64 // Called to complete the flush
65 
67 {
68  CAutoLock lck(m_pLock);
69 
70  // Clean up renderer state
71  m_bAtEndOfStream = FALSE;
72  m_bCompleteNotified = FALSE;
73 
74  return CBaseInputPin::EndFlush();
75 }
76 
77 
78 // Notify of Run() from filter
79 
80 HRESULT CRenderedInputPin::Run(REFERENCE_TIME tStart)
81 {
82  UNREFERENCED_PARAMETER(tStart);
83  m_bCompleteNotified = FALSE;
84  if (m_bAtEndOfStream) {
85  DoCompleteHandling();
86  }
87  return S_OK;
88 }
89 
90 
91 // Clear status on going into paused state
92 
94 {
95  m_bAtEndOfStream = FALSE;
96  m_bCompleteNotified = FALSE;
97  return CBaseInputPin::Active();
98 }
99 
100 
101 // Do stuff to deliver end of stream
102 
103 void CRenderedInputPin::DoCompleteHandling()
104 {
106  if (!m_bCompleteNotified) {
107  m_bCompleteNotified = TRUE;
108  m_pFilter->NotifyEvent(EC_COMPLETE, S_OK, (LONG_PTR)(IBaseFilter *)m_pFilter);
109  }
110 }
111 
CBasePin::m_pLock
CCritSec * m_pLock
Definition: amfilter.h:338
CBaseFilter::NotifyEvent
HRESULT NotifyEvent(long EventCode, LONG_PTR EventParam1, LONG_PTR EventParam2)
Definition: amfilter.cpp:811
CBasePin::Active
virtual HRESULT Active(void)
Definition: amfilter.cpp:2375
streams.h
CAutoLock
Definition: wxutil.h:83
CRenderedInputPin::Run
HRESULT Run(REFERENCE_TIME tStart)
Definition: amextra.cpp:80
pName
CHAR * pName
Definition: amvideo.cpp:26
CBaseInputPin::CheckStreaming
virtual HRESULT CheckStreaming()
Definition: amfilter.cpp:3191
CCritSec
Definition: wxutil.h:18
CRenderedInputPin::EndFlush
STDMETHODIMP EndFlush()
Definition: amextra.cpp:66
EXECUTE_ASSERT
#define EXECUTE_ASSERT(_x_)
Definition: wxdebug.h:207
CRenderedInputPin::m_bAtEndOfStream
BOOL m_bAtEndOfStream
Definition: amextra.h:48
CRenderedInputPin::Active
HRESULT Active()
Definition: amextra.cpp:93
CBaseFilter
Definition: amfilter.h:148
CBaseInputPin::EndFlush
STDMETHODIMP EndFlush(void)
Definition: amfilter.cpp:3129
CBasePin::m_pFilter
CBaseFilter * m_pFilter
Definition: amfilter.h:343
CRenderedInputPin::EndOfStream
STDMETHODIMP EndOfStream()
Definition: amextra.cpp:47
CBaseInputPin
Definition: amfilter.h:819
CRenderedInputPin::m_bCompleteNotified
BOOL m_bCompleteNotified
Definition: amextra.h:49
CRenderedInputPin::CRenderedInputPin
CRenderedInputPin(__in_opt LPCTSTR pObjectName, __in CBaseFilter *pFilter, __in CCritSec *pLock, __inout HRESULT *phr, __in_opt LPCWSTR pName)
Definition: amextra.cpp:21
CBaseFilter::GetState
STDMETHODIMP GetState(DWORD dwMSecs, __out FILTER_STATE *State)
Definition: amfilter.cpp:456
ASSERT
#define ASSERT(_x_)
Definition: wxdebug.h:205
hr
__out HRESULT & hr
Definition: pstream.cpp:145
measure.h
amextra.h