https://git.reactos.org/?p=reactos.git;a=commitdiff;h=01707e98b592fb3ca9964…
commit 01707e98b592fb3ca9964ed4f2fcc1161ecfe4c8
Author: Amine Khaldi <amine.khaldi(a)reactos.org>
AuthorDate: Sun May 27 04:02:26 2018 +0100
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
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