[PATCH 1/4] quartz: COM cleanup for IMediaSample2.

Michael Stefaniuc mstefani at redhat.de
Mon Jul 2 17:15:01 CDT 2012


---
 dlls/quartz/memallocator.c   |   80 +++++++++++++++++++++++-------------------
 dlls/quartz/quartz_private.h |   12 ------
 2 files changed, 44 insertions(+), 48 deletions(-)

diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c
index 4858c02..f74a2fd 100644
--- a/dlls/quartz/memallocator.c
+++ b/dlls/quartz/memallocator.c
@@ -31,6 +31,17 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(quartz);
 
+typedef struct StdMediaSample2
+{
+    IMediaSample2 IMediaSample2_iface;
+    LONG ref;
+    AM_SAMPLE2_PROPERTIES props;
+    IMemAllocator * pParent;
+    struct list listentry;
+    LONGLONG tMediaStart;
+    LONGLONG tMediaEnd;
+} StdMediaSample2;
+
 typedef struct BaseMemAllocator
 {
     IMemAllocator IMemAllocator_iface;
@@ -413,7 +424,7 @@ static HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAll
     if (!(*ppSample = CoTaskMemAlloc(sizeof(StdMediaSample2))))
         return E_OUTOFMEMORY;
 
-    (*ppSample)->lpvtbl = &StdMediaSample2_VTable;
+    (*ppSample)->IMediaSample2_iface.lpVtbl = &StdMediaSample2_VTable;
     (*ppSample)->ref = 0;
     ZeroMemory(&(*ppSample)->props, sizeof((*ppSample)->props));
 
@@ -436,47 +447,45 @@ static void StdMediaSample2_Delete(StdMediaSample2 * This)
     CoTaskMemFree(This);
 }
 
-static HRESULT WINAPI StdMediaSample2_QueryInterface(IMediaSample2 * iface, REFIID riid, LPVOID * ppv)
+static inline StdMediaSample2 *impl_from_IMediaSample2(IMediaSample2 * iface)
+{
+    return CONTAINING_RECORD(iface, StdMediaSample2, IMediaSample2_iface);
+}
+
+static HRESULT WINAPI StdMediaSample2_QueryInterface(IMediaSample2 * iface, REFIID riid, void ** ppv)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
     TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv);
 
     *ppv = NULL;
 
-    if (IsEqualIID(riid, &IID_IUnknown))
-        *ppv = This;
-    else if (IsEqualIID(riid, &IID_IMediaSample))
-        *ppv = This;
-    else if (IsEqualIID(riid, &IID_IMediaSample2))
-        *ppv = This;
-
-    if (*ppv)
+    if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IMediaSample) ||
+            IsEqualIID(riid, &IID_IMediaSample2))
     {
-        IUnknown_AddRef((IUnknown *)(*ppv));
+        *ppv = iface;
+        IMediaSample2_AddRef(iface);
         return S_OK;
     }
 
     FIXME("No interface for %s!\n", qzdebugstr_guid(riid));
-
     return E_NOINTERFACE;
 }
 
 static ULONG WINAPI StdMediaSample2_AddRef(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
     ULONG ref = InterlockedIncrement(&This->ref);
 
-    TRACE("(%p)->() AddRef from %d\n", iface, ref - 1);
+    TRACE("(%p)->(): new ref = %d\n", This, ref);
 
     return ref;
 }
 
 static ULONG WINAPI StdMediaSample2_Release(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
 
-    TRACE("(%p)->() Release from %d\n", iface, ref + 1);
+    TRACE("(%p)->(): new ref = %d\n", This, ref);
 
     if (!ref)
     {
@@ -484,14 +493,13 @@ static ULONG WINAPI StdMediaSample2_Release(IMediaSample2 * iface)
             IMemAllocator_ReleaseBuffer(This->pParent, (IMediaSample *)iface);
         else
             StdMediaSample2_Delete(This);
-        return 0;
     }
     return ref;
 }
 
 static HRESULT WINAPI StdMediaSample2_GetPointer(IMediaSample2 * iface, BYTE ** ppBuffer)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p)\n", iface, ppBuffer);
 
@@ -508,7 +516,7 @@ static HRESULT WINAPI StdMediaSample2_GetPointer(IMediaSample2 * iface, BYTE **
 
 static LONG WINAPI StdMediaSample2_GetSize(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("StdMediaSample2_GetSize()\n");
 
@@ -517,8 +525,8 @@ static LONG WINAPI StdMediaSample2_GetSize(IMediaSample2 * iface)
 
 static HRESULT WINAPI StdMediaSample2_GetTime(IMediaSample2 * iface, REFERENCE_TIME * pStart, REFERENCE_TIME * pEnd)
 {
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
     HRESULT hr;
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
 
     TRACE("(%p)->(%p, %p)\n", iface, pStart, pEnd);
 
@@ -544,7 +552,7 @@ static HRESULT WINAPI StdMediaSample2_GetTime(IMediaSample2 * iface, REFERENCE_T
 
 static HRESULT WINAPI StdMediaSample2_SetTime(IMediaSample2 * iface, REFERENCE_TIME * pStart, REFERENCE_TIME * pEnd)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p, %p)\n", iface, pStart, pEnd);
 
@@ -569,7 +577,7 @@ static HRESULT WINAPI StdMediaSample2_SetTime(IMediaSample2 * iface, REFERENCE_T
 
 static HRESULT WINAPI StdMediaSample2_IsSyncPoint(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -578,7 +586,7 @@ static HRESULT WINAPI StdMediaSample2_IsSyncPoint(IMediaSample2 * iface)
 
 static HRESULT WINAPI StdMediaSample2_SetSyncPoint(IMediaSample2 * iface, BOOL bIsSyncPoint)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%s)\n", iface, bIsSyncPoint ? "TRUE" : "FALSE");
 
@@ -592,7 +600,7 @@ static HRESULT WINAPI StdMediaSample2_SetSyncPoint(IMediaSample2 * iface, BOOL b
 
 static HRESULT WINAPI StdMediaSample2_IsPreroll(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -601,7 +609,7 @@ static HRESULT WINAPI StdMediaSample2_IsPreroll(IMediaSample2 * iface)
 
 static HRESULT WINAPI StdMediaSample2_SetPreroll(IMediaSample2 * iface, BOOL bIsPreroll)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%s)\n", iface, bIsPreroll ? "TRUE" : "FALSE");
 
@@ -615,7 +623,7 @@ static HRESULT WINAPI StdMediaSample2_SetPreroll(IMediaSample2 * iface, BOOL bIs
 
 static LONG WINAPI StdMediaSample2_GetActualDataLength(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -624,7 +632,7 @@ static LONG WINAPI StdMediaSample2_GetActualDataLength(IMediaSample2 * iface)
 
 static HRESULT WINAPI StdMediaSample2_SetActualDataLength(IMediaSample2 * iface, LONG len)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%d)\n", iface, len);
 
@@ -642,7 +650,7 @@ static HRESULT WINAPI StdMediaSample2_SetActualDataLength(IMediaSample2 * iface,
 
 static HRESULT WINAPI StdMediaSample2_GetMediaType(IMediaSample2 * iface, AM_MEDIA_TYPE ** ppMediaType)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p)\n", iface, ppMediaType);
 
@@ -661,7 +669,7 @@ static HRESULT WINAPI StdMediaSample2_GetMediaType(IMediaSample2 * iface, AM_MED
 
 static HRESULT WINAPI StdMediaSample2_SetMediaType(IMediaSample2 * iface, AM_MEDIA_TYPE * pMediaType)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p)\n", iface, pMediaType);
 
@@ -680,7 +688,7 @@ static HRESULT WINAPI StdMediaSample2_SetMediaType(IMediaSample2 * iface, AM_MED
 
 static HRESULT WINAPI StdMediaSample2_IsDiscontinuity(IMediaSample2 * iface)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->()\n", iface);
 
@@ -689,7 +697,7 @@ static HRESULT WINAPI StdMediaSample2_IsDiscontinuity(IMediaSample2 * iface)
 
 static HRESULT WINAPI StdMediaSample2_SetDiscontinuity(IMediaSample2 * iface, BOOL bIsDiscontinuity)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%s)\n", iface, bIsDiscontinuity ? "TRUE" : "FALSE");
 
@@ -703,7 +711,7 @@ static HRESULT WINAPI StdMediaSample2_SetDiscontinuity(IMediaSample2 * iface, BO
 
 static HRESULT WINAPI StdMediaSample2_GetMediaTime(IMediaSample2 * iface, LONGLONG * pStart, LONGLONG * pEnd)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p, %p)\n", iface, pStart, pEnd);
 
@@ -718,7 +726,7 @@ static HRESULT WINAPI StdMediaSample2_GetMediaTime(IMediaSample2 * iface, LONGLO
 
 static HRESULT WINAPI StdMediaSample2_SetMediaTime(IMediaSample2 * iface, LONGLONG * pStart, LONGLONG * pEnd)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%p, %p)\n", iface, pStart, pEnd);
 
@@ -737,7 +745,7 @@ static HRESULT WINAPI StdMediaSample2_SetMediaTime(IMediaSample2 * iface, LONGLO
 
 static HRESULT WINAPI StdMediaSample2_GetProperties(IMediaSample2 * iface, DWORD cbProperties, BYTE * pbProperties)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%d, %p)\n", iface, cbProperties, pbProperties);
 
@@ -748,7 +756,7 @@ static HRESULT WINAPI StdMediaSample2_GetProperties(IMediaSample2 * iface, DWORD
 
 static HRESULT WINAPI StdMediaSample2_SetProperties(IMediaSample2 * iface, DWORD cbProperties, const BYTE * pbProperties)
 {
-    StdMediaSample2 *This = (StdMediaSample2 *)iface;
+    StdMediaSample2 *This = impl_from_IMediaSample2(iface);
 
     TRACE("(%p)->(%d, %p)\n", iface, cbProperties, pbProperties);
 
diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h
index 43e679d..7498ea9 100644
--- a/dlls/quartz/quartz_private.h
+++ b/dlls/quartz/quartz_private.h
@@ -67,16 +67,4 @@ extern void video_unregister_windowclass(void) DECLSPEC_HIDDEN;
 BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards);
 void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt) DECLSPEC_HIDDEN;
 
-typedef struct StdMediaSample2
-{
-    const IMediaSample2Vtbl * lpvtbl;
-
-    LONG ref;
-    AM_SAMPLE2_PROPERTIES props;
-    IMemAllocator * pParent;
-    struct list listentry;
-    LONGLONG tMediaStart;
-    LONGLONG tMediaEnd;
-} StdMediaSample2;
-
 #endif /* __QUARTZ_PRIVATE_INCLUDED__ */
-- 
1.7.6.5



More information about the wine-patches mailing list