Christian Costa : amstream: Implement IDirectDrawMediaStream.
Alexandre Julliard
julliard at winehq.org
Mon Dec 15 08:27:16 CST 2008
Module: wine
Branch: master
Commit: 039c15a60aca2cff966018f87d622515037da038
URL: http://source.winehq.org/git/wine.git/?a=commit;h=039c15a60aca2cff966018f87d622515037da038
Author: Christian Costa <titan.costa at wanadoo.fr>
Date: Sun Dec 14 19:06:49 2008 +0100
amstream: Implement IDirectDrawMediaStream.
---
dlls/amstream/amstream.c | 6 ++-
dlls/amstream/amstream_private.h | 1 +
dlls/amstream/mediastream.c | 125 +++++++++++++++++++++++++++++++++++++-
3 files changed, 130 insertions(+), 2 deletions(-)
diff --git a/dlls/amstream/amstream.c b/dlls/amstream/amstream.c
index 692403b..384b342 100644
--- a/dlls/amstream/amstream.c
+++ b/dlls/amstream/amstream.c
@@ -257,7 +257,11 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_AddMediaStream(IAMMultiMediaStream
FIXME("(%p/%p)->(%p,%p,%x,%p) partial stub!\n", This, iface, pStreamObject, PurposeId, dwFlags, ppNewStream);
- hr = MediaStream_create((IMultiMediaStream*)iface, PurposeId, This->StreamType, &pStream);
+ if (IsEqualGUID(PurposeId, &MSPID_PrimaryVideo))
+ hr = DirectDrawMediaStream_create((IMultiMediaStream*)iface, PurposeId, This->StreamType, &pStream);
+ else
+ hr = MediaStream_create((IMultiMediaStream*)iface, PurposeId, This->StreamType, &pStream);
+
if (SUCCEEDED(hr))
{
pNewStreams = CoTaskMemAlloc((This->nbStreams+1)*sizeof(IMediaStream*));
diff --git a/dlls/amstream/amstream_private.h b/dlls/amstream/amstream_private.h
index cb457f9..d5efa6c 100644
--- a/dlls/amstream/amstream_private.h
+++ b/dlls/amstream/amstream_private.h
@@ -36,5 +36,6 @@
HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj);
HRESULT MediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, STREAM_TYPE StreamType, IMediaStream** ppMediaStream);
+HRESULT DirectDrawMediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, STREAM_TYPE StreamType, IMediaStream** ppMediaStream);
#endif /* __AMSTREAM_PRIVATE_INCLUDED__ */
diff --git a/dlls/amstream/mediastream.c b/dlls/amstream/mediastream.c
index 2cb7ce6..01ee926 100644
--- a/dlls/amstream/mediastream.c
+++ b/dlls/amstream/mediastream.c
@@ -1,7 +1,7 @@
/*
* Implementation of IMediaStream Interface
*
- * Copyright 2005 Christian Costa
+ * Copyright 2005, 2008 Christian Costa
*
* This file contains the (internal) driver registration functions,
* driver enumeration APIs and DirectDraw creation functions.
@@ -31,6 +31,8 @@
#include "amstream_private.h"
#include "amstream.h"
+#include "ddstream.h"
+
WINE_DEFAULT_DEBUG_CHANNEL(amstream);
typedef struct {
@@ -41,7 +43,16 @@ typedef struct {
STREAM_TYPE StreamType;
} IMediaStreamImpl;
+typedef struct {
+ IDirectDrawMediaStream lpVtbl;
+ LONG ref;
+ IMultiMediaStream* Parent;
+ MSPID PurposeId;
+ STREAM_TYPE StreamType;
+} IDirectDrawMediaStreamImpl;
+
static const struct IMediaStreamVtbl MediaStream_Vtbl;
+static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl;
HRESULT MediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, STREAM_TYPE StreamType, IMediaStream** ppMediaStream)
{
@@ -177,3 +188,115 @@ static const struct IMediaStreamVtbl MediaStream_Vtbl =
IMediaStreamImpl_CreateSharedSample,
IMediaStreamImpl_SendEndOfStream
};
+
+HRESULT DirectDrawMediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, STREAM_TYPE StreamType, IMediaStream** ppMediaStream)
+{
+ IDirectDrawMediaStreamImpl* object;
+
+ TRACE("(%p,%p,%p)\n", Parent, pPurposeId, ppMediaStream);
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMediaStreamImpl));
+
+ object->lpVtbl.lpVtbl = &DirectDrawMediaStream_Vtbl;
+ object->ref = 1;
+
+ object->Parent = Parent;
+ object->PurposeId = *pPurposeId;
+ object->StreamType = StreamType;
+
+ *ppMediaStream = (IMediaStream*)object;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_QueryInterface(IDirectDrawMediaStream* iface, REFIID riid, void** ppvObject)
+{
+ IMediaStreamImpl *This = (IMediaStreamImpl *)iface;
+
+ TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IMediaStream) ||
+ IsEqualGUID(riid, &IID_IDirectDrawMediaStream))
+ {
+ IClassFactory_AddRef(iface);
+ *ppvObject = This;
+ return S_OK;
+ }
+
+ ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetFormat(IDirectDrawMediaStream* iface, DDSURFACEDESC *pDDSDCurrent,
+ IDirectDrawPalette **ppDirectDrawPalette, DDSURFACEDESC *pDDSDDesired, DWORD *pdwFlags)
+{
+ FIXME("(%p)->(%p,%p,%p,%p) stub!\n", iface, pDDSDCurrent, ppDirectDrawPalette, pDDSDDesired, pdwFlags);
+
+ return E_NOTIMPL;
+
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetFormat(IDirectDrawMediaStream* iface, const DDSURFACEDESC *pDDSurfaceDesc,
+ IDirectDrawPalette *pDirectDrawPalette)
+{
+ FIXME("(%p)->(%p,%p) stub!\n", iface, pDDSurfaceDesc, pDirectDrawPalette);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetDirectDraw(IDirectDrawMediaStream* iface, IDirectDraw **ppDirectDraw)
+{
+ FIXME("(%p)->(%p) stub!\n", iface, ppDirectDraw);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_SetDirectDraw(IDirectDrawMediaStream* iface, IDirectDraw *pDirectDraw)
+{
+ FIXME("(%p)->(%p) stub!\n", iface, pDirectDraw);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaStream* iface, IDirectDrawSurface *pSurface, const RECT *pRect,
+ DWORD dwFlags, IDirectDrawStreamSample **ppSample)
+{
+ FIXME("(%p)->(%p,%p,%x,%p) stub!\n", iface, pSurface, pRect, dwFlags, ppSample);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream* iface, STREAM_TIME *pFrameTime)
+{
+ FIXME("(%p)->(%p) stub!\n", iface, pFrameTime);
+
+ return E_NOTIMPL;
+}
+
+/* Note: Hack so we can reuse the old functions without compiler warnings */
+#if !defined(__STRICT_ANSI__) && defined(__GNUC__)
+# define XCAST(fun) (typeof(DirectDrawMediaStream_Vtbl.fun))
+#else
+# define XCAST(fun) (void*)
+#endif
+
+static const struct IDirectDrawMediaStreamVtbl DirectDrawMediaStream_Vtbl =
+{
+ IDirectDrawMediaStreamImpl_QueryInterface,
+ XCAST(AddRef)IMediaStreamImpl_AddRef,
+ XCAST(Release)IMediaStreamImpl_Release,
+ XCAST(GetMultiMediaStream)IMediaStreamImpl_GetMultiMediaStream,
+ XCAST(GetInformation)IMediaStreamImpl_GetInformation,
+ XCAST(SetSameFormat)IMediaStreamImpl_SetSameFormat,
+ XCAST(AllocateSample)IMediaStreamImpl_AllocateSample,
+ XCAST(CreateSharedSample)IMediaStreamImpl_CreateSharedSample,
+ XCAST(SendEndOfStream)IMediaStreamImpl_SendEndOfStream,
+ IDirectDrawMediaStreamImpl_GetFormat,
+ IDirectDrawMediaStreamImpl_SetFormat,
+ IDirectDrawMediaStreamImpl_GetDirectDraw,
+ IDirectDrawMediaStreamImpl_SetDirectDraw,
+ IDirectDrawMediaStreamImpl_CreateSample,
+ IDirectDrawMediaStreamImpl_GetTimePerFrame
+};
+#undef XCAST
More information about the wine-cvs
mailing list