Zebediah Figura : amstream: Don' t keep track of streams in the multimedia stream object.
Alexandre Julliard
julliard at winehq.org
Mon Sep 2 14:50:19 CDT 2019
Module: wine
Branch: master
Commit: d15c23b30a680aa03c8ab6be62623178408cfb6e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d15c23b30a680aa03c8ab6be62623178408cfb6e
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Sun Sep 1 19:48:07 2019 -0500
amstream: Don't keep track of streams in the multimedia stream object.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/amstream/multimedia.c | 33 +++++++--------------------------
dlls/amstream/tests/amstream.c | 4 ++--
2 files changed, 9 insertions(+), 28 deletions(-)
diff --git a/dlls/amstream/multimedia.c b/dlls/amstream/multimedia.c
index 1449c45..55c1328 100644
--- a/dlls/amstream/multimedia.c
+++ b/dlls/amstream/multimedia.c
@@ -39,8 +39,6 @@ struct multimedia_stream
IMediaControl* media_control;
IMediaStreamFilter *filter;
IPin* ipin;
- ULONG nbStreams;
- IAMMediaStream **pStreams;
STREAM_TYPE StreamType;
OAEVENT event;
};
@@ -85,15 +83,11 @@ static ULONG WINAPI multimedia_stream_Release(IAMMultiMediaStream *iface)
{
struct multimedia_stream *This = impl_from_IAMMultiMediaStream(iface);
ULONG ref = InterlockedDecrement(&This->ref);
- ULONG i;
TRACE("(%p/%p)\n", iface, This);
if (!ref)
{
- for(i = 0; i < This->nbStreams; i++)
- IAMMediaStream_Release(This->pStreams[i]);
- CoTaskMemFree(This->pStreams);
if (This->ipin)
IPin_Release(This->ipin);
IMediaStreamFilter_Release(This->filter);
@@ -291,14 +285,14 @@ static HRESULT WINAPI multimedia_stream_GetFilter(IAMMultiMediaStream *iface,
}
static HRESULT WINAPI multimedia_stream_AddMediaStream(IAMMultiMediaStream *iface,
- IUnknown *stream_object, const MSPID *PurposeId, DWORD dwFlags, IMediaStream **ppNewStream)
+ IUnknown *stream_object, const MSPID *PurposeId, DWORD dwFlags, IMediaStream **ret_stream)
{
struct multimedia_stream *This = impl_from_IAMMultiMediaStream(iface);
HRESULT hr;
IAMMediaStream* pStream;
- IAMMediaStream** pNewStreams;
- TRACE("(%p/%p)->(%p,%s,%x,%p)\n", This, iface, stream_object, debugstr_guid(PurposeId), dwFlags, ppNewStream);
+ TRACE("mmstream %p, stream_object %p, id %s, flags %#x, ret_stream %p.\n",
+ This, stream_object, debugstr_guid(PurposeId), dwFlags, ret_stream);
if (!IsEqualGUID(PurposeId, &MSPID_PrimaryVideo) && !IsEqualGUID(PurposeId, &MSPID_PrimaryAudio))
return MS_E_PURPOSEID;
@@ -331,28 +325,15 @@ static HRESULT WINAPI multimedia_stream_AddMediaStream(IAMMultiMediaStream *ifac
hr = ddrawmediastream_create((IMultiMediaStream*)iface, PurposeId, stream_object, This->StreamType, &pStream);
else
hr = audiomediastream_create((IMultiMediaStream*)iface, PurposeId, stream_object, This->StreamType, &pStream);
- if (SUCCEEDED(hr))
- {
- pNewStreams = CoTaskMemRealloc(This->pStreams, (This->nbStreams+1) * sizeof(IAMMediaStream*));
- if (!pNewStreams)
- {
- IAMMediaStream_Release(pStream);
- return E_OUTOFMEMORY;
- }
- This->pStreams = pNewStreams;
- This->pStreams[This->nbStreams] = pStream;
- This->nbStreams++;
-
- if (ppNewStream)
- {
- IMediaStream_AddRef(*ppNewStream = (IMediaStream*)pStream);
- }
- }
if (SUCCEEDED(hr))
{
/* Add stream to the media stream filter */
IMediaStreamFilter_AddMediaStream(This->filter, pStream);
+ if (ret_stream)
+ *ret_stream = (IMediaStream *)pStream;
+ else
+ IAMMediaStream_Release(pStream);
}
return hr;
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
index b83e7bc..24c48ec 100644
--- a/dlls/amstream/tests/amstream.c
+++ b/dlls/amstream/tests/amstream.c
@@ -1152,7 +1152,7 @@ static void test_enum_pins(void)
ref = get_refcount(enum1);
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
ref = get_refcount(pin);
- todo_wine ok(ref == 4, "Got unexpected refcount %d.\n", ref);
+ ok(ref == 4, "Got unexpected refcount %d.\n", ref);
hr = IEnumPins_Next(enum1, 1, pins, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -1162,7 +1162,7 @@ static void test_enum_pins(void)
ref = get_refcount(enum1);
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
ref = get_refcount(pin);
- todo_wine ok(ref == 5, "Got unexpected refcount %d.\n", ref);
+ ok(ref == 5, "Got unexpected refcount %d.\n", ref);
IPin_Release(pins[0]);
hr = IEnumPins_Next(enum1, 1, pins, NULL);
More information about the wine-cvs
mailing list