[PATCH 4/5] wmvcore: Move the async reader implementation to winegstreamer.

Jefferson Carpenter jeffersoncarpenter2 at gmail.com
Thu Oct 21 07:29:37 CDT 2021


This appears to have caused a regression in the Rise of Legends demo.

https://bugs.winehq.org/show_bug.cgi?id=51909

I can provide more information as needed, especially after I get gdb 
working on Wine again.

On 10/7/2021 3:47 PM, Zebediah Figura wrote:
> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
> ---
>   dlls/winegstreamer/Makefile.in                |  1 +
>   dlls/winegstreamer/winegstreamer.spec         |  1 +
>   .../wm_asyncreader.c}                         | 52 ++++++++-----------
>   dlls/wmvcore/Makefile.in                      |  1 -
>   dlls/wmvcore/wmvcore_main.c                   | 15 ++++++
>   5 files changed, 39 insertions(+), 31 deletions(-)
>   rename dlls/{wmvcore/reader.c => winegstreamer/wm_asyncreader.c} (98%)
> 
> diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in
> index 671e3bcb7ba..17311cd663c 100644
> --- a/dlls/winegstreamer/Makefile.in
> +++ b/dlls/winegstreamer/Makefile.in
> @@ -13,6 +13,7 @@ C_SRCS = \
>   	mfplat.c \
>   	quartz_parser.c \
>   	wg_parser.c \
> +	wm_asyncreader.c \
>   	wm_syncreader.c
>   
>   IDL_SRCS = \
> diff --git a/dlls/winegstreamer/winegstreamer.spec b/dlls/winegstreamer/winegstreamer.spec
> index bd9f53a7445..bc6a390f8b1 100644
> --- a/dlls/winegstreamer/winegstreamer.spec
> +++ b/dlls/winegstreamer/winegstreamer.spec
> @@ -2,4 +2,5 @@
>   @ stdcall -private DllGetClassObject(ptr ptr ptr)
>   @ stdcall -private DllRegisterServer()
>   @ stdcall -private DllUnregisterServer()
> +@ stdcall winegstreamer_create_wm_async_reader(ptr)
>   @ stdcall winegstreamer_create_wm_sync_reader(ptr)
> diff --git a/dlls/wmvcore/reader.c b/dlls/winegstreamer/wm_asyncreader.c
> similarity index 98%
> rename from dlls/wmvcore/reader.c
> rename to dlls/winegstreamer/wm_asyncreader.c
> index 12ba8099ab1..d3fd1624f24 100644
> --- a/dlls/wmvcore/reader.c
> +++ b/dlls/winegstreamer/wm_asyncreader.c
> @@ -16,11 +16,8 @@
>    * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
>    */
>   
> -#include "wmvcore.h"
> -
> +#include "gst_private.h"
>   #include "wmsdk.h"
> -#include "wine/debug.h"
> -#include "wine/heap.h"
>   
>   WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
>   
> @@ -153,7 +150,7 @@ static ULONG WINAPI WMReader_Release(IWMReader *iface)
>       TRACE("(%p) ref=%d\n", This, ref);
>   
>       if(!ref)
> -        heap_free(This);
> +        free(This);
>   
>       return ref;
>   }
> @@ -2039,36 +2036,31 @@ static const IWMPacketSize2Vtbl WMPacketSize2Vtbl =
>       packetsize_SetMinPacketSize
>   };
>   
> -HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader)
> +HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader)
>   {
> -    WMReader *reader;
> +    WMReader *object;
>   
> -    TRACE("(%p, %x, %p)\n", reserved, rights, ret_reader);
> +    TRACE("reader %p.\n", reader);
>   
> -    reader = heap_alloc(sizeof(*reader));
> -    if(!reader)
> +    if (!(object = calloc(1, sizeof(*object))))
>           return E_OUTOFMEMORY;
>   
> -    reader->IWMReader_iface.lpVtbl = &WMReaderVtbl;
> -    reader->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl;
> -    reader->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl;
> -    reader->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl;
> -    reader->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl;
> -    reader->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
> -    reader->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl;
> -    reader->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl;
> -    reader->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
> -    reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
> -    reader->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
> -    reader->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
> -    reader->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl;
> -    reader->ref = 1;
> +    object->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
> +    object->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
> +    object->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
> +    object->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl;
> +    object->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
> +    object->IWMReader_iface.lpVtbl = &WMReaderVtbl;
> +    object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl;
> +    object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl;
> +    object->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl;
> +    object->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl;
> +    object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl;
> +    object->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl;
> +    object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
> +    object->ref = 1;
>   
> -    *ret_reader = &reader->IWMReader_iface;
> +    TRACE("Created async reader %p.\n", object);
> +    *reader = (IWMReader *)&object->IWMReader_iface;
>       return S_OK;
>   }
> -
> -HRESULT WINAPI WMCreateReaderPriv(IWMReader **ret_reader)
> -{
> -    return WMCreateReader(NULL, 0, ret_reader);
> -}
> diff --git a/dlls/wmvcore/Makefile.in b/dlls/wmvcore/Makefile.in
> index d0b230dd7c0..6aed828abae 100644
> --- a/dlls/wmvcore/Makefile.in
> +++ b/dlls/wmvcore/Makefile.in
> @@ -6,7 +6,6 @@ DELAYIMPORTS = winegstreamer
>   EXTRADLLFLAGS = -Wb,--prefer-native
>   
>   C_SRCS = \
> -	reader.c \
>   	wmvcore_main.c \
>   	writer.c
>   
> diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c
> index 8d4d4251369..ff837921286 100644
> --- a/dlls/wmvcore/wmvcore_main.c
> +++ b/dlls/wmvcore/wmvcore_main.c
> @@ -25,8 +25,23 @@
>   
>   WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
>   
> +HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader);
>   HRESULT WINAPI winegstreamer_create_wm_sync_reader(IWMSyncReader **reader);
>   
> +HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **reader)
> +{
> +    TRACE("reserved %p, rights %#x, reader %p.\n", reserved, rights, reader);
> +
> +    return winegstreamer_create_wm_async_reader(reader);
> +}
> +
> +HRESULT WINAPI WMCreateReaderPriv(IWMReader **reader)
> +{
> +    TRACE("reader %p.\n", reader);
> +
> +    return winegstreamer_create_wm_async_reader(reader);
> +}
> +
>   HRESULT WINAPI WMCreateSyncReader(IUnknown *reserved, DWORD rights, IWMSyncReader **reader)
>   {
>       TRACE("reserved %p, rights %#x, reader %p.\n", reserved, rights, reader);
> 



More information about the wine-devel mailing list