[PATCH 2/2] mfplat: Implement MFCreateMediaEvent.

Sven Baars sven.wine at gmail.com
Sat Nov 10 14:39:58 CST 2018


Signed-off-by: Sven Baars <sven.wine at gmail.com>
---
 dlls/mfplat/main.c         | 361 +++++++++++++++++++++++++++++++++++++
 dlls/mfplat/mfplat.spec    |   2 +-
 dlls/mfplat/tests/mfplat.c |  58 ++++++
 include/mfapi.h            |   2 +
 include/mfobjects.idl      | 103 +++++++++++
 5 files changed, 525 insertions(+), 1 deletion(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 33080d0b27..46a697538c 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -1837,6 +1837,367 @@ HRESULT WINAPI MFCreateMediaType(IMFMediaType **type)
     return S_OK;
 }
 
+typedef struct _mfmediaevent
+{
+    mfattributes attributes;
+    IMFMediaEvent IMFMediaEvent_iface;
+
+    MediaEventType type;
+    GUID extended_type;
+    HRESULT status;
+    PROPVARIANT value;
+} mfmediaevent;
+
+static inline mfmediaevent *impl_from_IMFMediaEvent(IMFMediaEvent *iface)
+{
+    return CONTAINING_RECORD(iface, mfmediaevent, IMFMediaEvent_iface);
+}
+
+static HRESULT WINAPI mfmediaevent_QueryInterface(IMFMediaEvent *iface, REFIID riid, void **out)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out);
+
+    if(IsEqualGUID(riid, &IID_IUnknown) ||
+       IsEqualGUID(riid, &IID_IMFAttributes) ||
+       IsEqualGUID(riid, &IID_IMFMediaEvent))
+    {
+        *out = &This->IMFMediaEvent_iface;
+    }
+    else
+    {
+        FIXME("(%s, %p)\n", debugstr_guid(riid), out);
+        *out = NULL;
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown*)*out);
+    return S_OK;
+}
+
+static ULONG WINAPI mfmediaevent_AddRef(IMFMediaEvent *iface)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    ULONG ref = InterlockedIncrement(&This->attributes.ref);
+
+    TRACE("(%p) ref=%u\n", This, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI mfmediaevent_Release(IMFMediaEvent *iface)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    ULONG ref = InterlockedDecrement(&This->attributes.ref);
+
+    TRACE("(%p) ref=%u\n", This, ref);
+
+    if (!ref)
+    {
+        HeapFree(GetProcessHeap(), 0, This);
+    }
+
+    return ref;
+}
+
+static HRESULT WINAPI mfmediaevent_GetItem(IMFMediaEvent *iface, REFGUID key, PROPVARIANT *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetItem(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_GetItemType(IMFMediaEvent *iface, REFGUID key, MF_ATTRIBUTE_TYPE *type)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetItemType(&This->attributes.IMFAttributes_iface, key, type);
+}
+
+static HRESULT WINAPI mfmediaevent_CompareItem(IMFMediaEvent *iface, REFGUID key, REFPROPVARIANT value, BOOL *result)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_CompareItem(&This->attributes.IMFAttributes_iface, key, value, result);
+}
+
+static HRESULT WINAPI mfmediaevent_Compare(IMFMediaEvent *iface, IMFAttributes *attrs, MF_ATTRIBUTES_MATCH_TYPE type,
+                BOOL *result)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_Compare(&This->attributes.IMFAttributes_iface, attrs, type, result);
+}
+
+static HRESULT WINAPI mfmediaevent_GetUINT32(IMFMediaEvent *iface, REFGUID key, UINT32 *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetUINT32(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_GetUINT64(IMFMediaEvent *iface, REFGUID key, UINT64 *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetUINT64(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_GetDouble(IMFMediaEvent *iface, REFGUID key, double *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetDouble(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_GetGUID(IMFMediaEvent *iface, REFGUID key, GUID *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetGUID(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_GetStringLength(IMFMediaEvent *iface, REFGUID key, UINT32 *length)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetStringLength(&This->attributes.IMFAttributes_iface, key, length);
+}
+
+static HRESULT WINAPI mfmediaevent_GetString(IMFMediaEvent *iface, REFGUID key, WCHAR *value,
+                UINT32 size, UINT32 *length)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetString(&This->attributes.IMFAttributes_iface, key, value, size, length);
+}
+
+static HRESULT WINAPI mfmediaevent_GetAllocatedString(IMFMediaEvent *iface, REFGUID key,
+                WCHAR **value, UINT32 *length)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetAllocatedString(&This->attributes.IMFAttributes_iface, key, value, length);
+}
+
+static HRESULT WINAPI mfmediaevent_GetBlobSize(IMFMediaEvent *iface, REFGUID key, UINT32 *size)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetBlobSize(&This->attributes.IMFAttributes_iface, key, size);
+}
+
+static HRESULT WINAPI mfmediaevent_GetBlob(IMFMediaEvent *iface, REFGUID key, UINT8 *buf,
+                UINT32 bufsize, UINT32 *blobsize)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetBlob(&This->attributes.IMFAttributes_iface, key, buf, bufsize, blobsize);
+}
+
+static HRESULT WINAPI mfmediaevent_GetAllocatedBlob(IMFMediaEvent *iface, REFGUID key, UINT8 **buf, UINT32 *size)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetAllocatedBlob(&This->attributes.IMFAttributes_iface, key, buf, size);
+}
+
+static HRESULT WINAPI mfmediaevent_GetUnknown(IMFMediaEvent *iface, REFGUID key, REFIID riid, void **ppv)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetUnknown(&This->attributes.IMFAttributes_iface, key, riid, ppv);
+}
+
+static HRESULT WINAPI mfmediaevent_SetItem(IMFMediaEvent *iface, REFGUID key, REFPROPVARIANT value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetItem(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_DeleteItem(IMFMediaEvent *iface, REFGUID key)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_DeleteItem(&This->attributes.IMFAttributes_iface, key);
+}
+
+static HRESULT WINAPI mfmediaevent_DeleteAllItems(IMFMediaEvent *iface)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_DeleteAllItems(&This->attributes.IMFAttributes_iface);
+}
+
+static HRESULT WINAPI mfmediaevent_SetUINT32(IMFMediaEvent *iface, REFGUID key, UINT32 value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetUINT32(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_SetUINT64(IMFMediaEvent *iface, REFGUID key, UINT64 value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetUINT64(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_SetDouble(IMFMediaEvent *iface, REFGUID key, double value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetDouble(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_SetGUID(IMFMediaEvent *iface, REFGUID key, REFGUID value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetGUID(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_SetString(IMFMediaEvent *iface, REFGUID key, const WCHAR *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetString(&This->attributes.IMFAttributes_iface, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_SetBlob(IMFMediaEvent *iface, REFGUID key, const UINT8 *buf, UINT32 size)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetBlob(&This->attributes.IMFAttributes_iface, key, buf, size);
+}
+
+static HRESULT WINAPI mfmediaevent_SetUnknown(IMFMediaEvent *iface, REFGUID key, IUnknown *unknown)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_SetUnknown(&This->attributes.IMFAttributes_iface, key, unknown);
+}
+
+static HRESULT WINAPI mfmediaevent_LockStore(IMFMediaEvent *iface)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_LockStore(&This->attributes.IMFAttributes_iface);
+}
+
+static HRESULT WINAPI mfmediaevent_UnlockStore(IMFMediaEvent *iface)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_UnlockStore(&This->attributes.IMFAttributes_iface);
+}
+
+static HRESULT WINAPI mfmediaevent_GetCount(IMFMediaEvent *iface, UINT32 *items)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetCount(&This->attributes.IMFAttributes_iface, items);
+}
+
+static HRESULT WINAPI mfmediaevent_GetItemByIndex(IMFMediaEvent *iface, UINT32 index, GUID *key, PROPVARIANT *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+    return IMFAttributes_GetItemByIndex(&This->attributes.IMFAttributes_iface, index, key, value);
+}
+
+static HRESULT WINAPI mfmediaevent_CopyAllItems(IMFMediaEvent *iface, IMFAttributes *dest)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    FIXME("%p, %p\n", This, dest);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mfmediaevent_GetType(IMFMediaEvent *iface, MediaEventType *type)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    TRACE("%p, %p\n", This, type);
+
+    *type = This->type;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI mfmediaevent_GetExtendedType(IMFMediaEvent *iface, GUID *extended_type)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    TRACE("%p, %p\n", This, extended_type);
+
+    *extended_type = This->extended_type;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI mfmediaevent_GetStatus(IMFMediaEvent *iface, HRESULT *status)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    TRACE("%p, %p\n", This, status);
+
+    *status = This->status;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI mfmediaevent_GetValue(IMFMediaEvent *iface, PROPVARIANT *value)
+{
+    mfmediaevent *This = impl_from_IMFMediaEvent(iface);
+
+    PropVariantCopy(value, &This->value);
+
+    return S_OK;
+}
+
+static const IMFMediaEventVtbl mfmediaevent_vtbl =
+{
+    mfmediaevent_QueryInterface,
+    mfmediaevent_AddRef,
+    mfmediaevent_Release,
+    mfmediaevent_GetItem,
+    mfmediaevent_GetItemType,
+    mfmediaevent_CompareItem,
+    mfmediaevent_Compare,
+    mfmediaevent_GetUINT32,
+    mfmediaevent_GetUINT64,
+    mfmediaevent_GetDouble,
+    mfmediaevent_GetGUID,
+    mfmediaevent_GetStringLength,
+    mfmediaevent_GetString,
+    mfmediaevent_GetAllocatedString,
+    mfmediaevent_GetBlobSize,
+    mfmediaevent_GetBlob,
+    mfmediaevent_GetAllocatedBlob,
+    mfmediaevent_GetUnknown,
+    mfmediaevent_SetItem,
+    mfmediaevent_DeleteItem,
+    mfmediaevent_DeleteAllItems,
+    mfmediaevent_SetUINT32,
+    mfmediaevent_SetUINT64,
+    mfmediaevent_SetDouble,
+    mfmediaevent_SetGUID,
+    mfmediaevent_SetString,
+    mfmediaevent_SetBlob,
+    mfmediaevent_SetUnknown,
+    mfmediaevent_LockStore,
+    mfmediaevent_UnlockStore,
+    mfmediaevent_GetCount,
+    mfmediaevent_GetItemByIndex,
+    mfmediaevent_CopyAllItems,
+    mfmediaevent_GetType,
+    mfmediaevent_GetExtendedType,
+    mfmediaevent_GetStatus,
+    mfmediaevent_GetValue,
+};
+
+HRESULT WINAPI MFCreateMediaEvent(MediaEventType type, REFGUID extended_type, HRESULT status,
+                                  const PROPVARIANT *value, IMFMediaEvent **event)
+{
+    mfmediaevent *object;
+
+    TRACE("%#x, %s, %08x, %p, %p\n", type, debugstr_guid(extended_type), status, value, event);
+
+    object = HeapAlloc( GetProcessHeap(), 0, sizeof(*object) );
+    if(!object)
+        return E_OUTOFMEMORY;
+
+    init_attribute_object(&object->attributes, 0);
+    object->IMFMediaEvent_iface.lpVtbl = &mfmediaevent_vtbl;
+
+    object->type = type;
+    object->extended_type = *extended_type;
+    object->status = status;
+
+    PropVariantInit(&object->value);
+    if (value)
+        PropVariantCopy(&object->value, value);
+
+    *event = &object->IMFMediaEvent_iface;
+
+    return S_OK;
+}
+
 typedef struct _mfeventqueue
 {
     IMFMediaEventQueue IMFMediaEventQueue_iface;
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index 4533eeb71c..c828aeab8f 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -48,7 +48,7 @@
 @ stdcall MFCreateMFByteStreamOnStream(ptr ptr)
 @ stub MFCreateMFVideoFormatFromMFMediaType
 @ stub MFCreateMediaBufferWrapper
-@ stub MFCreateMediaEvent
+@ stdcall MFCreateMediaEvent(long ptr long ptr ptr)
 @ stdcall MFCreateMediaType(ptr)
 @ stub MFCreateMediaTypeFromRepresentation
 @ stdcall MFCreateMemoryBuffer(long ptr)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 61cfbbfe89..b83cb05c1d 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -40,6 +40,7 @@ static HRESULT (WINAPI *pMFCreateSourceResolver)(IMFSourceResolver **resolver);
 static HRESULT (WINAPI *pMFCreateMFByteStreamOnStream)(IStream *stream, IMFByteStream **bytestream);
 static HRESULT (WINAPI *pMFCreateMemoryBuffer)(DWORD max_length, IMFMediaBuffer **buffer);
 
+DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 
 DEFINE_GUID(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 0xa634a91c, 0x822b, 0x41b9, 0xa4, 0x94, 0x4d, 0xe4, 0x64, 0x36, 0x12, 0xb0);
 
@@ -261,6 +262,62 @@ if(0)
     MFShutdown();
 }
 
+static void test_MFCreateMediaEvent(void)
+{
+    HRESULT hr;
+    IMFMediaEvent *mediaevent;
+
+    MediaEventType type;
+    GUID extended_type;
+    HRESULT status;
+    PROPVARIANT value;
+
+    PropVariantInit(&value);
+    value.vt = VT_UNKNOWN;
+
+    hr = MFCreateMediaEvent(MEError, &GUID_NULL, E_FAIL, &value, &mediaevent);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    PropVariantClear(&value);
+
+    IMFMediaEvent_GetType(mediaevent, &type);
+    ok(type == MEError, "got %#x\n", type);
+
+    IMFMediaEvent_GetExtendedType(mediaevent, &extended_type);
+    ok(IsEqualGUID(&extended_type, &GUID_NULL), "got %s\n",
+       wine_dbgstr_guid(&extended_type));
+
+    IMFMediaEvent_GetStatus(mediaevent, &status);
+    ok(status == E_FAIL, "got 0x%08x\n", status);
+
+    PropVariantInit(&value);
+    IMFMediaEvent_GetValue(mediaevent, &value);
+    ok(value.vt == VT_UNKNOWN, "got %#x\n", value.vt);
+    PropVariantClear(&value);
+
+    IMFMediaEvent_Release(mediaevent);
+
+    hr = MFCreateMediaEvent(MEUnknown, &DUMMY_GUID1, S_OK, NULL, &mediaevent);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    IMFMediaEvent_GetType(mediaevent, &type);
+    ok(type == MEUnknown, "got %#x\n", type);
+
+    IMFMediaEvent_GetExtendedType(mediaevent, &extended_type);
+    ok(IsEqualGUID(&extended_type, &DUMMY_GUID1), "got %s\n",
+       wine_dbgstr_guid(&extended_type));
+
+    IMFMediaEvent_GetStatus(mediaevent, &status);
+    ok(status == S_OK, "got 0x%08x\n", status);
+
+    PropVariantInit(&value);
+    IMFMediaEvent_GetValue(mediaevent, &value);
+    ok(value.vt == VT_EMPTY, "got %#x\n", value.vt);
+    PropVariantClear(&value);
+
+    IMFMediaEvent_Release(mediaevent);
+}
+
 static void test_MFCreateAttributes(void)
 {
     IMFAttributes *attributes;
@@ -556,6 +613,7 @@ START_TEST(mfplat)
     test_register();
     test_source_resolver();
     test_MFCreateMediaType();
+    test_MFCreateMediaEvent();
     test_MFCreateAttributes();
     test_MFSample();
     test_MFCreateFile();
diff --git a/include/mfapi.h b/include/mfapi.h
index 0230a08471..4697f50c44 100644
--- a/include/mfapi.h
+++ b/include/mfapi.h
@@ -69,6 +69,8 @@ HRESULT WINAPI MFCreateAttributes(IMFAttributes **attributes, UINT32 size);
 HRESULT WINAPI MFCreateEventQueue(IMFMediaEventQueue **queue);
 HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE openmode, MF_FILE_FLAGS flags,
                             LPCWSTR url, IMFByteStream **bytestream);
+HRESULT WINAPI MFCreateMediaEvent(MediaEventType type, REFGUID extended_type, HRESULT status,
+                                  const PROPVARIANT *value, IMFMediaEvent **event);
 HRESULT WINAPI MFCreateMediaType(IMFMediaType **type);
 HRESULT WINAPI MFCreateSample(IMFSample **sample);
 HRESULT WINAPI MFCreateMemoryBuffer(DWORD max_length, IMFMediaBuffer **buffer);
diff --git a/include/mfobjects.idl b/include/mfobjects.idl
index 67055d3423..5ea26b2c67 100644
--- a/include/mfobjects.idl
+++ b/include/mfobjects.idl
@@ -435,6 +435,109 @@ cpp_quote("#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION  0x00000007")
 cpp_quote("#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK   0xffff0000")
 cpp_quote("#define MFASYNC_CALLBACK_QUEUE_ALL            0xffffffff")
 
+enum {
+    MEUnknown = 0,
+    MEError = 1,
+    MEExtendedType = 2,
+    MENonFatalError = 3,
+    MEGenericV1Anchor = MENonFatalError,
+    MESessionUnknown = 100,
+    MESessionTopologySet = 101,
+    MESessionTopologiesCleared = 102,
+    MESessionStarted = 103,
+    MESessionPaused = 104,
+    MESessionStopped = 105,
+    MESessionClosed = 106,
+    MESessionEnded = 107,
+    MESessionRateChanged = 108,
+    MESessionScrubSampleComplete = 109,
+    MESessionCapabilitiesChanged = 110,
+    MESessionTopologyStatus = 111,
+    MESessionNotifyPresentationTime = 112,
+    MENewPresentation = 113,
+    MELicenseAcquisitionStart = 114,
+    MELicenseAcquisitionCompleted = 115,
+    MEIndividualizationStart = 116,
+    MEIndividualizationCompleted = 117,
+    MEEnablerProgress = 118,
+    MEEnablerCompleted = 119,
+    MEPolicyError = 120,
+    MEPolicyReport = 121,
+    MEBufferingStarted = 122,
+    MEBufferingStopped = 123,
+    MEConnectStart = 124,
+    MEConnectEnd = 125,
+    MEReconnectStart = 126,
+    MEReconnectEnd = 127,
+    MERendererEvent = 128,
+    MESessionStreamSinkFormatChanged = 129,
+    MESessionV1Anchor = MESessionStreamSinkFormatChanged,
+    MESourceUnknown = 200,
+    MESourceStarted = 201,
+    MEStreamStarted = 202,
+    MESourceSeeked = 203,
+    MEStreamSeeked = 204,
+    MENewStream = 205,
+    MEUpdatedStream = 206,
+    MESourceStopped = 207,
+    MEStreamStopped = 208,
+    MESourcePaused = 209,
+    MEStreamPaused = 210,
+    MEEndOfPresentation = 211,
+    MEEndOfStream = 212,
+    MEMediaSample = 213,
+    MEStreamTick = 214,
+    MEStreamThinMode = 215,
+    MEStreamFormatChanged = 216,
+    MESourceRateChanged = 217,
+    MEEndOfPresentationSegment = 218,
+    MESourceCharacteristicsChanged = 219,
+    MESourceRateChangeRequested = 220,
+    MESourceMetadataChanged = 221,
+    MESequencerSourceTopologyUpdated = 222,
+    MESourceV1Anchor = MESequencerSourceTopologyUpdated,
+    MESinkUnknown = 300,
+    MEStreamSinkStarted = 301,
+    MEStreamSinkStopped = 302,
+    MEStreamSinkPaused = 303,
+    MEStreamSinkRateChanged = 304,
+    MEStreamSinkRequestSample = 305,
+    MEStreamSinkMarker = 306,
+    MEStreamSinkPrerolled = 307,
+    MEStreamSinkScrubSampleComplete = 308,
+    MEStreamSinkFormatChanged = 309,
+    MEStreamSinkDeviceChanged = 310,
+    MEQualityNotify = 311,
+    MESinkInvalidated = 312,
+    MEAudioSessionNameChanged = 313,
+    MEAudioSessionVolumeChanged = 314,
+    MEAudioSessionDeviceRemoved = 315,
+    MEAudioSessionServerShutdown = 316,
+    MEAudioSessionGroupingParamChanged = 317,
+    MEAudioSessionIconChanged = 318,
+    MEAudioSessionFormatChanged = 319,
+    MEAudioSessionDisconnected = 320,
+    MEAudioSessionExclusiveModeOverride = 321,
+    MESinkV1Anchor = MEAudioSessionExclusiveModeOverride,
+    METrustUnknown = 400,
+    MEPolicyChanged = 401,
+    MEContentProtectionMessage = 402,
+    MEPolicySet = 403,
+    METrustV1Anchor = MEPolicySet,
+    MEWMDRMLicenseBackupCompleted = 500,
+    MEWMDRMLicenseBackupProgress = 501,
+    MEWMDRMLicenseRestoreCompleted = 502,
+    MEWMDRMLicenseRestoreProgress = 503,
+    MEWMDRMLicenseAcquisitionCompleted = 506,
+    MEWMDRMIndividualizationCompleted = 508,
+    MEWMDRMIndividualizationProgress = 513,
+    MEWMDRMProximityCompleted = 514,
+    MEWMDRMLicenseStoreCleaned = 515,
+    MEWMDRMRevocationDownloadCompleted = 516,
+    MEWMDRMV1Anchor = MEWMDRMRevocationDownloadCompleted,
+    MEReservedMax = 10000
+};
+
 typedef DWORD MediaEventType;
 
 [
-- 
2.17.1




More information about the wine-devel mailing list