From f0ebe19bfcf28ff7e7b6524165bfa0cf175273d7 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Mon, 29 Nov 2010 10:44:17 +0100 Subject: [PATCH] quartz: Fix timestamping in avi decoder. --- dlls/quartz/avidec.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 02f76746f45..dcd8093daee 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -160,8 +160,8 @@ static HRESULT WINAPI AVIDec_Receive(TransformFilter *tf, IMediaSample *pSample) flags |= ICDECOMPRESS_PREROLL; if (IMediaSample_IsSyncPoint(pSample) != S_OK) flags |= ICDECOMPRESS_NOTKEYFRAME; - if (IMediaSample_GetTime(pSample, &tStart, NULL) == S_OK && - AVIDec_DropSample(This, tStart)) + hr = IMediaSample_GetTime(pSample, &tStart, &tStop); + if (hr == S_OK && AVIDec_DropSample(This, tStart)) flags |= ICDECOMPRESS_HURRYUP; res = ICDecompress(This->hvid, flags, This->pBihIn, pbSrcStream, This->pBihOut, pbDstStream); @@ -169,8 +169,10 @@ static HRESULT WINAPI AVIDec_Receive(TransformFilter *tf, IMediaSample *pSample) ERR("Error occurred during the decompression (%x)\n", res); /* Drop sample if its intended to be dropped */ - if (flags & ICDECOMPRESS_HURRYUP) + if (flags & ICDECOMPRESS_HURRYUP) { + hr = S_OK; goto error; + } IMediaSample_SetActualDataLength(pOutSample, This->pBihOut->biSizeImage); @@ -178,8 +180,10 @@ static HRESULT WINAPI AVIDec_Receive(TransformFilter *tf, IMediaSample *pSample) IMediaSample_SetDiscontinuity(pOutSample, (IMediaSample_IsDiscontinuity(pSample) == S_OK)); IMediaSample_SetSyncPoint(pOutSample, (IMediaSample_IsSyncPoint(pSample) == S_OK)); - if (IMediaSample_GetTime(pSample, &tStart, &tStop) == S_OK) + if (hr == S_OK) IMediaSample_SetTime(pOutSample, &tStart, &tStop); + else if (hr == VFW_S_NO_STOP_TIME) + IMediaSample_SetTime(pOutSample, &tStart, NULL); else IMediaSample_SetTime(pOutSample, NULL, NULL);