mirror of
https://github.com/reactos/wine.git
synced 2025-01-23 04:15:48 +00:00
Revert "quartz: Handle failures better in acmwrapper.".
This reverts commit 1ba8ece76e1b87f43270edb1324c31b818e8162e. Code for holding sample doesn't make sense and shouldn't be there because it should really be handled by keeping track of the last successful position of a frame sent and aborting the whole processing as soon as rejection occurs.
This commit is contained in:
parent
edacd984ef
commit
4afc2ae951
@ -48,9 +48,6 @@ typedef struct ACMWrapperImpl
|
||||
LPWAVEFORMATEX pWfIn;
|
||||
LPWAVEFORMATEX pWfOut;
|
||||
|
||||
IMediaSample *recv, *xmit;
|
||||
ULONG done;
|
||||
|
||||
LONGLONG lasttime_real;
|
||||
LONGLONG lasttime_sent;
|
||||
} ACMWrapperImpl;
|
||||
@ -69,61 +66,32 @@ static HRESULT ACMWrapper_ProcessSampleData(TransformFilterImpl* pTransformFilte
|
||||
HRESULT hr;
|
||||
LONGLONG tStart = -1, tStop = -1, tMed;
|
||||
|
||||
assert(pSample);
|
||||
|
||||
if (This->xmit)
|
||||
{
|
||||
hr = OutputPin_SendSample((OutputPin*)This->tf.ppPins[1], This->xmit);
|
||||
if (hr != S_OK)
|
||||
return hr;
|
||||
IMediaSample_Release(This->xmit);
|
||||
This->xmit = NULL;
|
||||
}
|
||||
|
||||
hr = IMediaSample_GetPointer(pSample, &pbSrcStream);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ERR("Cannot get pointer to sample data (%x)\n", hr);
|
||||
return hr;
|
||||
}
|
||||
cbSrcStream = IMediaSample_GetActualDataLength(pSample);
|
||||
|
||||
preroll = (IMediaSample_IsPreroll(pSample) == S_OK);
|
||||
|
||||
if (pSample != This->recv)
|
||||
IMediaSample_GetTime(pSample, &tStart, &tStop);
|
||||
cbSrcStream = IMediaSample_GetActualDataLength(pSample);
|
||||
|
||||
/* Prevent discontinuities when codecs 'absorb' data but not give anything back in return */
|
||||
if (IMediaSample_IsDiscontinuity(pSample) == S_OK)
|
||||
{
|
||||
if (This->recv)
|
||||
{
|
||||
/* Get rid of buffered sample first */
|
||||
hr = ACMWrapper_ProcessSampleData(pTransformFilter, This->recv);
|
||||
if (hr != S_OK)
|
||||
return hr;
|
||||
if (This->recv)
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
IMediaSample_GetTime(pSample, &tStart, &tStop);
|
||||
|
||||
/* Prevent discontinuities when codecs 'absorb' data but not give anything back in return */
|
||||
if (IMediaSample_IsDiscontinuity(pSample) == S_OK)
|
||||
{
|
||||
This->lasttime_real = tStart;
|
||||
This->lasttime_sent = tStart;
|
||||
}
|
||||
else if (This->lasttime_real == tStart)
|
||||
tStart = This->lasttime_sent;
|
||||
else
|
||||
WARN("Discontinuity\n");
|
||||
This->lasttime_real = tStart;
|
||||
This->lasttime_sent = tStart;
|
||||
}
|
||||
else
|
||||
{
|
||||
else if (This->lasttime_real == tStart)
|
||||
tStart = This->lasttime_sent;
|
||||
tStop = This->lasttime_real;
|
||||
cbSrcStream -= This->done;
|
||||
pbSrcStream += This->done;
|
||||
}
|
||||
else
|
||||
WARN("Discontinuity\n");
|
||||
|
||||
tMed = tStart;
|
||||
|
||||
TRACE("Sample data ptr = %p, size = %u\n", pbSrcStream, cbSrcStream);
|
||||
TRACE("Sample data ptr = %p, size = %ld\n", pbSrcStream, (long)cbSrcStream);
|
||||
|
||||
hr = IPin_ConnectionMediaType(This->tf.ppPins[0], &amt);
|
||||
if (FAILED(hr)) {
|
||||
@ -233,44 +201,17 @@ error:
|
||||
ash.pbSrc += ash.cbSrcLengthUsed;
|
||||
ash.cbSrcLength -= ash.cbSrcLengthUsed;
|
||||
|
||||
if (hr == S_FALSE)
|
||||
{
|
||||
This->xmit = pOutSample;
|
||||
if (ash.cbSrcLength && !This->recv)
|
||||
{
|
||||
This->recv = pSample;
|
||||
IMediaSample_AddRef(This->recv);
|
||||
}
|
||||
else if (This->recv)
|
||||
{
|
||||
IMediaSample_Release(This->recv);
|
||||
This->recv = NULL;
|
||||
}
|
||||
|
||||
This->done = IMediaSample_GetActualDataLength(pSample) - ash.cbSrcLength;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pOutSample)
|
||||
IMediaSample_Release(pOutSample);
|
||||
pOutSample = NULL;
|
||||
|
||||
}
|
||||
|
||||
This->lasttime_real = tStop;
|
||||
This->lasttime_sent = tMed;
|
||||
|
||||
|
||||
if (hr != S_OK)
|
||||
FIXME("FATALITY: %08x\n", hr);
|
||||
else if (This->recv)
|
||||
{
|
||||
assert(This->recv == pSample);
|
||||
IMediaSample_Release(This->recv);
|
||||
This->recv = NULL;
|
||||
}
|
||||
|
||||
if (hr == S_FALSE)
|
||||
return S_OK;
|
||||
|
||||
return hr;
|
||||
}
|
||||
@ -336,13 +277,7 @@ static HRESULT ACMWrapper_Cleanup(TransformFilterImpl* pTransformFilter)
|
||||
|
||||
This->has = 0;
|
||||
This->lasttime_real = This->lasttime_sent = -1;
|
||||
if (This->recv)
|
||||
IMediaSample_Release(This->recv);
|
||||
|
||||
if (This->xmit)
|
||||
IMediaSample_Release(This->xmit);
|
||||
|
||||
This->recv = This->xmit = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@ -378,7 +313,6 @@ HRESULT ACMWrapper_create(IUnknown * pUnkOuter, LPVOID * ppv)
|
||||
|
||||
*ppv = (LPVOID)This;
|
||||
This->lasttime_real = This->lasttime_sent = -1;
|
||||
This->recv = This->xmit = NULL;
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user