From 34ee1c65b12c387601c360556b9a0cebf1cb209a Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Fri, 4 Apr 2008 14:30:21 -0700 Subject: [PATCH] quartz: Make FileAsyncReader_WaitForNext return an empty sample while flushing --- dlls/quartz/filesource.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index 8be522c..288c564 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -1093,16 +1093,13 @@ static HRESULT WINAPI FileAsyncReader_WaitForNext(IAsyncReader * iface, DWORD dw *ppSample = NULL; *pdwUser = 0; - /* we return immediately if flushing */ - if (This->bFlushing) - hr = VFW_E_WRONG_STATE; - - if (SUCCEEDED(hr)) + if (!This->bFlushing) { /* wait for the read to finish or timeout */ if (WaitForSingleObject(This->hEvent, dwTimeout) == WAIT_TIMEOUT) hr = VFW_E_TIMEOUT; } + if (SUCCEEDED(hr)) { EnterCriticalSection(&This->csList); @@ -1116,7 +1113,7 @@ static HRESULT WINAPI FileAsyncReader_WaitForNext(IAsyncReader * iface, DWORD dw LeaveCriticalSection(&This->csList); } - if (SUCCEEDED(hr)) + if (SUCCEEDED(hr) && !This->bFlushing) { /* get any errors */ if (!GetOverlappedResult(This->hFile, &pDataRq->ovl, &dwBytes, FALSE)) @@ -1132,7 +1129,14 @@ static HRESULT WINAPI FileAsyncReader_WaitForNext(IAsyncReader * iface, DWORD dw /* no need to close event handle since we will close it when the pin is destroyed */ CoTaskMemFree(pDataRq); - + + /* Return the sample if flushing so it can be destroyed */ + if (This->bFlushing && SUCCEEDED(hr)) + { + hr = VFW_E_WRONG_STATE; + IMediaSample_SetActualDataLength(pDataRq->pSample, 0); + } + TRACE("-- %x\n", hr); return hr; } -- 1.5.4.1