[v2 PATCH 3/3] mfreadwrite: Move Sink Writer stubs to separate file.

Nikolay Sivov nsivov at codeweavers.com
Thu Mar 26 14:09:54 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---

v2: added missing file

 dlls/mfreadwrite/Makefile.in          |   3 +-
 dlls/mfreadwrite/mf_private.h         |  22 +++
 dlls/mfreadwrite/{main.c => reader.c} | 209 +---------------------
 dlls/mfreadwrite/writer.c             | 238 ++++++++++++++++++++++++++
 4 files changed, 264 insertions(+), 208 deletions(-)
 create mode 100644 dlls/mfreadwrite/mf_private.h
 rename dlls/mfreadwrite/{main.c => reader.c} (92%)
 create mode 100644 dlls/mfreadwrite/writer.c

diff --git a/dlls/mfreadwrite/Makefile.in b/dlls/mfreadwrite/Makefile.in
index ce63ad5824..733732b431 100644
--- a/dlls/mfreadwrite/Makefile.in
+++ b/dlls/mfreadwrite/Makefile.in
@@ -5,6 +5,7 @@ IMPORTS   = mfuuid uuid mfplat ole32
 EXTRADLLFLAGS = -mno-cygwin
 
 C_SRCS = \
-	main.c
+	reader.c \
+	writer.c
 
 IDL_SRCS = mf_classes.idl
diff --git a/dlls/mfreadwrite/mf_private.h b/dlls/mfreadwrite/mf_private.h
new file mode 100644
index 0000000000..4e23ab7b3e
--- /dev/null
+++ b/dlls/mfreadwrite/mf_private.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2020 Nikolay Sivov for CodeWeavers
+ *
+ * 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
+ */
+
+extern HRESULT create_sink_writer_from_stream(IMFByteStream *stream, IMFAttributes *attributes,
+        REFIID riid, void **out) DECLSPEC_HIDDEN;
+extern HRESULT create_sink_writer_from_sink(IMFMediaSink *sink, IMFAttributes *attributes,
+        REFIID riid, void **out) DECLSPEC_HIDDEN;
diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/reader.c
similarity index 92%
rename from dlls/mfreadwrite/main.c
rename to dlls/mfreadwrite/reader.c
index 138a5adc28..3b024fc80c 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/reader.c
@@ -38,6 +38,8 @@
 #include "wine/heap.h"
 #include "wine/list.h"
 
+#include "mf_private.h"
+
 WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
 
 static HINSTANCE mfinstance;
@@ -151,12 +153,6 @@ struct source_reader
     CRITICAL_SECTION cs;
 };
 
-struct sink_writer
-{
-    IMFSinkWriter IMFSinkWriter_iface;
-    LONG refcount;
-};
-
 static inline struct source_reader *impl_from_IMFSourceReader(IMFSourceReader *iface)
 {
     return CONTAINING_RECORD(iface, struct source_reader, IMFSourceReader_iface);
@@ -182,11 +178,6 @@ static struct source_reader_async_command *impl_from_async_command_IUnknown(IUnk
     return CONTAINING_RECORD(iface, struct source_reader_async_command, IUnknown_iface);
 }
 
-static inline struct sink_writer *impl_from_IMFSinkWriter(IMFSinkWriter *iface)
-{
-    return CONTAINING_RECORD(iface, struct sink_writer, IMFSinkWriter_iface);
-}
-
 static HRESULT WINAPI source_reader_async_command_QueryInterface(IUnknown *iface, REFIID riid, void **obj)
 {
     if (IsEqualIID(riid, &IID_IUnknown))
@@ -2060,202 +2051,6 @@ static HRESULT create_source_reader_from_url(const WCHAR *url, IMFAttributes *at
     return hr;
 }
 
-static HRESULT WINAPI sink_writer_QueryInterface(IMFSinkWriter *iface, REFIID riid, void **out)
-{
-    TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out);
-
-    if (IsEqualIID(riid, &IID_IMFSinkWriter) ||
-            IsEqualIID(riid, &IID_IUnknown))
-    {
-        *out = iface;
-        IMFSinkWriter_AddRef(iface);
-        return S_OK;
-    }
-
-    WARN("Unsupported %s.\n", debugstr_guid(riid));
-    *out = NULL;
-    return E_NOINTERFACE;
-}
-
-static ULONG WINAPI sink_writer_AddRef(IMFSinkWriter *iface)
-{
-    struct sink_writer *writer = impl_from_IMFSinkWriter(iface);
-    ULONG refcount = InterlockedIncrement(&writer->refcount);
-
-    TRACE("%p, %u.\n", iface, refcount);
-
-    return refcount;
-}
-
-static ULONG WINAPI sink_writer_Release(IMFSinkWriter *iface)
-{
-    struct sink_writer *writer = impl_from_IMFSinkWriter(iface);
-    ULONG refcount = InterlockedDecrement(&writer->refcount);
-
-    TRACE("%p, %u.\n", iface, refcount);
-
-    if (!refcount)
-    {
-        heap_free(writer);
-    }
-
-    return refcount;
-}
-
-static HRESULT WINAPI sink_writer_AddStream(IMFSinkWriter *iface, IMFMediaType *type, DWORD *index)
-{
-    FIXME("%p, %p, %p.\n", iface, type, index);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_SetInputMediaType(IMFSinkWriter *iface, DWORD index, IMFMediaType *type,
-        IMFAttributes *parameters)
-{
-    FIXME("%p, %u, %p, %p.\n", iface, index, type, parameters);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_BeginWriting(IMFSinkWriter *iface)
-{
-    FIXME("%p.\n", iface);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_WriteSample(IMFSinkWriter *iface, DWORD index, IMFSample *sample)
-{
-    FIXME("%p, %u, %p.\n", iface, index, sample);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_SendStreamTick(IMFSinkWriter *iface, DWORD index, LONGLONG timestamp)
-{
-    FIXME("%p, %u, %s.\n", iface, index, wine_dbgstr_longlong(timestamp));
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_PlaceMarker(IMFSinkWriter *iface, DWORD index, void *context)
-{
-    FIXME("%p, %u, %p.\n", iface, index, context);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_NotifyEndOfSegment(IMFSinkWriter *iface, DWORD index)
-{
-    FIXME("%p, %u.\n", iface, index);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_Flush(IMFSinkWriter *iface, DWORD index)
-{
-    FIXME("%p, %u.\n", iface, index);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_Finalize(IMFSinkWriter *iface)
-{
-    FIXME("%p.\n", iface);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_GetServiceForStream(IMFSinkWriter *iface, DWORD index, REFGUID service,
-        REFIID riid, void **object)
-{
-    FIXME("%p, %u, %s, %s, %p.\n", iface, index, debugstr_guid(service), debugstr_guid(riid), object);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI sink_writer_GetStatistics(IMFSinkWriter *iface, DWORD index, MF_SINK_WRITER_STATISTICS *stats)
-{
-    FIXME("%p, %u, %p.\n", iface, index, stats);
-
-    return E_NOTIMPL;
-}
-
-static const IMFSinkWriterVtbl sink_writer_vtbl =
-{
-    sink_writer_QueryInterface,
-    sink_writer_AddRef,
-    sink_writer_Release,
-    sink_writer_AddStream,
-    sink_writer_SetInputMediaType,
-    sink_writer_BeginWriting,
-    sink_writer_WriteSample,
-    sink_writer_SendStreamTick,
-    sink_writer_PlaceMarker,
-    sink_writer_NotifyEndOfSegment,
-    sink_writer_Flush,
-    sink_writer_Finalize,
-    sink_writer_GetServiceForStream,
-    sink_writer_GetStatistics,
-};
-
-static HRESULT create_sink_writer_from_sink(IMFMediaSink *sink, IMFAttributes *attributes,
-        REFIID riid, void **out)
-{
-    struct sink_writer *object;
-    HRESULT hr;
-
-    object = heap_alloc(sizeof(*object));
-    if (!object)
-        return E_OUTOFMEMORY;
-
-    object->IMFSinkWriter_iface.lpVtbl = &sink_writer_vtbl;
-    object->refcount = 1;
-
-    hr = IMFSinkWriter_QueryInterface(&object->IMFSinkWriter_iface, riid, out);
-    IMFSinkWriter_Release(&object->IMFSinkWriter_iface);
-    return hr;
-}
-
-static HRESULT create_sink_writer_from_stream(IMFByteStream *stream, IMFAttributes *attributes,
-        REFIID riid, void **out)
-{
-    struct sink_writer *object;
-    HRESULT hr;
-
-    object = heap_alloc(sizeof(*object));
-    if (!object)
-        return E_OUTOFMEMORY;
-
-    object->IMFSinkWriter_iface.lpVtbl = &sink_writer_vtbl;
-    object->refcount = 1;
-
-    hr = IMFSinkWriter_QueryInterface(&object->IMFSinkWriter_iface, riid, out);
-    IMFSinkWriter_Release(&object->IMFSinkWriter_iface);
-    return hr;
-}
-
-/***********************************************************************
- *      MFCreateSinkWriterFromMediaSink (mfreadwrite.@)
- */
-HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *sink, IMFAttributes *attributes, IMFSinkWriter **writer)
-{
-    TRACE("%p, %p, %p.\n", sink, attributes, writer);
-
-    return create_sink_writer_from_sink(sink, attributes, &IID_IMFSinkWriter, (void **)writer);
-}
-
-/***********************************************************************
- *      MFCreateSinkWriterFromURL (mfreadwrite.@)
- */
-HRESULT WINAPI MFCreateSinkWriterFromURL(const WCHAR *url, IMFByteStream *bytestream, IMFAttributes *attributes,
-        IMFSinkWriter **writer)
-{
-    FIXME("%s, %p, %p, %p.\n", debugstr_w(url), bytestream, attributes, writer);
-
-    return E_NOTIMPL;
-}
-
 static HRESULT create_source_reader_from_object(IUnknown *unk, IMFAttributes *attributes, REFIID riid, void **out)
 {
     IMFMediaSource *source = NULL;
diff --git a/dlls/mfreadwrite/writer.c b/dlls/mfreadwrite/writer.c
new file mode 100644
index 0000000000..234ce395b3
--- /dev/null
+++ b/dlls/mfreadwrite/writer.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2020 Nikolay Sivov for CodeWeavers
+ *
+ * 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
+ */
+
+#define COBJMACROS
+#define NONAMELESSUNION
+
+#include "mfapi.h"
+#include "mfidl.h"
+#include "mfreadwrite.h"
+#include "mf_private.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
+
+struct sink_writer
+{
+    IMFSinkWriter IMFSinkWriter_iface;
+    LONG refcount;
+};
+
+static struct sink_writer *impl_from_IMFSinkWriter(IMFSinkWriter *iface)
+{
+    return CONTAINING_RECORD(iface, struct sink_writer, IMFSinkWriter_iface);
+}
+
+static HRESULT WINAPI sink_writer_QueryInterface(IMFSinkWriter *iface, REFIID riid, void **out)
+{
+    TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out);
+
+    if (IsEqualIID(riid, &IID_IMFSinkWriter) ||
+            IsEqualIID(riid, &IID_IUnknown))
+    {
+        *out = iface;
+        IMFSinkWriter_AddRef(iface);
+        return S_OK;
+    }
+
+    WARN("Unsupported %s.\n", debugstr_guid(riid));
+    *out = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI sink_writer_AddRef(IMFSinkWriter *iface)
+{
+    struct sink_writer *writer = impl_from_IMFSinkWriter(iface);
+    ULONG refcount = InterlockedIncrement(&writer->refcount);
+
+    TRACE("%p, %u.\n", iface, refcount);
+
+    return refcount;
+}
+
+static ULONG WINAPI sink_writer_Release(IMFSinkWriter *iface)
+{
+    struct sink_writer *writer = impl_from_IMFSinkWriter(iface);
+    ULONG refcount = InterlockedDecrement(&writer->refcount);
+
+    TRACE("%p, %u.\n", iface, refcount);
+
+    if (!refcount)
+    {
+        heap_free(writer);
+    }
+
+    return refcount;
+}
+
+static HRESULT WINAPI sink_writer_AddStream(IMFSinkWriter *iface, IMFMediaType *type, DWORD *index)
+{
+    FIXME("%p, %p, %p.\n", iface, type, index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_SetInputMediaType(IMFSinkWriter *iface, DWORD index, IMFMediaType *type,
+        IMFAttributes *parameters)
+{
+    FIXME("%p, %u, %p, %p.\n", iface, index, type, parameters);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_BeginWriting(IMFSinkWriter *iface)
+{
+    FIXME("%p.\n", iface);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_WriteSample(IMFSinkWriter *iface, DWORD index, IMFSample *sample)
+{
+    FIXME("%p, %u, %p.\n", iface, index, sample);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_SendStreamTick(IMFSinkWriter *iface, DWORD index, LONGLONG timestamp)
+{
+    FIXME("%p, %u, %s.\n", iface, index, wine_dbgstr_longlong(timestamp));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_PlaceMarker(IMFSinkWriter *iface, DWORD index, void *context)
+{
+    FIXME("%p, %u, %p.\n", iface, index, context);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_NotifyEndOfSegment(IMFSinkWriter *iface, DWORD index)
+{
+    FIXME("%p, %u.\n", iface, index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_Flush(IMFSinkWriter *iface, DWORD index)
+{
+    FIXME("%p, %u.\n", iface, index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_Finalize(IMFSinkWriter *iface)
+{
+    FIXME("%p.\n", iface);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_GetServiceForStream(IMFSinkWriter *iface, DWORD index, REFGUID service,
+        REFIID riid, void **object)
+{
+    FIXME("%p, %u, %s, %s, %p.\n", iface, index, debugstr_guid(service), debugstr_guid(riid), object);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI sink_writer_GetStatistics(IMFSinkWriter *iface, DWORD index, MF_SINK_WRITER_STATISTICS *stats)
+{
+    FIXME("%p, %u, %p.\n", iface, index, stats);
+
+    return E_NOTIMPL;
+}
+
+static const IMFSinkWriterVtbl sink_writer_vtbl =
+{
+    sink_writer_QueryInterface,
+    sink_writer_AddRef,
+    sink_writer_Release,
+    sink_writer_AddStream,
+    sink_writer_SetInputMediaType,
+    sink_writer_BeginWriting,
+    sink_writer_WriteSample,
+    sink_writer_SendStreamTick,
+    sink_writer_PlaceMarker,
+    sink_writer_NotifyEndOfSegment,
+    sink_writer_Flush,
+    sink_writer_Finalize,
+    sink_writer_GetServiceForStream,
+    sink_writer_GetStatistics,
+};
+
+HRESULT create_sink_writer_from_sink(IMFMediaSink *sink, IMFAttributes *attributes,
+        REFIID riid, void **out)
+{
+    struct sink_writer *object;
+    HRESULT hr;
+
+    object = heap_alloc(sizeof(*object));
+    if (!object)
+        return E_OUTOFMEMORY;
+
+    object->IMFSinkWriter_iface.lpVtbl = &sink_writer_vtbl;
+    object->refcount = 1;
+
+    hr = IMFSinkWriter_QueryInterface(&object->IMFSinkWriter_iface, riid, out);
+    IMFSinkWriter_Release(&object->IMFSinkWriter_iface);
+    return hr;
+}
+
+HRESULT create_sink_writer_from_stream(IMFByteStream *stream, IMFAttributes *attributes,
+        REFIID riid, void **out)
+{
+    struct sink_writer *object;
+    HRESULT hr;
+
+    object = heap_alloc(sizeof(*object));
+    if (!object)
+        return E_OUTOFMEMORY;
+
+    object->IMFSinkWriter_iface.lpVtbl = &sink_writer_vtbl;
+    object->refcount = 1;
+
+    hr = IMFSinkWriter_QueryInterface(&object->IMFSinkWriter_iface, riid, out);
+    IMFSinkWriter_Release(&object->IMFSinkWriter_iface);
+    return hr;
+}
+
+/***********************************************************************
+ *      MFCreateSinkWriterFromMediaSink (mfreadwrite.@)
+ */
+HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *sink, IMFAttributes *attributes, IMFSinkWriter **writer)
+{
+    TRACE("%p, %p, %p.\n", sink, attributes, writer);
+
+    return create_sink_writer_from_sink(sink, attributes, &IID_IMFSinkWriter, (void **)writer);
+}
+
+/***********************************************************************
+ *      MFCreateSinkWriterFromURL (mfreadwrite.@)
+ */
+HRESULT WINAPI MFCreateSinkWriterFromURL(const WCHAR *url, IMFByteStream *bytestream, IMFAttributes *attributes,
+        IMFSinkWriter **writer)
+{
+    FIXME("%s, %p, %p, %p.\n", debugstr_w(url), bytestream, attributes, writer);
+
+    return E_NOTIMPL;
+}
+
-- 
2.25.1




More information about the wine-devel mailing list