[PATCH 2/7] amstream: Allow AMAudioStream and AMDirectDrawStream to be created by CoCreateInstance.

Anton Baskanov baskanov at gmail.com
Fri May 22 10:40:04 CDT 2020


Signed-off-by: Anton Baskanov <baskanov at gmail.com>
---
 dlls/amstream/amstream_classes.idl |  7 +++++++
 dlls/amstream/amstream_private.h   |  2 ++
 dlls/amstream/audiostream.c        | 24 ++++++++++++++++++++++++
 dlls/amstream/ddrawstream.c        | 22 ++++++++++++++++++++++
 dlls/amstream/main.c               |  3 ++-
 5 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/dlls/amstream/amstream_classes.idl b/dlls/amstream/amstream_classes.idl
index e6bda830b4..2251bf734e 100644
--- a/dlls/amstream/amstream_classes.idl
+++ b/dlls/amstream/amstream_classes.idl
@@ -34,6 +34,13 @@ coclass MediaStreamFilter { interface IMediaStreamFilter; }
 ]
 coclass AMDirectDrawStream { interface IAMMultiMediaStream; }
 
+[
+    helpstring("AuStream Class"),
+    threading(both),
+    uuid(8496e040-af4c-11d0-8212-00c04fc32c45)
+]
+coclass AMAudioStream { interface IAMMediaStream; }
+
 [
     helpstring("MMStream Class"),
     threading(both),
diff --git a/dlls/amstream/amstream_private.h b/dlls/amstream/amstream_private.h
index 96b933f5bc..d567fe3f68 100644
--- a/dlls/amstream/amstream_private.h
+++ b/dlls/amstream/amstream_private.h
@@ -37,6 +37,8 @@
 HRESULT multimedia_stream_create(IUnknown *outer, void **out) DECLSPEC_HIDDEN;
 HRESULT AMAudioData_create(IUnknown *pUnkOuter, LPVOID *ppObj) DECLSPEC_HIDDEN;
 HRESULT filter_create(IUnknown *outer, void **out) DECLSPEC_HIDDEN;
+HRESULT ddraw_stream_create(IUnknown *outer, void **out) DECLSPEC_HIDDEN;
+HRESULT audio_stream_create(IUnknown *outer, void **out) DECLSPEC_HIDDEN;
 HRESULT ddraw_stream_create_and_initialize(IMultiMediaStream *parent, const MSPID *purpose_id,
         IUnknown *stream_object, STREAM_TYPE type, IAMMediaStream **stream) DECLSPEC_HIDDEN;
 HRESULT audio_stream_create_and_initialize(IMultiMediaStream *parent, const MSPID *purpose_id,
diff --git a/dlls/amstream/audiostream.c b/dlls/amstream/audiostream.c
index 349e657405..2379a59350 100644
--- a/dlls/amstream/audiostream.c
+++ b/dlls/amstream/audiostream.c
@@ -1292,6 +1292,30 @@ static const IMemInputPinVtbl audio_meminput_vtbl =
     audio_meminput_ReceiveCanBlock,
 };
 
+HRESULT audio_stream_create(IUnknown *outer, void **out)
+{
+    struct audio_stream *object;
+
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    if (!object)
+        return E_OUTOFMEMORY;
+
+    object->IAMMediaStream_iface.lpVtbl = &audio_IAMMediaStream_vtbl;
+    object->IAudioMediaStream_iface.lpVtbl = &audio_IAudioMediaStream_vtbl;
+    object->IMemInputPin_iface.lpVtbl = &audio_meminput_vtbl;
+    object->IPin_iface.lpVtbl = &audio_sink_vtbl;
+    object->ref = 1;
+
+    InitializeCriticalSection(&object->cs);
+    list_init(&object->receive_queue);
+    list_init(&object->update_queue);
+
+    TRACE("Created audio stream %p.\n", object);
+    *out = &object->IAMMediaStream_iface;
+
+    return S_OK;
+}
+
 HRESULT audio_stream_create_and_initialize(IMultiMediaStream *parent, const MSPID *purpose_id,
         IUnknown *stream_object, STREAM_TYPE stream_type, IAMMediaStream **media_stream)
 {
diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c
index d21bf207ef..2b0c871d58 100644
--- a/dlls/amstream/ddrawstream.c
+++ b/dlls/amstream/ddrawstream.c
@@ -940,6 +940,28 @@ static const IMemInputPinVtbl ddraw_meminput_vtbl =
     ddraw_meminput_ReceiveCanBlock,
 };
 
+HRESULT ddraw_stream_create(IUnknown *outer, void **out)
+{
+    struct ddraw_stream *object;
+
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    if (!object)
+        return E_OUTOFMEMORY;
+
+    object->IAMMediaStream_iface.lpVtbl = &ddraw_IAMMediaStream_vtbl;
+    object->IDirectDrawMediaStream_iface.lpVtbl = &ddraw_IDirectDrawMediaStream_Vtbl;
+    object->IMemInputPin_iface.lpVtbl = &ddraw_meminput_vtbl;
+    object->IPin_iface.lpVtbl = &ddraw_sink_vtbl;
+    object->ref = 1;
+
+    InitializeCriticalSection(&object->cs);
+
+    TRACE("Created ddraw stream %p.\n", object);
+    *out = &object->IAMMediaStream_iface;
+
+    return S_OK;
+}
+
 HRESULT ddraw_stream_create_and_initialize(IMultiMediaStream *parent, const MSPID *purpose_id,
         IUnknown *stream_object, STREAM_TYPE stream_type, IAMMediaStream **media_stream)
 {
diff --git a/dlls/amstream/main.c b/dlls/amstream/main.c
index c718f42448..c581e516bd 100644
--- a/dlls/amstream/main.c
+++ b/dlls/amstream/main.c
@@ -74,7 +74,8 @@ struct object_creation_info
 static const struct object_creation_info object_creation[] =
 {
     { &CLSID_AMMultiMediaStream, multimedia_stream_create },
-    { &CLSID_AMDirectDrawStream, multimedia_stream_create },
+    { &CLSID_AMDirectDrawStream, ddraw_stream_create },
+    { &CLSID_AMAudioStream, audio_stream_create },
     { &CLSID_AMAudioData, AMAudioData_create },
     { &CLSID_MediaStreamFilter, filter_create }
 };
-- 
2.17.1




More information about the wine-devel mailing list