From: Nikolay Sivov nsivov@codeweavers.com
(cherry picked from commit b44bfb7645d78973495241eca53a9da9023a46fb) Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfreadwrite/writer.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/dlls/mfreadwrite/writer.c b/dlls/mfreadwrite/writer.c index a157bccd785..4e4bc988c9b 100644 --- a/dlls/mfreadwrite/writer.c +++ b/dlls/mfreadwrite/writer.c @@ -83,6 +83,8 @@ struct sink_writer HRESULT status; MF_SINK_WRITER_STATISTICS stats;
+ IMFSinkWriterCallback *callback; + CRITICAL_SECTION cs; };
@@ -215,6 +217,8 @@ static ULONG WINAPI sink_writer_Release(IMFSinkWriter *iface) IMFPresentationClock_Release(writer->clock); if (writer->sink) IMFMediaSink_Release(writer->sink); + if (writer->callback) + IMFSinkWriterCallback_Release(writer->callback); for (i = 0; i < writer->streams.count; ++i) { struct stream *stream = &writer->streams.items[i]; @@ -885,6 +889,12 @@ HRESULT create_sink_writer_from_sink(IMFMediaSink *sink, IMFAttributes *attribut object->stats.cb = sizeof(object->stats); InitializeCriticalSection(&object->cs);
+ if (attributes) + { + IMFAttributes_GetUnknown(attributes, &MF_SINK_WRITER_ASYNC_CALLBACK, + &IID_IMFSinkWriterCallback, (void **)&object->callback); + } + if (FAILED(hr = sink_writer_initialize_existing_streams(object, sink))) { IMFSinkWriter_Release(&object->IMFSinkWriter_iface);