Christian Costa : amstream: Implement AddMediaStream and GetMediaStream in media stream filter.
Alexandre Julliard
julliard at winehq.org
Wed Mar 28 12:47:06 CDT 2012
Module: wine
Branch: master
Commit: 76d69cdb91b5325af9ad1be1f14ee54d985df28d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=76d69cdb91b5325af9ad1be1f14ee54d985df28d
Author: Christian Costa <titan.costa at gmail.com>
Date: Tue Mar 27 23:45:55 2012 +0200
amstream: Implement AddMediaStream and GetMediaStream in media stream filter.
---
dlls/amstream/mediastreamfilter.c | 43 ++++++++++++++++++++++++++++++++----
1 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/dlls/amstream/mediastreamfilter.c b/dlls/amstream/mediastreamfilter.c
index d576b49..cd08490 100644
--- a/dlls/amstream/mediastreamfilter.c
+++ b/dlls/amstream/mediastreamfilter.c
@@ -37,7 +37,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(amstream);
typedef struct {
BaseFilter filter;
-
+ ULONG nb_streams;
+ IMediaStream** streams;
} IMediaStreamFilterImpl;
static inline IMediaStreamFilterImpl *impl_from_IMediaStreamFilter(IMediaStreamFilter *iface)
@@ -89,7 +90,12 @@ static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter *iface)
TRACE("(%p)->() Release from %d\n", iface, refCount + 1);
if (!refCount)
+ {
+ int i;
+ for (i = 0; i < This->nb_streams; i++)
+ IMediaStream_Release(This->streams[i]);
HeapFree(GetProcessHeap(), 0, This);
+ }
return refCount;
}
@@ -170,16 +176,43 @@ static HRESULT WINAPI MediaStreamFilterImpl_QueryVendorInfo(IMediaStreamFilter *
static HRESULT WINAPI MediaStreamFilterImpl_AddMediaStream(IMediaStreamFilter* iface, IAMMediaStream *pAMMediaStream)
{
- FIXME("(%p)->(%p): Stub!\n", iface, pAMMediaStream);
+ IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface);
+ IMediaStream** streams;
- return E_NOTIMPL;
+ TRACE("(%p)->(%p)\n", iface, pAMMediaStream);
+
+ streams = CoTaskMemRealloc(This->streams, (This->nb_streams + 1) * sizeof(IMediaStream*));
+ if (!streams)
+ return E_OUTOFMEMORY;
+ This->streams = streams;
+ This->streams[This->nb_streams] = (IMediaStream*)pAMMediaStream;
+ This->nb_streams++;
+
+ IMediaStream_AddRef((IMediaStream*)pAMMediaStream);
+
+ return S_OK;
}
static HRESULT WINAPI MediaStreamFilterImpl_GetMediaStream(IMediaStreamFilter* iface, REFMSPID idPurpose, IMediaStream **ppMediaStream)
{
- FIXME("(%p)->(%s,%p): Stub!\n", iface, debugstr_guid(idPurpose), ppMediaStream);
+ IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface);
+ MSPID purpose_id;
+ unsigned int i;
- return E_NOTIMPL;
+ TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(idPurpose), ppMediaStream);
+
+ for (i = 0; i < This->nb_streams; i++)
+ {
+ IMediaStream_GetInformation(This->streams[i], &purpose_id, NULL);
+ if (IsEqualIID(&purpose_id, idPurpose))
+ {
+ *ppMediaStream = This->streams[i];
+ IMediaStream_AddRef(*ppMediaStream);
+ return S_OK;
+ }
+ }
+
+ return MS_E_NOSTREAM;
}
static HRESULT WINAPI MediaStreamFilterImpl_EnumMediaStreams(IMediaStreamFilter* iface, LONG Index, IMediaStream **ppMediaStream)
More information about the wine-cvs
mailing list