Nikolay Sivov : mfsrcsnk/wave: Store media format structure.

Alexandre Julliard julliard at winehq.org
Mon Aug 15 15:22:31 CDT 2022


Module: wine
Branch: master
Commit: 762356404848adbc75d39e469fab4b6d059d22f4
URL:    https://gitlab.winehq.org/wine/wine/-/commit/762356404848adbc75d39e469fab4b6d059d22f4

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat Aug 13 20:39:01 2022 +0300

mfsrcsnk/wave: Store media format structure.

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

---

 dlls/mfsrcsnk/Makefile.in |  2 +-
 dlls/mfsrcsnk/wave.c      | 13 +++++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/dlls/mfsrcsnk/Makefile.in b/dlls/mfsrcsnk/Makefile.in
index 8482d8f3556..a63ebaf60eb 100644
--- a/dlls/mfsrcsnk/Makefile.in
+++ b/dlls/mfsrcsnk/Makefile.in
@@ -1,6 +1,6 @@
 MODULE    = mfsrcsnk.dll
 IMPORTLIB = mfsrcsnk
-IMPORTS   = mfplat mfuuid uuid
+IMPORTS   = ole32 mfplat mfuuid uuid
 
 EXTRADLLFLAGS = -Wb,--prefer-native
 
diff --git a/dlls/mfsrcsnk/wave.c b/dlls/mfsrcsnk/wave.c
index b9951b3e2b6..583eefb98b0 100644
--- a/dlls/mfsrcsnk/wave.c
+++ b/dlls/mfsrcsnk/wave.c
@@ -64,6 +64,7 @@ struct wave_sink
     IMFMediaEventQueue *stream_event_queue;
     IMFPresentationClock *clock;
 
+    WAVEFORMATEX *fmt;
     IMFByteStream *bytestream;
 
     unsigned int flags;
@@ -144,6 +145,7 @@ static ULONG WINAPI wave_sink_Release(IMFFinalizableMediaSink *iface)
         if (sink->stream_event_queue)
             IMFMediaEventQueue_Release(sink->stream_event_queue);
         IMFByteStream_Release(sink->bytestream);
+        CoTaskMemFree(sink->fmt);
         DeleteCriticalSection(&sink->cs);
         free(sink);
     }
@@ -679,6 +681,7 @@ HRESULT WINAPI MFCreateWAVEMediaSink(IMFByteStream *bytestream, IMFMediaType *me
 {
     struct wave_sink *object;
     DWORD flags = 0;
+    UINT32 size;
     HRESULT hr;
 
     TRACE("%p, %p, %p.\n", bytestream, media_type, sink);
@@ -689,11 +692,17 @@ HRESULT WINAPI MFCreateWAVEMediaSink(IMFByteStream *bytestream, IMFMediaType *me
     if (FAILED(hr = IMFByteStream_GetCapabilities(bytestream, &flags))) return hr;
     if (!(flags & MFBYTESTREAM_IS_WRITABLE)) return E_INVALIDARG;
 
-    /* FIXME: do basic media type validation */
-
     if (!(object = calloc(1, sizeof(*object))))
         return E_OUTOFMEMORY;
 
+    /* FIXME: do basic media type validation */
+
+    if (FAILED(hr = MFCreateWaveFormatExFromMFMediaType(media_type, &object->fmt, &size, 0)))
+    {
+        WARN("Failed to produce WAVEFORMATEX representation, hr %#lx.\n", hr);
+        goto failed;
+    }
+
     object->IMFFinalizableMediaSink_iface.lpVtbl = &wave_sink_vtbl;
     object->IMFMediaEventGenerator_iface.lpVtbl = &wave_sink_events_vtbl;
     object->IMFStreamSink_iface.lpVtbl = &wave_stream_sink_vtbl;




More information about the wine-cvs mailing list