Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'decoder/LAVVideo/LAVVideo.cpp')
-rw-r--r--decoder/LAVVideo/LAVVideo.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/decoder/LAVVideo/LAVVideo.cpp b/decoder/LAVVideo/LAVVideo.cpp
index da336f42..494a0283 100644
--- a/decoder/LAVVideo/LAVVideo.cpp
+++ b/decoder/LAVVideo/LAVVideo.cpp
@@ -1016,6 +1016,49 @@ HRESULT CLAVVideo::StartStreaming()
return S_OK;
}
+STDMETHODIMP CLAVVideo::Stop()
+{
+ CAutoLock lck1(&m_csFilter);
+ if (m_State == State_Stopped) {
+ return NOERROR;
+ }
+
+ // Succeed the Stop if we are not completely connected
+ ASSERT(m_pInput == NULL || m_pOutput != NULL);
+ if (m_pInput == NULL || m_pInput->IsConnected() == FALSE || m_pOutput->IsConnected() == FALSE) {
+ m_State = State_Stopped;
+ m_bEOSDelivered = FALSE;
+ return NOERROR;
+ }
+
+ ASSERT(m_pInput);
+ ASSERT(m_pOutput);
+
+ // block futher delivery to prevent lock issues
+ m_bFlushing = TRUE;
+
+ // decommit the input pin before locking or we can deadlock
+ m_pInput->Inactive();
+
+ // synchronize with Receive calls
+
+ CAutoLock lck2(&m_csReceive);
+ m_pOutput->Inactive();
+
+ // allow a class derived from CTransformFilter
+ // to know about starting and stopping streaming
+
+ HRESULT hr = StopStreaming();
+ if (SUCCEEDED(hr)) {
+ // complete the state transition
+ m_State = State_Stopped;
+ m_bEOSDelivered = FALSE;
+ }
+
+ m_bFlushing = FALSE;
+ return hr;
+}
+
HRESULT CLAVVideo::GetDeliveryBuffer(IMediaSample** ppOut, int width, int height, AVRational ar, DXVA2_ExtendedFormat dxvaExtFlags, REFERENCE_TIME avgFrameDuration)
{
CheckPointer(ppOut, E_POINTER);