[PATCH 2/5] amstream: Handle AMMSF_NOCLOCK flag in AMMultiMediaStream::OpenFile.

Zebediah Figura zfigura at codeweavers.com
Fri Oct 23 11:14:08 CDT 2020


On 10/22/20 2:06 PM, Anton Baskanov wrote:
> Signed-off-by: Anton Baskanov <baskanov at gmail.com>
> ---
>  dlls/amstream/multimedia.c     | 11 +++++++++++
>  dlls/amstream/tests/amstream.c | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/dlls/amstream/multimedia.c b/dlls/amstream/multimedia.c
> index 967baacb747..f927cd106a0 100644
> --- a/dlls/amstream/multimedia.c
> +++ b/dlls/amstream/multimedia.c
> @@ -472,6 +472,17 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface,
>          }
>      }
>  
> +    if (SUCCEEDED(ret) && (flags & AMMSF_NOCLOCK))
> +    {
> +        IMediaFilter *media_filter;
> +
> +        if (SUCCEEDED(ret = IGraphBuilder_QueryInterface(This->graph, &IID_IMediaFilter, (void **)&media_filter)))
> +        {
> +            ret = IMediaFilter_SetSyncSource(media_filter, NULL);
> +            IMediaFilter_Release(media_filter);
> +        }
> +    }
> +
>      IMediaStreamFilter_SupportSeeking(This->filter, This->type == STREAMTYPE_READ);
>  
>      if (SUCCEEDED(ret) && (flags & AMMSF_RUN))
> diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
> index cb2b3dd76db..dbde4f6e20e 100644
> --- a/dlls/amstream/tests/amstream.c
> +++ b/dlls/amstream/tests/amstream.c
> @@ -418,6 +418,8 @@ static void test_openfile(const WCHAR *test_avi_path)
>      IAMMultiMediaStream *mmstream = create_ammultimediastream();
>      IMediaControl *media_control;
>      IMediaStreamFilter *filter;
> +    IMediaFilter *media_filter;
> +    IReferenceClock *clock;
>      IGraphBuilder *graph;
>      OAFilterState state;
>      HRESULT hr;
> @@ -512,6 +514,34 @@ static void test_openfile(const WCHAR *test_avi_path)
>      IMediaControl_Release(media_control);
>      ref = IGraphBuilder_Release(graph);
>      ok(!ref, "Got outstanding refcount %d.\n", ref);
> +
> +    mmstream = create_ammultimediastream();
> +    hr = IAMMultiMediaStream_AddMediaStream(mmstream, NULL, &MSPID_PrimaryAudio, 0, NULL);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +    hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +    ok(!!graph, "Expected non-NULL graph.\n");
> +    hr = IGraphBuilder_QueryInterface(graph, &IID_IMediaFilter, (void **)&media_filter);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    hr = IAMMultiMediaStream_OpenFile(mmstream, test_avi_path, AMMSF_NOCLOCK);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    clock = (IReferenceClock *)0xdeadbeef;
> +    IMediaFilter_GetSyncSource(media_filter, &clock);
> +    ok(!clock, "Got clock %p.\n", clock);
> +
> +    hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_STOP);
> +    ok(hr == S_OK, "Got hr %#x.\n", hr);
> +
> +    ref = IAMMultiMediaStream_Release(mmstream);
> +    ok(!ref, "Got outstanding refcount %d.\n", ref);
> +    IMediaFilter_Release(media_filter);
> +    ref = IGraphBuilder_Release(graph);
> +    ok(!ref, "Got outstanding refcount %d.\n", ref);
>  }
>  
>  static void test_mmstream_get_duration(const WCHAR *test_avi_path)
> 

Can you please also check that the clock is otherwise non-NULL?

-------------- 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/20201023/3ce5b04b/attachment.sig>


More information about the wine-devel mailing list