[PATCH 1/2] amstream: Add stubbed implementation of DirectDrawStreamSample. (try 3)
Christian Costa
titan.costa at gmail.com
Tue Apr 24 15:29:29 CDT 2012
Try3: Put sample stuff in stream_sample.c
Try2: Fix QueryInterface.
---
dlls/amstream/Makefile.in | 3 -
dlls/amstream/amstream_private.h | 2
dlls/amstream/mediastream.c | 4 -
dlls/amstream/stream_sample.c | 182 ++++++++++++++++++++++++++++++++++++++
dlls/amstream/tests/amstream.c | 4 -
5 files changed, 190 insertions(+), 5 deletions(-)
create mode 100644 dlls/amstream/stream_sample.c
diff --git a/dlls/amstream/Makefile.in b/dlls/amstream/Makefile.in
index 35cfae1..6589bc1 100644
--- a/dlls/amstream/Makefile.in
+++ b/dlls/amstream/Makefile.in
@@ -6,7 +6,8 @@ C_SRCS = \
audiodata.c \
main.c \
mediastream.c \
- mediastreamfilter.c
+ mediastreamfilter.c \
+ stream_sample.c
IDL_R_SRCS = amstream_classes.idl
diff --git a/dlls/amstream/amstream_private.h b/dlls/amstream/amstream_private.h
index 0881c3e..e75557e 100644
--- a/dlls/amstream/amstream_private.h
+++ b/dlls/amstream/amstream_private.h
@@ -31,6 +31,7 @@
#include "dshow.h"
#include "mmstream.h"
#include "austream.h"
+#include "ddstream.h"
HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj) DECLSPEC_HIDDEN;
HRESULT AMAudioData_create(IUnknown *pUnkOuter, LPVOID *ppObj) DECLSPEC_HIDDEN;
@@ -39,5 +40,6 @@ HRESULT ddrawmediastream_create(IMultiMediaStream *Parent, const MSPID *pPurpose
STREAM_TYPE StreamType, IMediaStream **ppMediaStream) DECLSPEC_HIDDEN;
HRESULT audiomediastream_create(IMultiMediaStream *parent, const MSPID *purpose_id,
STREAM_TYPE stream_type, IMediaStream **media_stream) DECLSPEC_HIDDEN;
+HRESULT ddrawstreamsample_create(IDirectDrawMediaStream *parent, IDirectDrawStreamSample **ddraw_stream_sample) DECLSPEC_HIDDEN;
#endif /* __AMSTREAM_PRIVATE_INCLUDED__ */
diff --git a/dlls/amstream/mediastream.c b/dlls/amstream/mediastream.c
index afebdcd..9961c7a 100644
--- a/dlls/amstream/mediastream.c
+++ b/dlls/amstream/mediastream.c
@@ -194,9 +194,9 @@ static HRESULT WINAPI IDirectDrawMediaStreamImpl_CreateSample(IDirectDrawMediaSt
IDirectDrawSurface *pSurface, const RECT *pRect, DWORD dwFlags,
IDirectDrawStreamSample **ppSample)
{
- FIXME("(%p)->(%p,%p,%x,%p) stub!\n", iface, pSurface, pRect, dwFlags, ppSample);
+ TRACE("(%p)->(%p,%p,%x,%p)\n", iface, pSurface, pRect, dwFlags, ppSample);
- return E_NOTIMPL;
+ return ddrawstreamsample_create(iface, ppSample);
}
static HRESULT WINAPI IDirectDrawMediaStreamImpl_GetTimePerFrame(IDirectDrawMediaStream *iface,
diff --git a/dlls/amstream/stream_sample.c b/dlls/amstream/stream_sample.c
new file mode 100644
index 0000000..957bf9b
--- /dev/null
+++ b/dlls/amstream/stream_sample.c
@@ -0,0 +1,182 @@
+/*
+ * Implementation of IStreamSample Interfaces
+ *
+ * Copyright 2012 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/debug.h"
+
+#define COBJMACROS
+
+#include "winbase.h"
+#include "wingdi.h"
+
+#include "amstream_private.h"
+#include "amstream.h"
+
+#include "ddstream.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(amstream);
+
+typedef struct {
+ IDirectDrawStreamSample IDirectDrawStreamSample_iface;
+ LONG ref;
+ IMediaStream *parent;
+} IDirectDrawStreamSampleImpl;
+
+static inline IDirectDrawStreamSampleImpl *impl_from_IDirectDrawStreamSample(IDirectDrawStreamSample *iface)
+{
+ return CONTAINING_RECORD(iface, IDirectDrawStreamSampleImpl, IDirectDrawStreamSample_iface);
+}
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_QueryInterface(IDirectDrawStreamSample *iface,
+ REFIID riid, void **ret_iface)
+{
+ TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ret_iface);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IStreamSample) ||
+ IsEqualGUID(riid, &IID_IDirectDrawStreamSample))
+ {
+ IDirectDrawStreamSample_AddRef(iface);
+ *ret_iface = iface;
+ return S_OK;
+ }
+
+ *ret_iface = NULL;
+
+ ERR("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ret_iface);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IDirectDrawStreamSampleImpl_AddRef(IDirectDrawStreamSample *iface)
+{
+ IDirectDrawStreamSampleImpl *This = impl_from_IDirectDrawStreamSample(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(): new ref = %u\n", iface, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI IDirectDrawStreamSampleImpl_Release(IDirectDrawStreamSample *iface)
+{
+ IDirectDrawStreamSampleImpl *This = impl_from_IDirectDrawStreamSample(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(): new ref = %u\n", iface, ref);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+/*** IStreamSample methods ***/
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetMediaStream(IDirectDrawStreamSample *iface, IMediaStream **media_stream)
+{
+ FIXME("(%p)->(%p): stub\n", iface, media_stream);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetSampleTimes(IDirectDrawStreamSample *iface, STREAM_TIME *start_time,
+ STREAM_TIME *end_time, STREAM_TIME *current_time)
+{
+ FIXME("(%p)->(%p,%p,%p): stub\n", iface, start_time, end_time, current_time);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_SetSampleTimes(IDirectDrawStreamSample *iface, const STREAM_TIME *start_time,
+ const STREAM_TIME *end_time)
+{
+ FIXME("(%p)->(%p,%p): stub\n", iface, start_time, end_time);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_Update(IDirectDrawStreamSample *iface, DWORD flags, HANDLE event,
+ PAPCFUNC func_APC, DWORD APC_data)
+{
+ FIXME("(%p)->(%x,%p,%p,%u): stub\n", iface, flags, event, func_APC, APC_data);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_CompletionStatus(IDirectDrawStreamSample *iface, DWORD flags, DWORD milliseconds)
+{
+ FIXME("(%p)->(%x,%u): stub\n", iface, flags, milliseconds);
+
+ return E_NOTIMPL;
+}
+
+/*** IDirectDrawStreamSample methods ***/
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_GetSurface(IDirectDrawStreamSample *iface, IDirectDrawSurface **ddraw_surface,
+ RECT *rect)
+{
+ FIXME("(%p)->(%p,%p): stub\n", iface, ddraw_surface, rect);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectDrawStreamSampleImpl_SetRect(IDirectDrawStreamSample *iface, const RECT *rect)
+{
+ FIXME("(%p)->(%p): stub\n", iface, rect);
+
+ return E_NOTIMPL;
+}
+
+static const struct IDirectDrawStreamSampleVtbl DirectDrawStreamSample_Vtbl =
+{
+ /*** IUnknown methods ***/
+ IDirectDrawStreamSampleImpl_QueryInterface,
+ IDirectDrawStreamSampleImpl_AddRef,
+ IDirectDrawStreamSampleImpl_Release,
+ /*** IStreamSample methods ***/
+ IDirectDrawStreamSampleImpl_GetMediaStream,
+ IDirectDrawStreamSampleImpl_GetSampleTimes,
+ IDirectDrawStreamSampleImpl_SetSampleTimes,
+ IDirectDrawStreamSampleImpl_Update,
+ IDirectDrawStreamSampleImpl_CompletionStatus,
+ /*** IDirectDrawStreamSample methods ***/
+ IDirectDrawStreamSampleImpl_GetSurface,
+ IDirectDrawStreamSampleImpl_SetRect
+};
+
+HRESULT ddrawstreamsample_create(IDirectDrawMediaStream *parent, IDirectDrawStreamSample **ddraw_stream_sample)
+{
+ IDirectDrawStreamSampleImpl *object;
+
+ TRACE("(%p)\n", ddraw_stream_sample);
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawStreamSampleImpl));
+ if (!object)
+ {
+ ERR("Out of memory\n");
+ return E_OUTOFMEMORY;
+ }
+
+ object->IDirectDrawStreamSample_iface.lpVtbl = &DirectDrawStreamSample_Vtbl;
+ object->ref = 1;
+ object->parent = (IMediaStream*)parent;
+
+ *ddraw_stream_sample = (IDirectDrawStreamSample*)&object->IDirectDrawStreamSample_iface;
+
+ return S_OK;
+}
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
index 14c3e42..6d4b601 100644
--- a/dlls/amstream/tests/amstream.c
+++ b/dlls/amstream/tests/amstream.c
@@ -151,7 +151,7 @@ static void test_renderfile(void)
if (FAILED(hr)) goto error;
hr = IDirectDrawMediaStream_CreateSample(pddstream, NULL, NULL, 0, &pddsample);
- todo_wine ok(hr==S_OK, "IDirectDrawMediaStream_CreateSample returned: %x\n", hr);
+ ok(hr == S_OK, "IDirectDrawMediaStream_CreateSample returned: %x\n", hr);
error:
if (pddsample)
@@ -249,7 +249,7 @@ static void test_media_streams(void)
if (SUCCEEDED(hr))
{
hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &ddraw_sample);
- todo_wine ok(hr==S_OK, "IDirectDrawMediaStream_CreateSample returned: %x\n", hr);
+ ok(hr == S_OK, "IDirectDrawMediaStream_CreateSample returned: %x\n", hr);
}
if (ddraw_sample)
More information about the wine-patches
mailing list