https://git.reactos.org/?p=reactos.git;a=commitdiff;h=01707e98b592fb3ca9964ed4f2fcc1161ecfe4c8

commit 01707e98b592fb3ca9964ed4f2fcc1161ecfe4c8
Author:     Amine Khaldi <[email protected]>
AuthorDate: Sun May 27 04:02:26 2018 +0100
Commit:     Amine Khaldi <[email protected]>
CommitDate: Sun May 27 04:02:26 2018 +0100

    [AVIFIL32] Sync with Wine Staging 3.9. CORE-14656
---
 dll/win32/avifil32/api.c             | 12 +++---
 dll/win32/avifil32/avifil32.idl      | 83 +++++++++++++++++++++++++++++++++---
 dll/win32/avifil32/avifil32_idl.rgs  | 20 ++++++---
 dll/win32/avifil32/avifile.c         |  8 ++--
 dll/win32/avifil32/avifile_private.h |  2 +
 dll/win32/avifil32/wavfile.c         |  4 +-
 media/doc/README.WINE                |  2 +-
 7 files changed, 108 insertions(+), 23 deletions(-)

diff --git a/dll/win32/avifil32/api.c b/dll/win32/avifil32/api.c
index 5c15c1fe83..63a3530591 100644
--- a/dll/win32/avifil32/api.c
+++ b/dll/win32/avifil32/api.c
@@ -156,7 +156,7 @@ static BOOL AVIFILE_GetFileHandlerByExtension(LPCWSTR 
szFile, LPCLSID lpclsid)
   CHAR   szRegKey[25];
   CHAR   szValue[100];
   LPWSTR szExt = strrchrW(szFile, '.');
-  LONG   len = sizeof(szValue) / sizeof(szValue[0]);
+  LONG   len = ARRAY_SIZE(szValue);
 
   if (szExt == NULL)
     return FALSE;
@@ -371,7 +371,7 @@ HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile, 
PAVISTREAM *ppavi,
   /* Only the szName at the end is different */
   memcpy(&psiw, psi, sizeof(*psi) - sizeof(psi->szName));
   MultiByteToWideChar(CP_ACP, 0, psi->szName, -1, psiw.szName,
-                     sizeof(psiw.szName) / sizeof(psiw.szName[0]));
+                     ARRAY_SIZE(psiw.szName));
 
   return IAVIFile_CreateStream(pfile, ppavi, &psiw);
 }
@@ -1035,7 +1035,7 @@ HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG 
cbFilter, BOOL fSaving)
     HeapFree(GetProcessHeap(), 0, lp);
     return AVIERR_ERROR;
   }
-  for (n = 0;RegEnumKeyW(hKey, n, szFileExt, 
sizeof(szFileExt)/sizeof(szFileExt[0])) == ERROR_SUCCESS;n++) {
+  for (n = 0;RegEnumKeyW(hKey, n, szFileExt, ARRAY_SIZE(szFileExt)) == 
ERROR_SUCCESS;n++) {
     WCHAR clsidW[40];
 
     /* get CLSID to extension */
@@ -1300,7 +1300,7 @@ static void AVISaveOptionsUpdate(HWND hWnd)
          } else {
            LoadStringW(AVIFILE_hModule, IDS_UNCOMPRESSED,
                        icinfo.szDescription,
-                       
sizeof(icinfo.szDescription)/sizeof(icinfo.szDescription[0]));
+                       ARRAY_SIZE(icinfo.szDescription));
            lstrcatW(szFormat, icinfo.szDescription);
          }
        } else if (sInfo.fccType == streamtypeAUDIO) {
@@ -2160,7 +2160,7 @@ HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, 
LPCSTR szName)
     return hres;
 
   memset(asia.szName, 0, sizeof(asia.szName));
-  lstrcpynA(asia.szName, szName, sizeof(asia.szName)/sizeof(asia.szName[0]));
+  lstrcpynA(asia.szName, szName, ARRAY_SIZE(asia.szName));
 
   return EditStreamSetInfoA(pstream, &asia, sizeof(asia));
 }
@@ -2185,7 +2185,7 @@ HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, 
LPCWSTR szName)
     return hres;
 
   memset(asiw.szName, 0, sizeof(asiw.szName));
-  lstrcpynW(asiw.szName, szName, sizeof(asiw.szName)/sizeof(asiw.szName[0]));
+  lstrcpynW(asiw.szName, szName, ARRAY_SIZE(asiw.szName));
 
   return EditStreamSetInfoW(pstream, &asiw, sizeof(asiw));
 }
diff --git a/dll/win32/avifil32/avifil32.idl b/dll/win32/avifil32/avifil32.idl
index e23c176051..1e3f191622 100644
--- a/dll/win32/avifil32/avifil32.idl
+++ b/dll/win32/avifil32/avifil32.idl
@@ -21,14 +21,80 @@
 #pragma makedep proxy
 #pragma makedep register
 
-#include "avifile_ifaces.idl"
+import "wtypes.idl";
+import "unknwn.idl";
+
+typedef struct _AVISTREAMINFOW
+{
+    DWORD fccType;
+    DWORD fccHandler;
+    DWORD dwFlags;
+    DWORD dwCaps;
+    WORD  wPriority;
+    WORD  wLanguage;
+    DWORD dwScale;
+    DWORD dwRate;
+    DWORD dwStart;
+    DWORD dwLength;
+    DWORD dwInitialFrames;
+    DWORD dwSuggestedBufferSize;
+    DWORD dwQuality;
+    DWORD dwSampleSize;
+    RECT  rcFrame;
+    DWORD dwEditCount;
+    DWORD dwFormatChangeCount;
+    WCHAR szName[64];
+} AVISTREAMINFOW;
 
 [
-    helpstring("IAVIStream & IAVIFile Proxy"),
-    threading(both),
-    uuid(0002000d-0000-0000-c000-000000000046)
+    object,
+    uuid(00020021-0000-0000-c000-000000000046)
 ]
-coclass PSFactoryBuffer { interface IFactoryBuffer; }
+interface IAVIStream : IUnknown
+{
+    HRESULT Create(LPARAM lParam1, LPARAM lParam2);
+    HRESULT Info(AVISTREAMINFOW *psi, LONG lSize);
+    LONG FindSample(LONG lPos, LONG lFlags);
+    HRESULT ReadFormat(LONG lPos, [out,size_is(*lpcbFormat)] char *lpFormat, 
[in,out] LONG *lpcbFormat);
+    HRESULT SetFormat(LONG lPos, [in,size_is(cbFormat)] char *lpFormat, LONG 
cbFormat);
+    HRESULT Read(LONG lStart, LONG lSamples, [out,size_is(cbBuffer)] char 
*lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples);
+    HRESULT Write(LONG lStart, LONG lSamples, [in,size_is(cbBuffer)] char 
*lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG 
*plBytesWritten);
+    HRESULT Delete(LONG lStart, LONG lSamples);
+    HRESULT ReadData(DWORD fcc, [out,size_is(*lpcbBuffer)] char *lpBuffer, 
[in,out] LONG *lpcbBuffer);
+    HRESULT WriteData(DWORD fcc, [in,size_is(cbBuffer)] char *lpBuffer, LONG 
cbBuffer);
+    HRESULT SetInfo(AVISTREAMINFOW *plInfo, LONG cbInfo);
+};
+
+typedef struct _AVIFILEINFOW
+{
+    DWORD dwMaxBytesPerSec;
+    DWORD dwFlags;
+    DWORD dwCaps;
+    DWORD dwStreams;
+    DWORD dwSuggestedBufferSize;
+    DWORD dwWidth;
+    DWORD dwHeight;
+    DWORD dwScale;
+    DWORD dwRate;
+    DWORD dwLength;
+    DWORD dwEditCount;
+    WCHAR szFileType[64];
+} AVIFILEINFOW;
+
+[
+    object,
+    uuid(00020020-0000-0000-c000-000000000046)
+]
+interface IAVIFile : IUnknown
+{
+    HRESULT Info(AVIFILEINFOW *pfi, LONG lSize);
+    HRESULT GetStream(IAVIStream **ppStream, DWORD fccType, LONG lParam);
+    HRESULT CreateStream(IAVIStream **ppStream, AVISTREAMINFOW *psi);
+    HRESULT WriteData(DWORD fcc, [in,size_is(cbBuffer)] char *lpBuffer, LONG 
cbBuffer);
+    HRESULT ReadData(DWORD fcc, [out,size_is(*lpcbBuffer)] char *lpBuffer, 
[in,out] LONG *lpcbBuffer);
+    HRESULT EndRecord(void);
+    HRESULT DeleteStream(DWORD fccType, LONG lParam);
+};
 
 [
     helpstring("Microsoft AVI Files"),
@@ -51,6 +117,13 @@ coclass ICMStream { interface IAVIStream; }
 ]
 coclass WAVFile { interface IAVIFile; }
 
+[
+    helpstring("IAVIStream & IAVIFile Proxy"),
+    threading(both),
+    uuid(0002000d-0000-0000-c000-000000000046)
+]
+coclass PSFactoryBuffer { interface IFactoryBuffer; }
+
 [
     helpstring("ACM Compressed Audio Stream"),
     threading(both),
diff --git a/dll/win32/avifil32/avifil32_idl.rgs 
b/dll/win32/avifil32/avifil32_idl.rgs
index 07c0706d28..9faf6f7638 100644
--- a/dll/win32/avifil32/avifil32_idl.rgs
+++ b/dll/win32/avifil32/avifil32_idl.rgs
@@ -2,28 +2,38 @@ HKCR
 {
     NoRemove Interface
     {
+        '{00020021-0000-0000-C000-000000000046}' = s 'IAVIStream'
+        {
+            NumMethods = s 14
+            ProxyStubClsid32 = s '{0002000D-0000-0000-C000-000000000046}'
+        }
+        '{00020020-0000-0000-C000-000000000046}' = s 'IAVIFile'
+        {
+            NumMethods = s 10
+            ProxyStubClsid32 = s '{0002000D-0000-0000-C000-000000000046}'
+        }
     }
     NoRemove CLSID
     {
         '{00020000-0000-0000-C000-000000000046}' = s 'Microsoft AVI Files'
         {
-            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' 
}
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
         }
         '{00020001-0000-0000-C000-000000000046}' = s 'AVI Compressed Stream'
         {
-            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' 
}
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
         }
         '{00020003-0000-0000-C000-000000000046}' = s 'Microsoft Wave File'
         {
-            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' 
}
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
         }
         '{0002000D-0000-0000-C000-000000000046}' = s 'IAVIStream & IAVIFile 
Proxy'
         {
-            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' 
}
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
         }
         '{0002000F-0000-0000-C000-000000000046}' = s 'ACM Compressed Audio 
Stream'
         {
-            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' 
}
+            InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
         }
     }
 }
diff --git a/dll/win32/avifil32/avifile.c b/dll/win32/avifil32/avifile.c
index 7a4caaadb4..33c28b145d 100644
--- a/dll/win32/avifil32/avifile.c
+++ b/dll/win32/avifil32/avifile.c
@@ -1641,7 +1641,7 @@ static HRESULT AVIFILE_LoadFile(IAVIFileImpl *This)
   This->fInfo.dwWidth               = MainAVIHdr.dwWidth;
   This->fInfo.dwHeight              = MainAVIHdr.dwHeight;
   LoadStringW(AVIFILE_hModule, IDS_AVIFILETYPE, This->fInfo.szFileType,
-             sizeof(This->fInfo.szFileType)/sizeof(This->fInfo.szFileType[0]));
+             ARRAY_SIZE(This->fInfo.szFileType));
 
   /* go back to into header list */
   if (mmioAscend(This->hmmio, &ck, 0) != S_OK)
@@ -1751,9 +1751,9 @@ static HRESULT AVIFILE_LoadFile(IAVIFileImpl *This)
 
            /* generate description for stream like "filename.avi Type #n" */
            if (streamHdr.fccType == streamtypeVIDEO)
-             LoadStringW(AVIFILE_hModule, IDS_VIDEO, szType, 
sizeof(szType)/sizeof(szType[0]));
+             LoadStringW(AVIFILE_hModule, IDS_VIDEO, szType, 
ARRAY_SIZE(szType));
            else if (streamHdr.fccType == streamtypeAUDIO)
-             LoadStringW(AVIFILE_hModule, IDS_AUDIO, szType, 
sizeof(szType)/sizeof(szType[0]));
+             LoadStringW(AVIFILE_hModule, IDS_AUDIO, szType, 
ARRAY_SIZE(szType));
            else
              wsprintfW(szType, streamTypeFmt, (char*)&streamHdr.fccType);
 
@@ -1784,7 +1784,7 @@ static HRESULT AVIFILE_LoadFile(IAVIFileImpl *This)
            }
 
            MultiByteToWideChar(CP_ACP, 0, str, -1, pStream->sInfo.szName,
-                               
sizeof(pStream->sInfo.szName)/sizeof(pStream->sInfo.szName[0]));
+                               ARRAY_SIZE(pStream->sInfo.szName));
 
            HeapFree(GetProcessHeap(), 0, str);
          }
diff --git a/dll/win32/avifil32/avifile_private.h 
b/dll/win32/avifil32/avifile_private.h
index 4bf11f42a8..83e87ea989 100644
--- a/dll/win32/avifil32/avifile_private.h
+++ b/dll/win32/avifil32/avifile_private.h
@@ -22,6 +22,8 @@
 #include <windef.h>
 #include <winuser.h>
 
+#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
+
 #ifndef MAX_AVISTREAMS
 #define MAX_AVISTREAMS 8
 #endif
diff --git a/dll/win32/avifil32/wavfile.c b/dll/win32/avifil32/wavfile.c
index d2d203b4b9..6294ecdc39 100644
--- a/dll/win32/avifil32/wavfile.c
+++ b/dll/win32/avifil32/wavfile.c
@@ -522,9 +522,9 @@ static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile 
*iface, LPCOLESTR pszFile
   memset(& This->sInfo, 0, sizeof(This->sInfo));
 
   LoadStringW(AVIFILE_hModule, IDS_WAVEFILETYPE, This->fInfo.szFileType,
-             sizeof(This->fInfo.szFileType)/sizeof(This->fInfo.szFileType[0]));
+             ARRAY_SIZE(This->fInfo.szFileType));
   if (LoadStringW(AVIFILE_hModule, IDS_WAVESTREAMFORMAT,
-                 wszStreamFmt, sizeof(wszStreamFmt)/sizeof(wszStreamFmt[0])) > 
0) {
+                 wszStreamFmt, ARRAY_SIZE(wszStreamFmt)) > 0) {
     wsprintfW(This->sInfo.szName, wszStreamFmt,
              AVIFILE_BasenameW(This->szFileName));
   }
diff --git a/media/doc/README.WINE b/media/doc/README.WINE
index 5da4269676..65532ccdb5 100644
--- a/media/doc/README.WINE
+++ b/media/doc/README.WINE
@@ -48,7 +48,7 @@ reactos/dll/win32/advpack             # Synced to 
WineStaging-3.3
 reactos/dll/win32/atl                 # Synced to WineStaging-3.3
 reactos/dll/win32/atl80               # Synced to WineStaging-3.3
 reactos/dll/win32/atl100              # Synced to WineStaging-3.3
-reactos/dll/win32/avifil32            # Synced to WineStaging-3.3
+reactos/dll/win32/avifil32            # Synced to WineStaging-3.9
 reactos/dll/win32/bcrypt              # Synced to WineStaging-1.9.23
 reactos/dll/win32/browseui            # Out of sync
 reactos/dll/win32/cabinet             # Synced to WineStaging-3.3

Reply via email to