Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 24 ++++++++---------------- dlls/winegstreamer/main.c | 18 +++++------------- dlls/winegstreamer/mfplat.c | 2 +- 3 files changed, 14 insertions(+), 30 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 84e6bcd61e4..acfd3b3ae4c 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -89,7 +89,6 @@ static inline struct parser *impl_from_strmbase_filter(struct strmbase_filter *i return CONTAINING_RECORD(iface, struct parser, filter); }
-static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0}; static const IMediaSeekingVtbl GST_Seeking_Vtbl; static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
@@ -1007,7 +1006,6 @@ static const struct strmbase_sink_ops sink_ops =
static BOOL decodebin_parser_filter_init_gst(struct parser *filter) { - static const WCHAR formatW[] = {'S','t','r','e','a','m',' ','%','0','2','u',0}; struct wg_parser *parser = filter->wg_parser; unsigned int i, stream_count; WCHAR source_name[20]; @@ -1015,7 +1013,7 @@ static BOOL decodebin_parser_filter_init_gst(struct parser *filter) stream_count = unix_funcs->wg_parser_get_stream_count(parser); for (i = 0; i < stream_count; ++i) { - swprintf(source_name, ARRAY_SIZE(source_name), formatW, i); + swprintf(source_name, ARRAY_SIZE(source_name), L"Stream %02u", i); if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, i), source_name)) return FALSE; } @@ -1108,7 +1106,7 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) }
strmbase_filter_init(&object->filter, outer, &CLSID_decodebin_parser, &filter_ops); - strmbase_sink_init(&object->sink, &object->filter, wcsInputPinName, &sink_ops, NULL); + strmbase_sink_init(&object->sink, &object->filter, L"input pin", &sink_ops, NULL);
object->init_gst = decodebin_parser_filter_init_gst; object->source_query_accept = decodebin_parser_source_query_accept; @@ -1587,10 +1585,9 @@ static const struct strmbase_sink_ops wave_parser_sink_ops =
static BOOL wave_parser_filter_init_gst(struct parser *filter) { - static const WCHAR source_name[] = {'o','u','t','p','u','t',0}; struct wg_parser *parser = filter->wg_parser;
- if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, 0), source_name)) + if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, 0), L"output")) return FALSE;
return TRUE; @@ -1625,7 +1622,6 @@ static HRESULT wave_parser_source_get_media_type(struct parser_source *pin,
HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) { - static const WCHAR sink_name[] = {'i','n','p','u','t',' ','p','i','n',0}; struct parser *object;
if (!parser_init_gstreamer()) @@ -1641,7 +1637,7 @@ HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) }
strmbase_filter_init(&object->filter, outer, &CLSID_WAVEParser, &filter_ops); - strmbase_sink_init(&object->sink, &object->filter, sink_name, &wave_parser_sink_ops, NULL); + strmbase_sink_init(&object->sink, &object->filter, L"input pin", &wave_parser_sink_ops, NULL); object->init_gst = wave_parser_filter_init_gst; object->source_query_accept = wave_parser_source_query_accept; object->source_get_media_type = wave_parser_source_get_media_type; @@ -1668,7 +1664,6 @@ static const struct strmbase_sink_ops avi_splitter_sink_ops =
static BOOL avi_splitter_filter_init_gst(struct parser *filter) { - static const WCHAR formatW[] = {'S','t','r','e','a','m',' ','%','0','2','u',0}; struct wg_parser *parser = filter->wg_parser; uint32_t i, stream_count; WCHAR source_name[20]; @@ -1676,7 +1671,7 @@ static BOOL avi_splitter_filter_init_gst(struct parser *filter) stream_count = unix_funcs->wg_parser_get_stream_count(parser); for (i = 0; i < stream_count; ++i) { - swprintf(source_name, ARRAY_SIZE(source_name), formatW, i); + swprintf(source_name, ARRAY_SIZE(source_name), L"Stream %02u", i); if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, i), source_name)) return FALSE; } @@ -1713,7 +1708,6 @@ static HRESULT avi_splitter_source_get_media_type(struct parser_source *pin,
HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) { - static const WCHAR sink_name[] = {'i','n','p','u','t',' ','p','i','n',0}; struct parser *object;
if (!parser_init_gstreamer()) @@ -1729,7 +1723,7 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) }
strmbase_filter_init(&object->filter, outer, &CLSID_AviSplitter, &filter_ops); - strmbase_sink_init(&object->sink, &object->filter, sink_name, &avi_splitter_sink_ops, NULL); + strmbase_sink_init(&object->sink, &object->filter, L"input pin", &avi_splitter_sink_ops, NULL); object->init_gst = avi_splitter_filter_init_gst; object->source_query_accept = avi_splitter_source_query_accept; object->source_get_media_type = avi_splitter_source_get_media_type; @@ -1761,10 +1755,9 @@ static const struct strmbase_sink_ops mpeg_splitter_sink_ops =
static BOOL mpeg_splitter_filter_init_gst(struct parser *filter) { - static const WCHAR source_name[] = {'A','u','d','i','o',0}; struct wg_parser *parser = filter->wg_parser;
- if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, 0), source_name)) + if (!create_pin(filter, unix_funcs->wg_parser_get_stream(parser, 0), L"Audio")) return FALSE;
return TRUE; @@ -1822,7 +1815,6 @@ static const struct strmbase_filter_ops mpeg_splitter_ops =
HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) { - static const WCHAR sink_name[] = {'I','n','p','u','t',0}; struct parser *object;
if (!parser_init_gstreamer()) @@ -1838,7 +1830,7 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) }
strmbase_filter_init(&object->filter, outer, &CLSID_MPEG1Splitter, &mpeg_splitter_ops); - strmbase_sink_init(&object->sink, &object->filter, sink_name, &mpeg_splitter_sink_ops, NULL); + strmbase_sink_init(&object->sink, &object->filter, L"Input", &mpeg_splitter_sink_ops, NULL); object->IAMStreamSelect_iface.lpVtbl = &stream_select_vtbl;
object->init_gst = mpeg_splitter_filter_init_gst; diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 6f3be9095d6..ae26745773b 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -31,15 +31,6 @@ LONG object_locks;
WINE_DEFAULT_DEBUG_CHANNEL(gstreamer);
-static const WCHAR wGstreamer_Splitter[] = -{'G','S','t','r','e','a','m','e','r',' ','s','p','l','i','t','t','e','r',' ','f','i','l','t','e','r',0}; -static const WCHAR wave_parserW[] = -{'W','a','v','e',' ','P','a','r','s','e','r',0}; -static const WCHAR avi_splitterW[] = -{'A','V','I',' ','S','p','l','i','t','t','e','r',0}; -static const WCHAR mpeg_splitterW[] = -{'M','P','E','G','-','I',' ','S','t','r','e','a','m',' ','S','p','l','i','t','t','e','r',0}; - const struct unix_funcs *unix_funcs = NULL;
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) @@ -336,11 +327,12 @@ HRESULT WINAPI DllRegisterServer(void) &IID_IFilterMapper2, (void **)&mapper))) return hr;
- IFilterMapper2_RegisterFilter(mapper, &CLSID_AviSplitter, avi_splitterW, NULL, NULL, NULL, ®_avi_splitter); + IFilterMapper2_RegisterFilter(mapper, &CLSID_AviSplitter, L"AVI Splitter", NULL, NULL, NULL, ®_avi_splitter); IFilterMapper2_RegisterFilter(mapper, &CLSID_decodebin_parser, - wGstreamer_Splitter, NULL, NULL, NULL, ®_decodebin_parser); - IFilterMapper2_RegisterFilter(mapper, &CLSID_MPEG1Splitter, mpeg_splitterW, NULL, NULL, NULL, ®_mpeg_splitter); - IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, wave_parserW, NULL, NULL, NULL, ®_wave_parser); + L"GStreamer splitter filter", NULL, NULL, NULL, ®_decodebin_parser); + IFilterMapper2_RegisterFilter(mapper, &CLSID_MPEG1Splitter, + L"MPEG-I Stream Splitter", NULL, NULL, NULL, ®_mpeg_splitter); + IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, L"Wave Parser", NULL, NULL, NULL, ®_wave_parser);
IFilterMapper2_Release(mapper);
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 439fc2ee5ed..22581eb7311 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -446,7 +446,7 @@ HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) return CLASS_E_CLASSNOTAVAILABLE; }
-static WCHAR audio_converterW[] = {'A','u','d','i','o',' ','C','o','n','v','e','r','t','e','r',0}; +static WCHAR audio_converterW[] = L"Audio Converter"; static const GUID *audio_converter_supported_types[] = { &MFAudioFormat_PCM,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/audioconvert.c | 5 +-- dlls/winegstreamer/gst_private.h | 1 - dlls/winegstreamer/gstdemux.c | 26 ++++++------ dlls/winegstreamer/media_source.c | 67 +++++++++++-------------------- dlls/winegstreamer/mfplat.c | 9 ++--- 5 files changed, 42 insertions(+), 66 deletions(-)
diff --git a/dlls/winegstreamer/audioconvert.c b/dlls/winegstreamer/audioconvert.c index 3b6571ab60d..304e1c8b067 100644 --- a/dlls/winegstreamer/audioconvert.c +++ b/dlls/winegstreamer/audioconvert.c @@ -26,7 +26,6 @@ #include "ksmedia.h"
#include "wine/debug.h" -#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
@@ -82,7 +81,7 @@ static ULONG WINAPI audio_converter_Release(IMFTransform *iface) { transform->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&transform->cs); - heap_free(transform); + free(transform); }
return refcount; @@ -572,7 +571,7 @@ HRESULT audio_converter_create(REFIID riid, void **ret)
TRACE("%s %p\n", debugstr_guid(riid), ret);
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
object->IMFTransform_iface.lpVtbl = &audio_converter_vtbl; diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index ef84d611a09..3a5445a27ce 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -37,7 +37,6 @@ #include "strmif.h" #include "mfobjects.h" #include "wine/debug.h" -#include "wine/heap.h" #include "wine/strmbase.h"
typedef enum diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index acfd3b3ae4c..985183b0a35 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -860,7 +860,7 @@ static void parser_destroy(struct strmbase_filter *iface)
strmbase_sink_cleanup(&filter->sink); strmbase_filter_cleanup(&filter->filter); - heap_free(filter); + free(filter); }
static HRESULT parser_init_stream(struct strmbase_filter *iface) @@ -1096,12 +1096,12 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) if (!parser_init_gstreamer()) return E_FAIL;
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
if (!(object->wg_parser = unix_funcs->wg_decodebin_parser_create())) { - heap_free(object); + free(object); return E_OUTOFMEMORY; }
@@ -1485,7 +1485,7 @@ static void free_source_pin(struct parser_source *pin)
strmbase_seeking_cleanup(&pin->seek); strmbase_source_cleanup(&pin->pin); - heap_free(pin); + free(pin); }
static const struct strmbase_source_ops source_ops = @@ -1504,11 +1504,11 @@ static struct parser_source *create_pin(struct parser *filter, { struct parser_source *pin, **new_array;
- if (!(new_array = heap_realloc(filter->sources, (filter->source_count + 1) * sizeof(*filter->sources)))) + if (!(new_array = realloc(filter->sources, (filter->source_count + 1) * sizeof(*filter->sources)))) return NULL; filter->sources = new_array;
- if (!(pin = heap_alloc_zero(sizeof(*pin)))) + if (!(pin = calloc(1, sizeof(*pin)))) return NULL;
pin->wg_stream = stream; @@ -1549,7 +1549,7 @@ static HRESULT GST_RemoveOutputPins(struct parser *This) }
This->source_count = 0; - heap_free(This->sources); + free(This->sources); This->sources = NULL;
BaseFilterImpl_IncrementPinVersion(&This->filter); @@ -1627,12 +1627,12 @@ HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) if (!parser_init_gstreamer()) return E_FAIL;
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
if (!(object->wg_parser = unix_funcs->wg_wave_parser_create())) { - heap_free(object); + free(object); return E_OUTOFMEMORY; }
@@ -1713,12 +1713,12 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) if (!parser_init_gstreamer()) return E_FAIL;
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
if (!(object->wg_parser = unix_funcs->wg_avi_parser_create())) { - heap_free(object); + free(object); return E_OUTOFMEMORY; }
@@ -1820,12 +1820,12 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) if (!parser_init_gstreamer()) return E_FAIL;
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
if (!(object->wg_parser = unix_funcs->wg_mpeg_audio_parser_create())) { - heap_free(object); + free(object); return E_OUTOFMEMORY; }
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index 74af8e41f48..f72b4ff2fd0 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -33,7 +33,6 @@ #include "mfobjects.h"
#include "wine/debug.h" -#include "wine/heap.h" #include "wine/list.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat); @@ -163,7 +162,7 @@ static ULONG WINAPI source_async_command_Release(IUnknown *iface) { if (command->op == SOURCE_ASYNC_START) PropVariantClear(&command->u.start.position); - heap_free(command); + free(command); }
return refcount; @@ -180,7 +179,7 @@ static HRESULT source_create_async_op(enum source_async_op op, struct source_asy { struct source_async_command *command;
- if (!(command = heap_alloc_zero(sizeof(*command)))) + if (!(command = calloc(1, sizeof(*command)))) return E_OUTOFMEMORY;
command->IUnknown_iface.lpVtbl = &source_async_command_vtbl; @@ -590,7 +589,7 @@ static ULONG WINAPI media_stream_Release(IMFMediaStream *iface) { if (stream->event_queue) IMFMediaEventQueue_Release(stream->event_queue); - heap_free(stream); + free(stream); }
return ref; @@ -716,7 +715,7 @@ static const IMFMediaStreamVtbl media_stream_vtbl = static HRESULT new_media_stream(struct media_source *source, struct wg_parser_stream *wg_stream, DWORD stream_id, struct media_stream **out_stream) { - struct media_stream *object = heap_alloc_zero(sizeof(*object)); + struct media_stream *object = calloc(1, sizeof(*object)); HRESULT hr;
TRACE("source %p, wg_stream %p, stream_id %u.\n", source, wg_stream, stream_id); @@ -777,7 +776,7 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
IMFMediaType_GetGUID(base_type, &MF_MT_SUBTYPE, &base_subtype);
- stream_types = heap_alloc( sizeof(IMFMediaType *) * ARRAY_SIZE(video_types) + 1); + stream_types = malloc(sizeof(IMFMediaType *) * (ARRAY_SIZE(video_types) + 1));
stream_types[0] = base_type; type_count = 1; @@ -830,7 +829,7 @@ done: for (i = 0; i < type_count; i++) IMFMediaType_Release(stream_types[i]); if (stream_types != &stream_type) - heap_free(stream_types); + free(stream_types); return hr; }
@@ -878,7 +877,7 @@ static ULONG WINAPI media_source_Release(IMFMediaSource *iface) { IMFMediaSource_Shutdown(&source->IMFMediaSource_iface); IMFMediaEventQueue_Release(source->event_queue); - heap_free(source); + free(source); }
return ref; @@ -1050,7 +1049,7 @@ static HRESULT WINAPI media_source_Shutdown(IMFMediaSource *iface) unix_funcs->wg_parser_destroy(source->wg_parser);
if (source->stream_count) - heap_free(source->streams); + free(source->streams);
if (source->async_commands_queue) MFUnlockWorkQueue(source->async_commands_queue); @@ -1101,7 +1100,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_ return hr; }
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
object->IMFMediaSource_iface.lpVtbl = &IMFMediaSource_vtbl; @@ -1140,7 +1139,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
object->stream_count = unix_funcs->wg_parser_get_stream_count(parser);
- if (!(object->streams = heap_alloc_zero(object->stream_count * sizeof(*object->streams)))) + if (!(object->streams = calloc(object->stream_count, sizeof(*object->streams)))) { hr = E_OUTOFMEMORY; goto fail; @@ -1161,7 +1160,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
/* init presentation descriptor */
- descriptors = heap_alloc(object->stream_count * sizeof(IMFStreamDescriptor*)); + descriptors = malloc(object->stream_count * sizeof(IMFStreamDescriptor *)); for (i = 0; i < object->stream_count; i++) { IMFMediaStream_GetStreamDescriptor(&object->streams[i]->IMFMediaStream_iface, &descriptors[i]); @@ -1175,7 +1174,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_ IMFPresentationDescriptor_SelectStream(object->pres_desc, i); IMFStreamDescriptor_Release(descriptors[i]); } - heap_free(descriptors); + free(descriptors); descriptors = NULL;
for (i = 0; i < object->stream_count; i++) @@ -1193,7 +1192,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_ fail: WARN("Failed to construct MFMediaSource, hr %#x.\n", hr);
- heap_free(descriptors); + free(descriptors); IMFMediaSource_Release(&object->IMFMediaSource_iface); return hr; } @@ -1268,10 +1267,10 @@ static ULONG WINAPI winegstreamer_stream_handler_Release(IMFByteStreamHandler *i IMFAsyncResult_Release(result->result); if (result->object) IUnknown_Release(result->object); - heap_free(result); + free(result); } DeleteCriticalSection(&handler->cs); - heap_free(handler); + free(handler); }
return refcount; @@ -1332,8 +1331,8 @@ static ULONG WINAPI create_object_context_Release(IUnknown *iface) IPropertyStore_Release(context->props); if (context->stream) IMFByteStream_Release(context->stream); - heap_free(context->url); - heap_free(context); + free(context->url); + free(context); }
return refcount; @@ -1346,23 +1345,6 @@ static const IUnknownVtbl create_object_context_vtbl = create_object_context_Release, };
-static WCHAR *heap_strdupW(const WCHAR *str) -{ - WCHAR *ret = NULL; - - if (str) - { - unsigned int size; - - size = (lstrlenW(str) + 1) * sizeof(WCHAR); - ret = heap_alloc(size); - if (ret) - memcpy(ret, str, size); - } - - return ret; -} - static HRESULT WINAPI winegstreamer_stream_handler_BeginCreateObject(IMFByteStreamHandler *iface, IMFByteStream *stream, const WCHAR *url, DWORD flags, IPropertyStore *props, IUnknown **cancel_cookie, IMFAsyncCallback *callback, IUnknown *state) { @@ -1379,8 +1361,7 @@ static HRESULT WINAPI winegstreamer_stream_handler_BeginCreateObject(IMFByteStre if (FAILED(hr = MFCreateAsyncResult(NULL, callback, state, &caller))) return hr;
- context = heap_alloc_zero(sizeof(*context)); - if (!context) + if (!(context = calloc(1, sizeof(*context)))) { IMFAsyncResult_Release(caller); return E_OUTOFMEMORY; @@ -1396,7 +1377,7 @@ static HRESULT WINAPI winegstreamer_stream_handler_BeginCreateObject(IMFByteStre if (context->stream) IMFByteStream_AddRef(context->stream); if (url) - context->url = heap_strdupW(url); + context->url = wcsdup(url); if (!context->stream) { IMFAsyncResult_Release(caller); @@ -1453,7 +1434,7 @@ static HRESULT WINAPI winegstreamer_stream_handler_EndCreateObject(IMFByteStream *object = found->object; hr = IMFAsyncResult_GetStatus(found->result); IMFAsyncResult_Release(found->result); - heap_free(found); + free(found); } else { @@ -1491,7 +1472,7 @@ static HRESULT WINAPI winegstreamer_stream_handler_CancelObjectCreation(IMFByteS IMFAsyncResult_Release(found->result); if (found->object) IUnknown_Release(found->object); - heap_free(found); + free(found); }
return found ? S_OK : MF_E_UNEXPECTED; @@ -1595,8 +1576,7 @@ static HRESULT WINAPI winegstreamer_stream_handler_callback_Invoke(IMFAsyncCallb
hr = winegstreamer_stream_handler_create_object(handler, context->url, context->stream, context->flags, context->props, &object, &obj_type);
- handler_result = heap_alloc(sizeof(*handler_result)); - if (handler_result) + if ((handler_result = malloc(sizeof(*handler_result)))) { handler_result->result = caller; IMFAsyncResult_AddRef(handler_result->result); @@ -1638,8 +1618,7 @@ HRESULT winegstreamer_stream_handler_create(REFIID riid, void **obj)
TRACE("%s, %p.\n", debugstr_guid(riid), obj);
- this = heap_alloc_zero(sizeof(*this)); - if (!this) + if (!(this = calloc(1, sizeof(*this)))) return E_OUTOFMEMORY;
list_init(&this->results); diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 22581eb7311..e6913d099b0 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -29,7 +29,6 @@ #include "ksmedia.h"
#include "wine/debug.h" -#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
@@ -86,7 +85,7 @@ static ULONG WINAPI video_processor_Release(IMFTransform *iface) IMFAttributes_Release(transform->attributes); if (transform->output_attributes) IMFAttributes_Release(transform->output_attributes); - heap_free(transform); + free(transform); }
return refcount; @@ -337,7 +336,7 @@ static ULONG WINAPI class_factory_Release(IClassFactory *iface) ULONG refcount = InterlockedDecrement(&factory->refcount);
if (!refcount) - heap_free(factory); + free(factory);
return refcount; } @@ -383,7 +382,7 @@ static HRESULT video_processor_create(REFIID riid, void **ret) struct video_processor *object; HRESULT hr;
- if (!(object = heap_alloc_zero(sizeof(*object)))) + if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY;
object->IMFTransform_iface.lpVtbl = &video_processor_vtbl; @@ -430,7 +429,7 @@ HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) { if (IsEqualGUID(class_objects[i].clsid, rclsid)) { - if (!(factory = heap_alloc(sizeof(*factory)))) + if (!(factory = malloc(sizeof(*factory)))) return E_OUTOFMEMORY;
factory->IClassFactory_iface.lpVtbl = &class_factory_vtbl;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/audioconvert.c | 1 - dlls/winegstreamer/gst_private.h | 8 ++------ dlls/winegstreamer/gstdemux.c | 5 ----- dlls/winegstreamer/main.c | 1 - dlls/winegstreamer/media_source.c | 10 ---------- dlls/winegstreamer/mfplat.c | 5 ----- dlls/winegstreamer/wg_parser.c | 1 - 7 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/dlls/winegstreamer/audioconvert.c b/dlls/winegstreamer/audioconvert.c index 304e1c8b067..33350fb3566 100644 --- a/dlls/winegstreamer/audioconvert.c +++ b/dlls/winegstreamer/audioconvert.c @@ -21,7 +21,6 @@
#include "mfapi.h" #include "mferror.h" -#include "mfidl.h" #include "ks.h" #include "ksmedia.h"
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 3a5445a27ce..55a62361966 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -21,6 +21,7 @@ #ifndef __GST_PRIVATE_INCLUDED__ #define __GST_PRIVATE_INCLUDED__
+#include <assert.h> #include <stdarg.h> #include <stdbool.h> #include <stdint.h> @@ -29,13 +30,8 @@ #define COBJMACROS #define NONAMELESSSTRUCT #define NONAMELESSUNION -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "winuser.h" #include "dshow.h" -#include "strmif.h" -#include "mfobjects.h" +#include "mfidl.h" #include "wine/debug.h" #include "wine/strmbase.h"
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 985183b0a35..e9e7c3a0f9f 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -23,14 +23,9 @@ #include "gst_private.h" #include "gst_guids.h"
-#include "vfwmsgs.h" #include "amvideo.h"
-#include "wine/debug.h" - -#include <assert.h> #include <limits.h> - #include "dvdmedia.h" #include "mmreg.h" #include "ks.h" diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index ae26745773b..d5c06bf3279 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -21,7 +21,6 @@ #include "gst_private.h" #include "winternl.h" #include "rpcproxy.h" -#include "wine/debug.h"
#include "initguid.h" #include "gst_guids.h" diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index f72b4ff2fd0..3260175f45a 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -20,19 +20,9 @@
#include "gst_private.h"
-#include <assert.h> -#include <stdarg.h> -#include <assert.h> - -#define COBJMACROS -#define NONAMELESSUNION - #include "mfapi.h" #include "mferror.h" -#include "mfidl.h" -#include "mfobjects.h"
-#include "wine/debug.h" #include "wine/list.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat); diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index e6913d099b0..602fa631a43 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -19,12 +19,7 @@
#include "gst_private.h"
-#include <assert.h> -#include <stdarg.h> - -#include "gst_private.h" #include "mfapi.h" -#include "mfidl.h" #include "ks.h" #include "ksmedia.h"
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c index a7b3e6348cf..94f677538c7 100644 --- a/dlls/winegstreamer/wg_parser.c +++ b/dlls/winegstreamer/wg_parser.c @@ -30,7 +30,6 @@ #include "gst_private.h" #include "winternl.h"
-#include <assert.h> #include <gst/gst.h> #include <gst/video/video.h> #include <gst/audio/audio.h>
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/winegstreamer.spec | 1 - 1 file changed, 1 deletion(-)
diff --git a/dlls/winegstreamer/winegstreamer.spec b/dlls/winegstreamer/winegstreamer.spec index d96cb873569..b16365d0c9f 100644 --- a/dlls/winegstreamer/winegstreamer.spec +++ b/dlls/winegstreamer/winegstreamer.spec @@ -1,4 +1,3 @@ -@ stdcall -private DllMain(long long ptr) @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) @ stdcall -private DllRegisterServer()
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- MAINTAINERS | 2 +- dlls/winegstreamer/Makefile.in | 2 +- dlls/winegstreamer/{gstdemux.c => quartz_parser.c} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename dlls/winegstreamer/{gstdemux.c => quartz_parser.c} (100%)
diff --git a/MAINTAINERS b/MAINTAINERS index 7c8cfee24ea..d1bc8658e02 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -114,7 +114,7 @@ F: dlls/qdvd/ F: dlls/qedit/ F: dlls/quartz/ F: dlls/strmbase/ -F: dlls/winegstreamer/gstdemux.c +F: dlls/winegstreamer/quartz_parser.c F: dlls/wineqtdecoder/
DirectWrite diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in index 996818fa457..b8b18330e3d 100644 --- a/dlls/winegstreamer/Makefile.in +++ b/dlls/winegstreamer/Makefile.in @@ -10,13 +10,13 @@ EXTRADLLFLAGS = -mno-cygwin C_SRCS = \ audioconvert.c \ filter.c \ - gstdemux.c \ main.c \ media_source.c \ mediatype.c \ mfplat.c \ pin.c \ qualitycontrol.c \ + quartz_parser.c \ seeking.c \ wg_parser.c
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/quartz_parser.c similarity index 100% rename from dlls/winegstreamer/gstdemux.c rename to dlls/winegstreamer/quartz_parser.c
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=85998
Your paranoid android.
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1513: undefined reference to `heap_alloc_zero' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1490: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1554: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1101: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1106: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1634: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1639: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1722: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1727: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1831: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1836: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:864: undefined reference to `heap_free' collect2: error: ld returned 1 exit status Task: The win32 Wine build failed
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1513: undefined reference to `heap_alloc_zero' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1490: undefined reference to `heap_free' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1554: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1101: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1106: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1634: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1639: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1722: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1727: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1831: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1836: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:864: undefined reference to `heap_free' collect2: error: ld returned 1 exit status Task: The wow64 Wine build failed
On 2/22/21 6:09 PM, Marvin wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=85998
Your paranoid android.
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc'
I have no idea what happened here. The patch on the jobs page looks correct, and changes all of the heap_* calls mentioned here. At any rate it compiles fine for me, of course...
On Mon, 22 Feb 2021, Zebediah Figura (she/her) wrote: [...]
[...]
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc'
I have no idea what happened here. The patch on the jobs page looks correct, and changes all of the heap_* calls mentioned here. At any rate it compiles fine for me, of course...
I can reproduce the build error if I apply the TestBot patch on top of 4981785f0fbc. The issue is that quartz_parser.c does not #include wine/heap.h. Maybe it assumes some other header is going to do it but that's not happening.
On Tue, 23 Feb 2021, Francois Gouget wrote:
On Mon, 22 Feb 2021, Zebediah Figura (she/her) wrote: [...]
[...]
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc'
I have no idea what happened here. The patch on the jobs page looks correct, and changes all of the heap_* calls mentioned here. At any rate it compiles fine for me, of course...
I can reproduce the build error if I apply the TestBot patch on top of 4981785f0fbc. The issue is that quartz_parser.c does not #include wine/heap.h. Maybe it assumes some other header is going to do it but that's not happening.
So the thing is that 'git apply' does not give the same result as 'patch -p1'. I think it's a bug in the way 'git apply' handles renamed files, or maybe more specifically in the way it handles patches that first modify a file and then rename it.
The latter may be outside the scope of what git apply is meant to support if one supposes that the patches it is meant to work on come from a single Git commit.
When a commit both renames and modifies a file, the resulting Git diff does both in one operation:
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/quartz_parser.c similarity index 97% rename from dlls/winegstreamer/gstdemux.c rename to dlls/winegstreamer/quartz_parser.c index 84e6bcd61e4..e9e7c3a0f9f 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/quartz_parser.c
Here the job's patch is the result of concatenating the patch series parts. So it first modifies gstdemux.c three times and only then renames it to quartz_parser.c.
But it seems that instead of doing that, git apply first makes a copy of gstdemux.c as quartz_parser.c, and only then patches gstdemux.c (and never deletes gstdemux.c). [1]
So the result is that with git apply one gets the unmodified gstdemux.c which still references heap_*().
Options: 1. Use patch -p1. But I believe Alexandre uses git apply which sometimes rejects standalone patches that patch -p1 accepts. patch -p1 may also have other issues of its own (e.g. [1]).
2. Use git apply for standalone patches and patch -p1 for patch series? (Or just patches where there's a rename). Yuck.
3. Apply each part one at a time. That would require putting some delimiter in the concatenated patch so it can be split and have each part committed one at a time on the build machine.
[1] I suspect this is so git apply can handle Git-generated patches that rename A to B and B to A at the same time. I wonder if patch -p1 can handle that.
On 2/23/21 8:12 AM, Francois Gouget wrote:
On Tue, 23 Feb 2021, Francois Gouget wrote:
On Mon, 22 Feb 2021, Zebediah Figura (she/her) wrote: [...]
[...]
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc'
I have no idea what happened here. The patch on the jobs page looks correct, and changes all of the heap_* calls mentioned here. At any rate it compiles fine for me, of course...
I can reproduce the build error if I apply the TestBot patch on top of 4981785f0fbc. The issue is that quartz_parser.c does not #include wine/heap.h. Maybe it assumes some other header is going to do it but that's not happening.
So the thing is that 'git apply' does not give the same result as 'patch -p1'. I think it's a bug in the way 'git apply' handles renamed files, or maybe more specifically in the way it handles patches that first modify a file and then rename it.
The latter may be outside the scope of what git apply is meant to support if one supposes that the patches it is meant to work on come from a single Git commit.
When a commit both renames and modifies a file, the resulting Git diff does both in one operation:
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/quartz_parser.c similarity index 97% rename from dlls/winegstreamer/gstdemux.c rename to dlls/winegstreamer/quartz_parser.c index 84e6bcd61e4..e9e7c3a0f9f 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/quartz_parser.c
Here the job's patch is the result of concatenating the patch series parts. So it first modifies gstdemux.c three times and only then renames it to quartz_parser.c.
But it seems that instead of doing that, git apply first makes a copy of gstdemux.c as quartz_parser.c, and only then patches gstdemux.c (and never deletes gstdemux.c). [1]
So the result is that with git apply one gets the unmodified gstdemux.c which still references heap_*().
Options:
Use patch -p1. But I believe Alexandre uses git apply which sometimes rejects standalone patches that patch -p1 accepts. patch -p1 may also have other issues of its own (e.g. [1]).
Use git apply for standalone patches and patch -p1 for patch series? (Or just patches where there's a rename). Yuck.
Apply each part one at a time. That would require putting some delimiter in the concatenated patch so it can be split and have each part committed one at a time on the build machine.
My guess is that (3) is the best option, or at least, it's the most reliable. [That or we never concat the patches in the first place...?]
[1] I suspect this is so git apply can handle Git-generated patches that rename A to B and B to A at the same time. I wonder if patch -p1 can handle that.
Yeah, that's a fair point, so it's probably not a bug after all...
This reverts abdaa6f21f672c882ab60583d822789154cefecf.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/Makefile.in | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in index b8b18330e3d..4d5dece64b3 100644 --- a/dlls/winegstreamer/Makefile.in +++ b/dlls/winegstreamer/Makefile.in @@ -1,23 +1,17 @@ MODULE = winegstreamer.dll -IMPORTS = strmiids uuid ole32 mfuuid +IMPORTS = strmbase strmiids uuid ole32 mfuuid DELAYIMPORTS = mfplat EXTRAINCL = $(GSTREAMER_CFLAGS) EXTRALIBS = $(GSTREAMER_LIBS) $(PTHREAD_LIBS) -PARENTSRC = ../strmbase
EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \ audioconvert.c \ - filter.c \ main.c \ media_source.c \ - mediatype.c \ mfplat.c \ - pin.c \ - qualitycontrol.c \ quartz_parser.c \ - seeking.c \ wg_parser.c
IDL_SRCS = \
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=85999
Your paranoid android.
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1513: undefined reference to `heap_alloc_zero' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1490: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1554: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1101: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1106: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1634: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1639: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1722: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1727: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1831: undefined reference to `heap_alloc_zero' /usr/bin/i686-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:1836: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-win32/../wine/dlls/winegstreamer/quartz_parser.c:864: undefined reference to `heap_free' collect2: error: ld returned 1 exit status Task: The win32 Wine build failed
=== debiant2 (build log) ===
/home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1509: undefined reference to `heap_realloc' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1513: undefined reference to `heap_alloc_zero' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1490: undefined reference to `heap_free' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1554: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1101: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1106: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1634: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1639: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1722: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1727: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1831: undefined reference to `heap_alloc_zero' /usr/bin/x86_64-w64-mingw32-ld: /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:1836: undefined reference to `heap_free' /home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/winegstreamer/quartz_parser.c:864: undefined reference to `heap_free' collect2: error: ld returned 1 exit status Task: The wow64 Wine build failed