From bd76820d63a091925fd5af37683e840d7419de6f Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Wed, 21 May 2008 14:33:47 -0700 Subject: [PATCH] quartz: Do timekeeping in avi decoder --- dlls/quartz/avidec.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-) diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index d449662..3f0aed7 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -78,12 +78,13 @@ static HRESULT AVIDec_ProcessSampleData(TransformFilterImpl* pTransformFilter, I LPBYTE pbDstStream; DWORD cbSrcStream; LPBYTE pbSrcStream; + LONGLONG tStart, tStop; hr = IMediaSample_GetPointer(pSample, &pbSrcStream); if (FAILED(hr)) { ERR("Cannot get pointer to sample data (%x)\n", hr); - return hr; + return hr; } cbSrcStream = IMediaSample_GetActualDataLength(pSample); @@ -92,8 +93,8 @@ static HRESULT AVIDec_ProcessSampleData(TransformFilterImpl* pTransformFilter, I hr = IPin_ConnectionMediaType(This->tf.ppPins[0], &amt); if (FAILED(hr)) { - ERR("Unable to retrieve media type\n"); - goto error; + ERR("Unable to retrieve media type\n"); + goto error; } /* Update input size to match sample size */ @@ -124,6 +125,16 @@ static HRESULT AVIDec_ProcessSampleData(TransformFilterImpl* pTransformFilter, I if (res != ICERR_OK) ERR("Error occurred during the decompression (%x)\n", res); + + IMediaSample_SetPreroll(pOutSample, (IMediaSample_IsPreroll(pSample) == S_OK)); + IMediaSample_SetDiscontinuity(pOutSample, (IMediaSample_IsDiscontinuity(pSample) == S_OK)); + IMediaSample_SetSyncPoint(pOutSample, (IMediaSample_IsSyncPoint(pSample) == S_OK)); + + if (IMediaSample_GetTime(pSample, &tStart, &tStop) == S_OK) + IMediaSample_SetTime(pOutSample, &tStart, &tStop); + else + IMediaSample_SetTime(pOutSample, NULL, NULL); + hr = OutputPin_SendSample((OutputPin*)This->tf.ppPins[1], pOutSample); if (hr != S_OK && hr != VFW_E_NOT_CONNECTED) { ERR("Error sending sample (%x)\n", hr); -- 1.5.4.1