Empfangen und Bereitstellen von Beispielen
Der folgende Pseudocode zeigt, wie die IMemInput::Receive-Methode implementiert wird:
HRESULT CMyInputPin::Receive(IMediaSample *pSample)
{
CAutoLock cObjectLock(&m_csReceive);
// Perhaps the filter needs to wait on something.
WaitForSingleObject(m_hSomeEventThatReceiveNeedsToWaitOn, INFINITE);
// Before using resources, make sure it is safe to proceed. Do not
// continue if the base-class method returns anything besides S_OK.
hr = CBaseInputPin::Receive(pSample);
if (hr != S_OK)
{
return hr;
}
/* It is safe to use resources allocated in Active and Pause. */
// Deliver sample(s), via your output pin(s).
for (each output pin)
pOutputPin->Deliver(pSample);
return hr;
}
Die Receive-Methode enthält die Streamingsperre, nicht die Filtersperre. Der Filter muss möglicherweise auf ein Ereignis warten, bevor er die Daten verarbeiten kann. Dies wird hier durch den Aufruf von WaitForSingleObject gezeigt. Nicht jeder Filter muss dies tun. Die CBaseInputPin::Receive-Methode überprüft einige allgemeine Streamingbedingungen. Sie gibt VFW E WRONG STATE zurück, wenn der Filter beendet wurde, S FALSE, wenn der Filter geleert _ _ wird _ _ usw. Jeder Rückgabecode, der nicht S OK ist, gibt an, dass die Receive-Methode sofort zurückgeben _ und das Beispiel nicht verarbeiten soll.
Nachdem das Beispiel verarbeitet wurde, stellen Sie es durch Aufrufen von CBaseOutputPin::D eliver an den Downstreamfilter. Diese Hilfsmethode ruft IMemInputPin::Receive für den Downstreameingabepin auf. Ein Filter kann Stichproben an mehrere Stecknadeln liefern.