[PATCH v2 1/5] winegstreamer: Implement stub bytestream handler and media source.

Zebediah Figura z.figura12 at gmail.com
Wed Aug 26 18:42:16 CDT 2020


This patch is still awfully large to review all at once. Just from
skimming I see the "event_queue" field, which could be split into a
separate patch, and the different "container_stream_handler" and
"media_source" objects, which could be split into separate patches.

On 8/26/20 1:59 PM, Derek Lesho wrote:
> Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
> ---
> v2: Fix tests on environments without gstreamer.
> ---
>  dlls/mfplat/tests/mfplat.c                   |  14 +-
>  dlls/winegstreamer/Makefile.in               |   1 +
>  dlls/winegstreamer/gst_private.h             |   6 +
>  dlls/winegstreamer/media_source.c            | 680 +++++++++++++++++++
>  dlls/winegstreamer/mfplat.c                  |   9 +
>  dlls/winegstreamer/winegstreamer.rgs         |  32 +
>  dlls/winegstreamer/winegstreamer_classes.idl |   7 +
>  include/mfidl.idl                            |   1 +
>  8 files changed, 746 insertions(+), 4 deletions(-)
>  create mode 100644 dlls/winegstreamer/media_source.c
> 
> diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
> index 01749dd9ef8..29bcef7e46b 100644
> --- a/dlls/mfplat/tests/mfplat.c
> +++ b/dlls/mfplat/tests/mfplat.c
> @@ -441,8 +441,8 @@ static void test_source_resolver(void)
>  {
>      struct test_callback callback = { { &test_create_from_url_callback_vtbl } };
>      struct test_callback callback2 = { { &test_create_from_file_handler_callback_vtbl } };
> +    IMFPresentationDescriptor *descriptor = NULL;
>      IMFSourceResolver *resolver, *resolver2;
> -    IMFPresentationDescriptor *descriptor;
>      IMFSchemeHandler *scheme_handler;
>      IMFMediaStream *video_stream;
>      IMFAttributes *attributes;
> @@ -458,9 +458,12 @@ static void test_source_resolver(void)
>      int i, sample_count;
>      WCHAR *filename;
>      PROPVARIANT var;
> +    BOOL is_wine;
>      HRESULT hr;
>      GUID guid;
>  
> +    is_wine = !strcmp(winetest_platform, "wine");
> +
>      if (!pMFCreateSourceResolver)
>      {
>          win_skip("MFCreateSourceResolver() not found\n");
> @@ -529,7 +532,10 @@ static void test_source_resolver(void)
>      ok(obj_type == MF_OBJECT_MEDIASOURCE, "got %d\n", obj_type);
>  
>      hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, &descriptor);
> +if (!is_wine)
>      ok(hr == S_OK, "Failed to get presentation descriptor, hr %#x.\n", hr);

I suspect you're doing this because of the fallback path in
source_resolver_CreateObjectFromByteStream(), combined with the optional
presence of winegstreamer. I would propose that this patch series first
remove that fallback path, as it is (as I understand) entirely
incorrect, and since any potential regression will be addressed by this
patch series itself.

> +    if (FAILED(hr))
> +        goto skip_source_tests;
>      ok(descriptor != NULL, "got %p\n", descriptor);
>  
>      hr = IMFPresentationDescriptor_GetStreamDescriptorByIndex(descriptor, 0, &selected, &sd);
> @@ -540,7 +546,7 @@ static void test_source_resolver(void)
>      IMFStreamDescriptor_Release(sd);
>  
>      hr = IMFMediaTypeHandler_GetMajorType(handler, &guid);
> -todo_wine
> +if (!is_wine)
>      ok(hr == S_OK, "Failed to get stream major type, hr %#x.\n", hr);
>      if (FAILED(hr))
>          goto skip_source_tests;
> @@ -632,8 +638,8 @@ todo_wine
>      ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
>  
>  skip_source_tests:
> -
> -    IMFPresentationDescriptor_Release(descriptor);
> +    if (descriptor)
> +        IMFPresentationDescriptor_Release(descriptor);
>      IMFMediaSource_Release(mediasource);
>      IMFByteStream_Release(stream);
>  
> diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in
> index 337c1086e6b..e578d194f7f 100644
> --- a/dlls/winegstreamer/Makefile.in
> +++ b/dlls/winegstreamer/Makefile.in
> @@ -10,6 +10,7 @@ C_SRCS = \
>  	gst_cbs.c \
>  	gstdemux.c \
>  	main.c \
> +	media_source.c \
>  	mediatype.c \
>  	mfplat.c \
>  	pin.c \
> diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
> index e6fb841fc87..71ca4290885 100644
> --- a/dlls/winegstreamer/gst_private.h
> +++ b/dlls/winegstreamer/gst_private.h
> @@ -54,4 +54,10 @@ void start_dispatch_thread(void) DECLSPEC_HIDDEN;
>  
>  extern HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) DECLSPEC_HIDDEN;
>  
> +enum source_type
> +{
> +    SOURCE_TYPE_MPEG_4,
> +};

This enumeration, and variables associated with it, are dead code, and
would be best introduced when used.

> +HRESULT container_stream_handler_construct(REFIID riid, void **obj, enum source_type);

Missing DECLSPEC_HIDDEN. Using the "_create" convention as elsewhere
would probably not be a bad idea, either.

> +
>  #endif /* __GST_PRIVATE_INCLUDED__ */

-------------- 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/20200826/236158e7/attachment.sig>


More information about the wine-devel mailing list