Fixed qcap's inherited enummedia bugs.

diff --git a/dlls/qcap/enummedia.c b/dlls/qcap/enummedia.c
index 87d4e96..579f2a1 100644
--- a/dlls/qcap/enummedia.c
+++ b/dlls/qcap/enummedia.c
@@ -38,13 +38,14 @@
 HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc)
 {
     memcpy(pDest, pSrc, sizeof(AM_MEDIA_TYPE));
+    if (!pSrc->pbFormat) return S_OK;
     if (!(pDest->pbFormat = CoTaskMemAlloc(pSrc->cbFormat)))
         return E_OUTOFMEMORY;
     memcpy(pDest->pbFormat, pSrc->pbFormat, pSrc->cbFormat);
     return S_OK;
 }
 
-void DeleteMediaType(AM_MEDIA_TYPE * pMediaType)
+void FreeMediaType(AM_MEDIA_TYPE * pMediaType)
 {
     if (pMediaType->pbFormat)
     {
@@ -58,6 +59,12 @@
     }
 }
 
+void DeleteMediaType(AM_MEDIA_TYPE * pMediaType)
+{
+   FreeMediaType(pMediaType);
+   CoTaskMemFree(pMediaType);
+}
+
 BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2,
                        BOOL bWildcards)
 {
@@ -110,7 +117,11 @@
     pEnumMediaTypes->enumMediaDetails.pMediaTypes =
                       CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * pDetails->cMediaTypes);
     for (i = 0; i < pDetails->cMediaTypes; i++)
-        pEnumMediaTypes->enumMediaDetails.pMediaTypes[i] = pDetails->pMediaTypes[i];
+        if (FAILED(CopyMediaType(&pEnumMediaTypes->enumMediaDetails.pMediaTypes[i], &pDetails->pMediaTypes[i]))) {
+           while (i--) CoTaskMemFree(pEnumMediaTypes->enumMediaDetails.pMediaTypes[i].pbFormat);
+           CoTaskMemFree(pEnumMediaTypes->enumMediaDetails.pMediaTypes);
+           return E_OUTOFMEMORY;
+        }
     *ppEnum = (IEnumMediaTypes *)(&pEnumMediaTypes->lpVtbl);
     return S_OK;
 }
@@ -158,13 +169,15 @@
 
     if (!refCount)
     {
+        int i;
+        for (i = 0; i < This->enumMediaDetails.cMediaTypes; i++)
+           if (This->enumMediaDetails.pMediaTypes[i].pbFormat)
+              CoTaskMemFree(This->enumMediaDetails.pMediaTypes[i].pbFormat);
         CoTaskMemFree(This->enumMediaDetails.pMediaTypes);
         CoTaskMemFree(This);
         ObjectRefCount(FALSE);
-        return 0;
     }
-    else
-        return refCount;
+    return refCount;
 }
 
 static HRESULT WINAPI IEnumMediaTypesImpl_Next(IEnumMediaTypes * iface,
@@ -186,7 +199,13 @@
         ULONG i;
         *ppMediaTypes = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * cFetched);
         for (i = 0; i < cFetched; i++)
-            (*ppMediaTypes)[i] = This->enumMediaDetails.pMediaTypes[This->uIndex + i];
+            if (FAILED(CopyMediaType(&(*ppMediaTypes)[i], &This->enumMediaDetails.pMediaTypes[This->uIndex + i]))) {
+                while (i--)
+                    CoTaskMemFree((*ppMediaTypes)[i].pbFormat);
+                CoTaskMemFree(*ppMediaTypes);
+                *ppMediaTypes = NULL;
+                return E_OUTOFMEMORY;
+            }
     }
 
     if ((cMediaTypes != 1) || pcFetched)