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