[PATCH 1/4] amstream: Implement IDirectDrawStreamSample::CompletionStatus.
Zebediah Figura
zfigura at codeweavers.com
Wed Sep 30 11:39:35 CDT 2020
On 9/29/20 2:09 PM, Anton Baskanov wrote:
> Signed-off-by: Anton Baskanov <baskanov at gmail.com>
> ---
> dlls/amstream/ddrawstream.c | 31 +++-
> dlls/amstream/tests/amstream.c | 280 +++++++++++++++++++++++++++++++++
> 2 files changed, 308 insertions(+), 3 deletions(-)
>
> diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c
> index 972c2b9f4d0..9020828f578 100644
> --- a/dlls/amstream/ddrawstream.c
> +++ b/dlls/amstream/ddrawstream.c
> @@ -1491,6 +1491,7 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
> }
> if (!sample->parent->peer || sample->parent->eos)
> {
> + sample->update_hr = MS_S_ENDOFSTREAM;
> LeaveCriticalSection(&sample->parent->cs);
> return MS_S_ENDOFSTREAM;
> }
> @@ -1517,9 +1518,33 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
>
> static HRESULT WINAPI ddraw_sample_CompletionStatus(IDirectDrawStreamSample *iface, DWORD flags, DWORD milliseconds)
> {
> - FIXME("(%p)->(%x,%u): stub\n", iface, flags, milliseconds);
> + struct ddraw_sample *sample = impl_from_IDirectDrawStreamSample(iface);
> + HRESULT hr;
>
> - return E_NOTIMPL;
> + TRACE("sample %p, flags %#x, milliseconds %u.\n", sample, flags, milliseconds);
> +
> + EnterCriticalSection(&sample->parent->cs);
> +
> + if (sample->update_hr == MS_S_PENDING)
> + {
> + if (flags & (COMPSTAT_NOUPDATEOK | COMPSTAT_ABORT))
> + {
> + sample->update_hr = MS_S_NOUPDATE;
> + remove_queued_update(sample);
> + }
> + else if (flags & COMPSTAT_WAIT)
> + {
> + LeaveCriticalSection(&sample->parent->cs);
> + WaitForSingleObject(sample->update_event, milliseconds);
> + EnterCriticalSection(&sample->parent->cs);
> + }
> + }
> +
> + hr = sample->update_hr;
> +
> + LeaveCriticalSection(&sample->parent->cs);
> +
> + return hr;
> }
>
This is another place where I think it would be a good idea to use a
condition variable.
Could you please add a test with (COMPSTAT_NOUPDATEOK | COMPSTAT_WAIT,
INFINITE) and (COMPSTAT_ABORT | COMPSTAT_WAIT, INFINITE), to show that
the WAIT flag doesn't matter?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200930/c29f8de6/attachment.sig>
More information about the wine-devel
mailing list