Bruno Jesus : avifil32: Implement AVISave[A|W] by forwarding to AVISaveV.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Oct 26 09:58:34 CDT 2015


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

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Fri Oct 23 04:12:53 2015 +0800

avifil32: Implement AVISave[A|W] by forwarding to AVISaveV.

Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/avifil32/api.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 72 insertions(+), 4 deletions(-)

diff --git a/dlls/avifil32/api.c b/dlls/avifil32/api.c
index 20985cd..4612611 100644
--- a/dlls/avifil32/api.c
+++ b/dlls/avifil32/api.c
@@ -2278,17 +2278,85 @@ HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile)
 HRESULT WINAPIV AVISaveA(LPCSTR szFile, CLSID * pclsidHandler, AVISAVECALLBACK lpfnCallback,
                         int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...)
 {
-    FIXME("(%s,%p,%p,0x%08x,%p,%p), stub!\n", debugstr_a(szFile), pclsidHandler, lpfnCallback,
+    va_list vl;
+    int i;
+    HRESULT ret;
+    PAVISTREAM *streams;
+    LPAVICOMPRESSOPTIONS *options;
+
+    TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_a(szFile), pclsidHandler, lpfnCallback,
           nStreams, pavi, lpOptions);
 
-    return AVIERR_UNSUPPORTED;
+    if (nStreams <= 0) return AVIERR_BADPARAM;
+
+    streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *));
+    options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *));
+    if (!streams || !options)
+    {
+        ret = AVIERR_MEMORY;
+        goto error;
+    }
+
+    streams[0] = pavi;
+    options[0] = lpOptions;
+
+    va_start(vl, lpOptions);
+    for (i = 1; i < nStreams; i++)
+    {
+        streams[i] = va_arg(vl, void *);
+        options[i] = va_arg(vl, void *);
+    }
+    va_end(vl);
+
+    for (i = 0; i < nStreams; i++)
+        TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]);
+
+    ret = AVISaveVA(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options);
+error:
+    HeapFree(GetProcessHeap(), 0, streams);
+    HeapFree(GetProcessHeap(), 0, options);
+    return ret;
 }
 
 HRESULT WINAPIV AVISaveW(LPCWSTR szFile, CLSID * pclsidHandler, AVISAVECALLBACK lpfnCallback,
                         int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...)
 {
-    FIXME("(%s,%p,%p,0x%08x,%p,%p), stub!\n", debugstr_w(szFile), pclsidHandler, lpfnCallback,
+    va_list vl;
+    int i;
+    HRESULT ret;
+    PAVISTREAM *streams;
+    LPAVICOMPRESSOPTIONS *options;
+
+    TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_w(szFile), pclsidHandler, lpfnCallback,
           nStreams, pavi, lpOptions);
 
-    return AVIERR_UNSUPPORTED;
+    if (nStreams <= 0) return AVIERR_BADPARAM;
+
+    streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *));
+    options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *));
+    if (!streams || !options)
+    {
+        ret = AVIERR_MEMORY;
+        goto error;
+    }
+
+    streams[0] = pavi;
+    options[0] = lpOptions;
+
+    va_start(vl, lpOptions);
+    for (i = 1; i < nStreams; i++)
+    {
+        streams[i] = va_arg(vl, void *);
+        options[i] = va_arg(vl, void *);
+    }
+    va_end(vl);
+
+    for (i = 0; i < nStreams; i++)
+        TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]);
+
+    ret = AVISaveVW(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options);
+error:
+    HeapFree(GetProcessHeap(), 0, streams);
+    HeapFree(GetProcessHeap(), 0, options);
+    return ret;
 }




More information about the wine-cvs mailing list