Zebediah Figura : strmbase: Simplify IEnumMediaTypesImpl_Next().

Alexandre Julliard julliard at winehq.org
Mon Jul 1 15:15:14 CDT 2019


Module: wine
Branch: master
Commit: cf09b5a80031d8fe67c5e8b1b7561de3e7273db2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=cf09b5a80031d8fe67c5e8b1b7561de3e7273db2

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sat Jun 29 13:43:49 2019 -0500

strmbase: Simplify IEnumMediaTypesImpl_Next().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/strmbase/mediatype.c | 43 +++++++++++++++++--------------------------
 1 file changed, 17 insertions(+), 26 deletions(-)

diff --git a/dlls/strmbase/mediatype.c b/dlls/strmbase/mediatype.c
index 8ad2e22..66b5fa1 100644
--- a/dlls/strmbase/mediatype.c
+++ b/dlls/strmbase/mediatype.c
@@ -172,44 +172,35 @@ static ULONG WINAPI IEnumMediaTypesImpl_Release(IEnumMediaTypes * iface)
     return ref;
 }
 
-static HRESULT WINAPI IEnumMediaTypesImpl_Next(IEnumMediaTypes * iface, ULONG cMediaTypes, AM_MEDIA_TYPE ** ppMediaTypes, ULONG * pcFetched)
+static HRESULT WINAPI IEnumMediaTypesImpl_Next(IEnumMediaTypes *iface,
+        ULONG count, AM_MEDIA_TYPE **mts, ULONG *ret_count)
 {
-    ULONG cFetched;
-    IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
-
-    TRACE("(%p)->(%u, %p, %p)\n", iface, cMediaTypes, ppMediaTypes, pcFetched);
+    IEnumMediaTypesImpl *enummt = impl_from_IEnumMediaTypes(iface);
+    ULONG i;
 
-    cFetched = min(This->count, This->uIndex + cMediaTypes) - This->uIndex;
+    TRACE("iface %p, count %u, mts %p, ret_count %p.\n", iface, count, mts, ret_count);
 
-    if (This->currentVersion != This->mediaVersionFunction(This->basePin))
+    if (enummt->currentVersion != enummt->mediaVersionFunction(enummt->basePin))
         return VFW_E_ENUM_OUT_OF_SYNC;
 
-    TRACE("Next uIndex: %u, cFetched: %u\n", This->uIndex, cFetched);
-
-    if (cFetched > 0)
+    for (i = 0; i < count && enummt->uIndex + i < enummt->count; i++)
     {
-        ULONG i;
-        for (i = 0; i < cFetched; i++)
+        if (!(mts[i] = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)))
+                || FAILED(enummt->enumMediaFunction(enummt->basePin, enummt->uIndex + i, mts[i])))
         {
-            if (!(ppMediaTypes[i] = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)))
-                    || FAILED(This->enumMediaFunction(This->basePin, This->uIndex + i, ppMediaTypes[i])))
-            {
-                while (i--)
-                    DeleteMediaType(ppMediaTypes[i]);
-                *pcFetched = 0;
-                return E_OUTOFMEMORY;
-            }
+            while (i--)
+                DeleteMediaType(mts[i]);
+            *ret_count = 0;
+            return E_OUTOFMEMORY;
         }
     }
 
-    if ((cMediaTypes != 1) || pcFetched)
-        *pcFetched = cFetched;
+    if ((count != 1) || ret_count)
+        *ret_count = i;
 
-    This->uIndex += cFetched;
+    enummt->uIndex += i;
 
-    if (cFetched != cMediaTypes)
-        return S_FALSE;
-    return S_OK;
+    return i == count ? S_OK : S_FALSE;
 }
 
 static HRESULT WINAPI IEnumMediaTypesImpl_Skip(IEnumMediaTypes * iface, ULONG cMediaTypes)




More information about the wine-cvs mailing list