quartz: Fix discontinuities in wave parser.
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Wed, 16 Apr 2008 20:39:10 +0000 (13:39 -0700)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 17 Apr 2008 09:41:52 +0000 (11:41 +0200)
dlls/quartz/waveparser.c

index 544fa4c4970a58faa33195167faa7816015aec14..5aef9ef2cedb83e4b124ed7801289638c9870fa9 100644 (file)
@@ -167,10 +167,8 @@ static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample)
             {
                 REFERENCE_TIME tAviStart, tAviStop, tOffset;
 
-                /* FIXME: hack */
-                if (pOutputPin->dwSamplesProcessed == 0) {
-                    IMediaSample_SetDiscontinuity(This->pCurrentSample, TRUE);
-               }
+                IMediaSample_SetDiscontinuity(This->pCurrentSample, pOutputPin->dwSamplesProcessed == 0);
+
                 IMediaSample_SetSyncPoint(This->pCurrentSample, TRUE);
                 pOutputPin->dwSamplesProcessed++;
 
@@ -195,8 +193,7 @@ static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample)
             if (hr == S_FALSE)
             {
                 /* Break out */
-                offset_src += chunk_remaining_bytes;
-                This->Parser.pInputPin->rtCurrent -= BYTES_FROM_MEDIATIME(cbSrcStream - offset_src);
+                This->Parser.pInputPin->rtCurrent -= MEDIATIME_FROM_BYTES(cbSrcStream - offset_src - chunk_remaining_bytes);
                 hr = S_OK;
                 break;
             }
@@ -297,6 +294,7 @@ static HRESULT WAVEParserImpl_seek(IBaseFilter *iface)
     }
 
     pPin->rtStart = pPin->rtCurrent = bytepos;
+    ((Parser_OutputPin *)This->Parser.ppPins[1])->dwSamplesProcessed = 0;
     LeaveCriticalSection(&This->Parser.csFilter);
 
     TRACE("Done flushing\n");