Author: akhaldi Date: Fri May 31 16:38:30 2013 New Revision: 59125
URL: http://svn.reactos.org/svn/reactos?rev=59125&view=rev Log: [AVIFIL32] * Sync with Wine 1.5.26.
Added: trunk/reactos/dll/win32/avifil32/avifil32.idl (with props) trunk/reactos/dll/win32/avifil32/avifil32_idl.rgs (with props) Modified: trunk/reactos/dll/win32/avifil32/CMakeLists.txt trunk/reactos/dll/win32/avifil32/acmstream.c trunk/reactos/dll/win32/avifil32/api.c trunk/reactos/dll/win32/avifil32/avifile.c trunk/reactos/dll/win32/avifil32/avifile.rgs trunk/reactos/dll/win32/avifil32/avifile_private.h trunk/reactos/dll/win32/avifil32/extrachunk.c trunk/reactos/dll/win32/avifil32/extrachunk.h trunk/reactos/dll/win32/avifil32/factory.c trunk/reactos/dll/win32/avifil32/getframe.c trunk/reactos/dll/win32/avifil32/rsrc.rc trunk/reactos/dll/win32/avifil32/tmpfile.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/avifil32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/CMakeLis... ============================================================================== --- trunk/reactos/dll/win32/avifil32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/CMakeLists.txt [iso-8859-1] Fri May 31 16:38:30 2013 @@ -22,16 +22,5 @@
set_module_type(avifil32 win32dll) target_link_libraries(avifil32 uuid wine) - -add_importlibs(avifil32 - msvcrt - msacm32 - msvfw32 - winmm - ole32 - user32 - advapi32 - kernel32 - ntdll) - +add_importlibs(avifil32 msacm32 msvfw32 winmm ole32 user32 advapi32 msvcrt kernel32 ntdll) add_cd_file(TARGET avifil32 DESTINATION reactos/system32 FOR all)
Modified: trunk/reactos/dll/win32/avifil32/acmstream.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/acmstrea... ============================================================================== --- trunk/reactos/dll/win32/avifil32/acmstream.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/acmstream.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -228,7 +228,7 @@ /* check for swapped parameters */ if ((LPVOID)lParam1 != NULL && ((LPAVICOMPRESSOPTIONS)lParam1)->fccType == streamtypeAUDIO) { - register LPARAM tmp = lParam1; + LPARAM tmp = lParam1;
lParam1 = lParam2; lParam2 = tmp;
Modified: trunk/reactos/dll/win32/avifil32/api.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/api.c?re... ============================================================================== --- trunk/reactos/dll/win32/avifil32/api.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/api.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -1248,7 +1248,7 @@ pOptions->dwFlags |= AVICOMPRESSF_VALID;
HeapFree(GetProcessHeap(), 0, afmtc.pwfxEnum); - return (ret == S_OK ? TRUE : FALSE); + return ret == S_OK; } else { ERR(": unknown streamtype 0x%08X\n", sInfo.fccType); return FALSE;
Added: trunk/reactos/dll/win32/avifil32/avifil32.idl URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifil32... ============================================================================== --- trunk/reactos/dll/win32/avifil32/avifil32.idl (added) +++ trunk/reactos/dll/win32/avifil32/avifil32.idl [iso-8859-1] Fri May 31 16:38:30 2013 @@ -0,0 +1,54 @@ +/* + * COM Classes for avifil32 + * + * Copyright 2010 Alexandre Julliard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +[ + helpstring("Microsoft AVI Files"), + threading(apartment), + uuid(00020000-0000-0000-C000-000000000046) +] +coclass AVIFile { interface IAVIFile; } + +[ + helpstring("AVI Compressed Stream"), + threading(apartment), + uuid(00020001-0000-0000-c000-000000000046) +] +coclass ICMStream { interface IAVIStream; } + +[ + helpstring("Microsoft Wave File"), + threading(apartment), + uuid(00020003-0000-0000-c000-000000000046) +] +coclass WAVFile { interface IAVIFile; } + +[ + helpstring("IAVIStream & IAVIFile Proxy"), + threading(apartment), + uuid(0002000d-0000-0000-c000-000000000046) +] +coclass AVIProxy { } + +[ + helpstring("ACM Compressed Audio Stream"), + threading(apartment), + uuid(0002000f-0000-0000-c000-000000000046) +] +coclass ACMStream { interface IAVIStream; }
Propchange: trunk/reactos/dll/win32/avifil32/avifil32.idl ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/avifil32/avifil32_idl.rgs URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifil32... ============================================================================== --- trunk/reactos/dll/win32/avifil32/avifil32_idl.rgs (added) +++ trunk/reactos/dll/win32/avifil32/avifil32_idl.rgs [iso-8859-1] Fri May 31 16:38:30 2013 @@ -0,0 +1,29 @@ +HKCR +{ + NoRemove Interface + { + } + NoRemove CLSID + { + '{00020000-0000-0000-C000-000000000046}' = s 'Microsoft AVI Files' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + } + '{00020001-0000-0000-C000-000000000046}' = s 'AVI Compressed Stream' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + } + '{00020003-0000-0000-C000-000000000046}' = s 'Microsoft Wave File' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + } + '{0002000D-0000-0000-C000-000000000046}' = s 'IAVIStream & IAVIFile Proxy' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + } + '{0002000F-0000-0000-C000-000000000046}' = s 'ACM Compressed Audio Stream' + { + InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } + } + } +}
Propchange: trunk/reactos/dll/win32/avifil32/avifil32_idl.rgs ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/win32/avifil32/avifile.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifile.... ============================================================================== --- trunk/reactos/dll/win32/avifil32/avifile.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/avifile.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -34,6 +34,7 @@ #define _INC_WINDOWS #define COM_NO_WINDOWS_H
+#define COBJMACROS #include <assert.h> #include <stdarg.h>
@@ -57,54 +58,6 @@ #ifndef IDX_PER_BLOCK #define IDX_PER_BLOCK 2730 #endif - -/***********************************************************************/ - -static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile* iface,REFIID refiid,LPVOID *obj); -static ULONG WINAPI IAVIFile_fnAddRef(IAVIFile* iface); -static ULONG WINAPI IAVIFile_fnRelease(IAVIFile* iface); -static HRESULT WINAPI IAVIFile_fnInfo(IAVIFile*iface,AVIFILEINFOW*afi,LONG size); -static HRESULT WINAPI IAVIFile_fnGetStream(IAVIFile*iface,PAVISTREAM*avis,DWORD fccType,LONG lParam); -static HRESULT WINAPI IAVIFile_fnCreateStream(IAVIFile*iface,PAVISTREAM*avis,AVISTREAMINFOW*asi); -static HRESULT WINAPI IAVIFile_fnWriteData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG size); -static HRESULT WINAPI IAVIFile_fnReadData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG *size); -static HRESULT WINAPI IAVIFile_fnEndRecord(IAVIFile*iface); -static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile*iface,DWORD fccType,LONG lParam); - -static const struct IAVIFileVtbl iavift = { - IAVIFile_fnQueryInterface, - IAVIFile_fnAddRef, - IAVIFile_fnRelease, - IAVIFile_fnInfo, - IAVIFile_fnGetStream, - IAVIFile_fnCreateStream, - IAVIFile_fnWriteData, - IAVIFile_fnReadData, - IAVIFile_fnEndRecord, - IAVIFile_fnDeleteStream -}; - -static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile*iface,REFIID refiid,LPVOID*obj); -static ULONG WINAPI IPersistFile_fnAddRef(IPersistFile*iface); -static ULONG WINAPI IPersistFile_fnRelease(IPersistFile*iface); -static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile*iface,CLSID*pClassID); -static HRESULT WINAPI IPersistFile_fnIsDirty(IPersistFile*iface); -static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile*iface,LPCOLESTR pszFileName,DWORD dwMode); -static HRESULT WINAPI IPersistFile_fnSave(IPersistFile*iface,LPCOLESTR pszFileName,BOOL fRemember); -static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile*iface,LPCOLESTR pszFileName); -static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile*iface,LPOLESTR*ppszFileName); - -static const struct IPersistFileVtbl ipersistft = { - IPersistFile_fnQueryInterface, - IPersistFile_fnAddRef, - IPersistFile_fnRelease, - IPersistFile_fnGetClassID, - IPersistFile_fnIsDirty, - IPersistFile_fnLoad, - IPersistFile_fnSave, - IPersistFile_fnSaveCompleted, - IPersistFile_fnGetCurFile -};
static HRESULT WINAPI IAVIStream_fnQueryInterface(IAVIStream*iface,REFIID refiid,LPVOID *obj); static ULONG WINAPI IAVIStream_fnAddRef(IAVIStream*iface); @@ -140,14 +93,6 @@
typedef struct _IAVIFileImpl IAVIFileImpl;
-typedef struct _IPersistFileImpl { - /* IUnknown stuff */ - const IPersistFileVtbl *lpVtbl; - - /* IPersistFile stuff */ - IAVIFileImpl *paf; -} IPersistFileImpl; - typedef struct _IAVIStreamImpl { /* IUnknown stuff */ const IAVIStreamVtbl *lpVtbl; @@ -178,12 +123,11 @@ } IAVIStreamImpl;
struct _IAVIFileImpl { - /* IUnknown stuff */ - const IAVIFileVtbl *lpVtbl; - LONG ref; - - /* IAVIFile stuff... */ - IPersistFileImpl iPersistFile; + IUnknown IUnknown_inner; + IAVIFile IAVIFile_iface; + IPersistFile IPersistFile_iface; + IUnknown *outer_unk; + LONG ref;
AVIFILEINFOW fInfo; IAVIStreamImpl *ppStreams[MAX_AVISTREAMS]; @@ -206,6 +150,21 @@ UINT uMode; BOOL fDirty; }; + +static inline IAVIFileImpl *impl_from_IUnknown(IUnknown *iface) +{ + return CONTAINING_RECORD(iface, IAVIFileImpl, IUnknown_inner); +} + +static inline IAVIFileImpl *impl_from_IAVIFile(IAVIFile *iface) +{ + return CONTAINING_RECORD(iface, IAVIFileImpl, IAVIFile_iface); +} + +static inline IAVIFileImpl *impl_from_IPersistFile(IPersistFile *iface) +{ + return CONTAINING_RECORD(iface, IAVIFileImpl, IPersistFile_iface); +}
/***********************************************************************/
@@ -233,87 +192,64 @@ FOURCC ckid, DWORD flags, LPCVOID buffer, LONG size);
-HRESULT AVIFILE_CreateAVIFile(REFIID riid, LPVOID *ppv) -{ - IAVIFileImpl *pfile; - HRESULT hr; - - assert(riid != NULL && ppv != NULL); - +static HRESULT WINAPI IUnknown_fnQueryInterface(IUnknown *iface, REFIID riid, void **ppv) +{ + IAVIFileImpl *This = impl_from_IUnknown(iface); + + TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppv); + + if (!ppv) { + WARN("invalid parameter\n"); + return E_INVALIDARG; + } *ppv = NULL;
- pfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAVIFileImpl)); - if (pfile == NULL) - return AVIERR_MEMORY; - - pfile->lpVtbl = &iavift; - pfile->ref = 0; - pfile->iPersistFile.lpVtbl = &ipersistft; - pfile->iPersistFile.paf = pfile; - - hr = IAVIFile_QueryInterface((IAVIFile*)pfile, riid, ppv); - if (FAILED(hr)) - HeapFree(GetProcessHeap(), 0, pfile); - - return hr; -} - -static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile *iface, REFIID refiid, - LPVOID *obj) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; - - TRACE("(%p,%s,%p)\n", This, debugstr_guid(refiid), obj); - - if (IsEqualGUID(&IID_IUnknown, refiid) || - IsEqualGUID(&IID_IAVIFile, refiid)) { - *obj = iface; - IAVIFile_AddRef(iface); - - return S_OK; - } else if (IsEqualGUID(&IID_IPersistFile, refiid)) { - *obj = &This->iPersistFile; - IAVIFile_AddRef(iface); - - return S_OK; - } - - return OLE_E_ENUM_NOMORE; -} - -static ULONG WINAPI IAVIFile_fnAddRef(IAVIFile *iface) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; + if (IsEqualIID(riid, &IID_IUnknown)) + *ppv = &This->IUnknown_inner; + else if (IsEqualIID(riid, &IID_IAVIFile)) + *ppv = &This->IAVIFile_iface; + else if (IsEqualGUID(riid, &IID_IPersistFile)) + *ppv = &This->IPersistFile_iface; + else { + WARN("unknown IID %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + /* Violation of the COM aggregation ref counting rule */ + IUnknown_AddRef(&This->IUnknown_inner); + return S_OK; +} + +static ULONG WINAPI IUnknown_fnAddRef(IUnknown *iface) +{ + IAVIFileImpl *This = impl_from_IUnknown(iface); ULONG ref = InterlockedIncrement(&This->ref);
- TRACE("(%p) -> %d\n", iface, ref); + TRACE("(%p) ref=%d\n", This, ref);
return ref; }
-static ULONG WINAPI IAVIFile_fnRelease(IAVIFile *iface) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; +static ULONG WINAPI IUnknown_fnRelease(IUnknown *iface) +{ + IAVIFileImpl *This = impl_from_IUnknown(iface); + ULONG ref = InterlockedDecrement(&This->ref); UINT i; - ULONG ref = InterlockedDecrement(&This->ref); - - TRACE("(%p) -> %d\n", iface, ref); + + TRACE("(%p) ref=%d\n", This, ref);
if (!ref) { - if (This->fDirty) { - /* need to write headers to file */ + if (This->fDirty) AVIFILE_SaveFile(This); - }
for (i = 0; i < This->fInfo.dwStreams; i++) { if (This->ppStreams[i] != NULL) { - if (This->ppStreams[i]->ref != 0) { + if (This->ppStreams[i]->ref != 0) ERR(": someone has still %u reference to stream %u (%p)!\n", - This->ppStreams[i]->ref, i, This->ppStreams[i]); - } - AVIFILE_DestructAVIStream(This->ppStreams[i]); - HeapFree(GetProcessHeap(), 0, This->ppStreams[i]); - This->ppStreams[i] = NULL; + This->ppStreams[i]->ref, i, This->ppStreams[i]); + AVIFILE_DestructAVIStream(This->ppStreams[i]); + HeapFree(GetProcessHeap(), 0, This->ppStreams[i]); + This->ppStreams[i] = NULL; } }
@@ -342,10 +278,37 @@ return ref; }
-static HRESULT WINAPI IAVIFile_fnInfo(IAVIFile *iface, LPAVIFILEINFOW afi, - LONG size) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; +static const IUnknownVtbl unk_vtbl = +{ + IUnknown_fnQueryInterface, + IUnknown_fnAddRef, + IUnknown_fnRelease +}; + +static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile *iface, REFIID riid, void **ppv) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); + + return IUnknown_QueryInterface(This->outer_unk, riid, ppv); +} + +static ULONG WINAPI IAVIFile_fnAddRef(IAVIFile *iface) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); + + return IUnknown_AddRef(This->outer_unk); +} + +static ULONG WINAPI IAVIFile_fnRelease(IAVIFile *iface) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); + + return IUnknown_Release(This->outer_unk); +} + +static HRESULT WINAPI IAVIFile_fnInfo(IAVIFile *iface, AVIFILEINFOW *afi, LONG size) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface);
TRACE("(%p,%p,%d)\n",iface,afi,size);
@@ -363,11 +326,10 @@ return AVIERR_OK; }
-static HRESULT WINAPI IAVIFile_fnGetStream(IAVIFile *iface, PAVISTREAM *avis, - DWORD fccType, LONG lParam) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; - +static HRESULT WINAPI IAVIFile_fnGetStream(IAVIFile *iface, IAVIStream **avis, DWORD fccType, + LONG lParam) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); ULONG nStream;
TRACE("(%p,%p,0x%08X,%d)\n", iface, avis, fccType, lParam); @@ -390,11 +352,10 @@ return AVIERR_NODATA; }
-static HRESULT WINAPI IAVIFile_fnCreateStream(IAVIFile *iface,PAVISTREAM *avis, - LPAVISTREAMINFOW asi) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; - +static HRESULT WINAPI IAVIFile_fnCreateStream(IAVIFile *iface, IAVIStream **avis, + AVISTREAMINFOW *asi) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); DWORD n;
TRACE("(%p,%p,%p)\n", iface, avis, asi); @@ -444,10 +405,9 @@ return AVIERR_OK; }
-static HRESULT WINAPI IAVIFile_fnWriteData(IAVIFile *iface, DWORD ckid, - LPVOID lpData, LONG size) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; +static HRESULT WINAPI IAVIFile_fnWriteData(IAVIFile *iface, DWORD ckid, void *lpData, LONG size) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface);
TRACE("(%p,0x%08X,%p,%d)\n", iface, ckid, lpData, size);
@@ -466,10 +426,9 @@ return WriteExtraChunk(&This->fileextra, ckid, lpData, size); }
-static HRESULT WINAPI IAVIFile_fnReadData(IAVIFile *iface, DWORD ckid, - LPVOID lpData, LONG *size) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; +static HRESULT WINAPI IAVIFile_fnReadData(IAVIFile *iface, DWORD ckid, void *lpData, LONG *size) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface);
TRACE("(%p,0x%08X,%p,%p)\n", iface, ckid, lpData, size);
@@ -478,7 +437,7 @@
static HRESULT WINAPI IAVIFile_fnEndRecord(IAVIFile *iface) { - IAVIFileImpl *This = (IAVIFileImpl *)iface; + IAVIFileImpl *This = impl_from_IAVIFile(iface);
TRACE("(%p)\n",iface);
@@ -517,11 +476,9 @@ return AVIERR_OK; }
-static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile *iface, DWORD fccType, - LONG lParam) -{ - IAVIFileImpl *This = (IAVIFileImpl *)iface; - +static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile *iface, DWORD fccType, LONG lParam) +{ + IAVIFileImpl *This = impl_from_IAVIFile(iface); ULONG nStream;
TRACE("(%p,0x%08X,%d)\n", iface, fccType, lParam); @@ -556,38 +513,42 @@ return AVIERR_NODATA; }
-/***********************************************************************/ - -static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile *iface, - REFIID refiid, LPVOID *obj) -{ - IPersistFileImpl *This = (IPersistFileImpl *)iface; - - assert(This->paf != NULL); - - return IAVIFile_QueryInterface((PAVIFILE)This->paf, refiid, obj); -} - -static ULONG WINAPI IPersistFile_fnAddRef(IPersistFile *iface) -{ - IPersistFileImpl *This = (IPersistFileImpl *)iface; - - assert(This->paf != NULL); - - return IAVIFile_AddRef((PAVIFILE)This->paf); -} - -static ULONG WINAPI IPersistFile_fnRelease(IPersistFile *iface) -{ - IPersistFileImpl *This = (IPersistFileImpl *)iface; - - assert(This->paf != NULL); - - return IAVIFile_Release((PAVIFILE)This->paf); -} - -static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile *iface, - LPCLSID pClassID) +static const struct IAVIFileVtbl avif_vt = { + IAVIFile_fnQueryInterface, + IAVIFile_fnAddRef, + IAVIFile_fnRelease, + IAVIFile_fnInfo, + IAVIFile_fnGetStream, + IAVIFile_fnCreateStream, + IAVIFile_fnWriteData, + IAVIFile_fnReadData, + IAVIFile_fnEndRecord, + IAVIFile_fnDeleteStream +}; + + +static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile *iface, REFIID riid, void **ppv) +{ + IAVIFileImpl *This = impl_from_IPersistFile(iface); + + return IUnknown_QueryInterface(This->outer_unk, riid, ppv); +} + +static ULONG WINAPI IPersistFile_fnAddRef(IPersistFile *iface) +{ + IAVIFileImpl *This = impl_from_IPersistFile(iface); + + return IUnknown_AddRef(This->outer_unk); +} + +static ULONG WINAPI IPersistFile_fnRelease(IPersistFile *iface) +{ + IAVIFileImpl *This = impl_from_IPersistFile(iface); + + return IUnknown_Release(This->outer_unk); +} + +static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile *iface, LPCLSID pClassID) { TRACE("(%p,%p)\n", iface, pClassID);
@@ -601,20 +562,16 @@
static HRESULT WINAPI IPersistFile_fnIsDirty(IPersistFile *iface) { - IPersistFileImpl *This = (IPersistFileImpl *)iface; + IAVIFileImpl *This = impl_from_IPersistFile(iface);
TRACE("(%p)\n", iface);
- assert(This->paf != NULL); - - return (This->paf->fDirty ? S_OK : S_FALSE); -} - -static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface, - LPCOLESTR pszFileName, DWORD dwMode) -{ - IPersistFileImpl *This = (IPersistFileImpl *)iface; - + return (This->fDirty ? S_OK : S_FALSE); +} + +static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface, LPCOLESTR pszFileName, DWORD dwMode) +{ + IAVIFileImpl *This = impl_from_IPersistFile(iface); int len;
TRACE("(%p,%s,0x%08X)\n", iface, debugstr_w(pszFileName), dwMode); @@ -623,53 +580,49 @@ if (pszFileName == NULL) return AVIERR_BADPARAM;
- assert(This->paf != NULL); - if (This->paf->hmmio != NULL) + if (This->hmmio != NULL) return AVIERR_ERROR; /* No reuse of this object for another file! */
/* remember mode and name */ - This->paf->uMode = dwMode; + This->uMode = dwMode;
len = lstrlenW(pszFileName) + 1; - This->paf->szFileName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - if (This->paf->szFileName == NULL) + This->szFileName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (This->szFileName == NULL) return AVIERR_MEMORY; - lstrcpyW(This->paf->szFileName, pszFileName); + lstrcpyW(This->szFileName, pszFileName);
/* try to open the file */ - This->paf->hmmio = mmioOpenW(This->paf->szFileName, NULL, - MMIO_ALLOCBUF | dwMode); - if (This->paf->hmmio == NULL) { + This->hmmio = mmioOpenW(This->szFileName, NULL, MMIO_ALLOCBUF | dwMode); + if (This->hmmio == NULL) { /* mmioOpenW not in native DLLs of Win9x -- try mmioOpenA */ LPSTR szFileName;
- len = WideCharToMultiByte(CP_ACP, 0, This->paf->szFileName, -1, - NULL, 0, NULL, NULL); + len = WideCharToMultiByte(CP_ACP, 0, This->szFileName, -1, NULL, 0, NULL, NULL); szFileName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR)); if (szFileName == NULL) return AVIERR_MEMORY;
- WideCharToMultiByte(CP_ACP, 0, This->paf->szFileName, -1, szFileName, - len, NULL, NULL); - - This->paf->hmmio = mmioOpenA(szFileName, NULL, MMIO_ALLOCBUF | dwMode); + WideCharToMultiByte(CP_ACP, 0, This->szFileName, -1, szFileName, len, NULL, NULL); + + This->hmmio = mmioOpenA(szFileName, NULL, MMIO_ALLOCBUF | dwMode); HeapFree(GetProcessHeap(), 0, szFileName); - if (This->paf->hmmio == NULL) + if (This->hmmio == NULL) return AVIERR_FILEOPEN; }
/* should we create a new file? */ if (dwMode & OF_CREATE) { - memset(& This->paf->fInfo, 0, sizeof(This->paf->fInfo)); - This->paf->fInfo.dwFlags = AVIFILEINFO_HASINDEX | AVIFILEINFO_TRUSTCKTYPE; + memset(& This->fInfo, 0, sizeof(This->fInfo)); + This->fInfo.dwFlags = AVIFILEINFO_HASINDEX | AVIFILEINFO_TRUSTCKTYPE;
return AVIERR_OK; } else - return AVIFILE_LoadFile(This->paf); -} - -static HRESULT WINAPI IPersistFile_fnSave(IPersistFile *iface, - LPCOLESTR pszFileName,BOOL fRemember) + return AVIFILE_LoadFile(This); +} + +static HRESULT WINAPI IPersistFile_fnSave(IPersistFile *iface, LPCOLESTR pszFileName, + BOOL fRemember) { TRACE("(%p,%s,%d)\n", iface, debugstr_w(pszFileName), fRemember);
@@ -678,8 +631,7 @@ return AVIERR_OK; }
-static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile *iface, - LPCOLESTR pszFileName) +static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile *iface, LPCOLESTR pszFileName) { TRACE("(%p,%s)\n", iface, debugstr_w(pszFileName));
@@ -688,10 +640,9 @@ return AVIERR_OK; }
-static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface, - LPOLESTR *ppszFileName) -{ - IPersistFileImpl *This = (IPersistFileImpl *)iface; +static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface, LPOLESTR *ppszFileName) +{ + IAVIFileImpl *This = impl_from_IPersistFile(iface);
TRACE("(%p,%p)\n", iface, ppszFileName);
@@ -700,22 +651,56 @@
*ppszFileName = NULL;
- assert(This->paf != NULL); - - if (This->paf->szFileName != NULL) { - int len = lstrlenW(This->paf->szFileName) + 1; + if (This->szFileName != NULL) { + int len = lstrlenW(This->szFileName) + 1;
*ppszFileName = CoTaskMemAlloc(len * sizeof(WCHAR)); if (*ppszFileName == NULL) return AVIERR_MEMORY;
- strcpyW(*ppszFileName, This->paf->szFileName); + strcpyW(*ppszFileName, This->szFileName); }
return AVIERR_OK; }
-/***********************************************************************/ +static const struct IPersistFileVtbl pf_vt = { + IPersistFile_fnQueryInterface, + IPersistFile_fnAddRef, + IPersistFile_fnRelease, + IPersistFile_fnGetClassID, + IPersistFile_fnIsDirty, + IPersistFile_fnLoad, + IPersistFile_fnSave, + IPersistFile_fnSaveCompleted, + IPersistFile_fnGetCurFile +}; + +HRESULT AVIFILE_CreateAVIFile(IUnknown *pUnkOuter, REFIID riid, void **ppv) +{ + IAVIFileImpl *obj; + HRESULT hr; + + *ppv = NULL; + obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAVIFileImpl)); + if (!obj) + return AVIERR_MEMORY; + + obj->IUnknown_inner.lpVtbl = &unk_vtbl; + obj->IAVIFile_iface.lpVtbl = &avif_vt; + obj->IPersistFile_iface.lpVtbl = &pf_vt; + obj->ref = 1; + if (pUnkOuter) + obj->outer_unk = pUnkOuter; + else + obj->outer_unk = &obj->IUnknown_inner; + + hr = IUnknown_QueryInterface(&obj->IUnknown_inner, riid, ppv); + IUnknown_Release(&obj->IUnknown_inner); + + return hr; +} +
static HRESULT WINAPI IAVIStream_fnQueryInterface(IAVIStream *iface, REFIID refiid, LPVOID *obj) @@ -745,7 +730,7 @@
/* also add ref to parent, so that it doesn't kill us */ if (This->paf != NULL) - IAVIFile_AddRef((PAVIFILE)This->paf); + IAVIFile_AddRef(&This->paf->IAVIFile_iface);
return ref; } @@ -758,7 +743,7 @@ TRACE("(%p) -> %d\n", iface, ref);
if (This->paf != NULL) - IAVIFile_Release((PAVIFILE)This->paf); + IAVIFile_Release(&This->paf->IAVIFile_iface);
return ref; }
Modified: trunk/reactos/dll/win32/avifil32/avifile.rgs URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifile.... ============================================================================== --- trunk/reactos/dll/win32/avifil32/avifile.rgs [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/avifile.rgs [iso-8859-1] Fri May 31 16:38:30 2013 @@ -2,26 +2,11 @@ { NoRemove CLSID { - '{00020000-0000-0000-C000-000000000046}' = s 'Microsoft AVI Files' - { - InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } - } - '{00020001-0000-0000-C000-000000000046}' = s 'AVI Compressed Stream' - { - InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } - } - '{00020003-0000-0000-C000-000000000046}' = s 'Microsoft Wave File' - { - InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } - } - '{0002000d-0000-0000-C000-000000000046}' = s 'IAVIStream & IAVIFile Proxy' - { - InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } - } - '{0002000f-0000-0000-C000-000000000046}' = s 'ACM Compressed Audio Stream' - { - InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } - } + '{00020000-0000-0000-C000-000000000046}' { InprocServer = s 'avifile.dll' } + '{00020001-0000-0000-C000-000000000046}' { InprocServer = s 'avifile.dll' } + '{00020003-0000-0000-C000-000000000046}' { InprocServer = s 'avifile.dll' } + '{0002000d-0000-0000-C000-000000000046}' { InprocServer = s 'avifile.dll' } + '{0002000f-0000-0000-C000-000000000046}' { InprocServer = s 'avifile.dll' } } NoRemove AVIFile {
Modified: trunk/reactos/dll/win32/avifil32/avifile_private.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifile_... ============================================================================== --- trunk/reactos/dll/win32/avifil32/avifile_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/avifile_private.h [iso-8859-1] Fri May 31 16:38:30 2013 @@ -58,7 +58,7 @@
extern HMODULE AVIFILE_hModule DECLSPEC_HIDDEN;
-extern HRESULT AVIFILE_CreateAVIFile(REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; +extern HRESULT AVIFILE_CreateAVIFile(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; extern HRESULT AVIFILE_CreateWAVFile(REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; extern HRESULT AVIFILE_CreateACMStream(REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; extern HRESULT AVIFILE_CreateICMStream(REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
Modified: trunk/reactos/dll/win32/avifil32/extrachunk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/extrachu... ============================================================================== --- trunk/reactos/dll/win32/avifil32/extrachunk.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/extrachunk.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -32,7 +32,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(avifile);
-/* reads a chunk outof the extrachunk-structure */ +/* reads a chunk out of the extrachunk-structure */ HRESULT ReadExtraChunk(const EXTRACHUNKS *extra,FOURCC ckid,LPVOID lpData,LPLONG size) { LPBYTE lp; @@ -102,7 +102,7 @@ return AVIERR_OK; }
-/* reads a chunk fomr the HMMIO into the extrachunk-structure */ +/* reads a chunk from the HMMIO into the extrachunk-structure */ HRESULT ReadChunkIntoExtra(LPEXTRACHUNKS extra,HMMIO hmmio,const MMCKINFO *lpck) { LPDWORD lp;
Modified: trunk/reactos/dll/win32/avifil32/extrachunk.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/extrachu... ============================================================================== --- trunk/reactos/dll/win32/avifil32/extrachunk.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/extrachunk.h [iso-8859-1] Fri May 31 16:38:30 2013 @@ -42,7 +42,7 @@ /* writes a chunk into the extrachunk-structure */ HRESULT WriteExtraChunk(LPEXTRACHUNKS extra,FOURCC ckid,LPCVOID lp,LONG size) DECLSPEC_HIDDEN;
-/* reads a chunk fomr the HMMIO into the extrachunk-structure */ +/* reads a chunk from the HMMIO into the extrachunk-structure */ HRESULT ReadChunkIntoExtra(LPEXTRACHUNKS extra,HMMIO hmmio,const MMCKINFO *lpck) DECLSPEC_HIDDEN;
/* reads all non-junk chunks into the extrachunk-structure until it finds
Modified: trunk/reactos/dll/win32/avifil32/factory.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/factory.... ============================================================================== --- trunk/reactos/dll/win32/avifil32/factory.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/factory.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -144,12 +144,19 @@ TRACE("(%p,%p,%s,%p)\n", iface, pOuter, debugstr_guid(riid), ppobj);
- if (ppobj == NULL || pOuter != NULL) - return E_FAIL; + if (!ppobj) + return E_INVALIDARG; *ppobj = NULL;
+ if (pOuter && !IsEqualGUID(&IID_IUnknown, riid)) + return E_INVALIDARG; + if (IsEqualGUID(&CLSID_AVIFile, &This->clsid)) - return AVIFILE_CreateAVIFile(riid,ppobj); + return AVIFILE_CreateAVIFile(pOuter, riid, ppobj); + + if (pOuter) + return CLASS_E_NOAGGREGATION; + if (IsEqualGUID(&CLSID_ICMStream, &This->clsid)) return AVIFILE_CreateICMStream(riid,ppobj); if (IsEqualGUID(&CLSID_WAVFile, &This->clsid))
Modified: trunk/reactos/dll/win32/avifil32/getframe.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/getframe... ============================================================================== --- trunk/reactos/dll/win32/avifil32/getframe.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/getframe.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -311,8 +311,7 @@ if (sInfo.fccType != streamtypeVIDEO) return AVIERR_UNSUPPORTED;
- This->bFormatChanges = - (sInfo.dwFlags & AVISTREAMINFO_FORMATCHANGES ? TRUE : FALSE ); + This->bFormatChanges = (sInfo.dwFlags & AVISTREAMINFO_FORMATCHANGES) != 0; This->dwFormatChangeCount = sInfo.dwFormatChangeCount; This->dwEditCount = sInfo.dwEditCount; This->lCurrentFrame = -1; @@ -434,7 +433,7 @@ }
if (lpBits == NULL) { - register DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD); + DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD);
size += This->lpOutFormat->biSize + This->lpOutFormat->biSizeImage; This->lpOutFormat = HeapReAlloc(GetProcessHeap(), 0, This->lpOutFormat, size);
Modified: trunk/reactos/dll/win32/avifil32/rsrc.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/rsrc.rc?... ============================================================================== --- trunk/reactos/dll/win32/avifil32/rsrc.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/rsrc.rc [iso-8859-1] Fri May 31 16:38:30 2013 @@ -27,6 +27,8 @@
/* @makedep: avifile.rgs */ 1 WINE_REGISTRY avifile.rgs + +2 WINE_REGISTRY avifil32_idl.rgs
#define WINE_FILEDESCRIPTION_STR "Wine AVI file support library" #define WINE_FILENAME_STR "avifil32.dll"
Modified: trunk/reactos/dll/win32/avifil32/tmpfile.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/tmpfile.... ============================================================================== --- trunk/reactos/dll/win32/avifil32/tmpfile.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/tmpfile.c [iso-8859-1] Fri May 31 16:38:30 2013 @@ -262,7 +262,7 @@ tmpFile->fInfo.dwSuggestedBufferSize = sInfo.dwSuggestedBufferSize;
{ - register DWORD tmp; + DWORD tmp;
tmp = MulDiv(AVIStreamSampleToTime(ppStreams[i], sInfo.dwLength), tmpFile->fInfo.dwScale, tmpFile->fInfo.dwRate * 1000);
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=5... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Fri May 31 16:38:30 2013 @@ -43,7 +43,7 @@ reactos/dll/win32/advpack # Synced to Wine-1.5.26 reactos/dll/win32/atl # Synced to Wine-1.5.19 reactos/dll/win32/atl100 # Synced to Wine-1.5.19 -reactos/dll/win32/avifil32 # Synced to Wine-1.3.37 +reactos/dll/win32/avifil32 # Synced to Wine-1.5.26 reactos/dll/win32/bcrypt # Synced to Wine-1.5.19 reactos/dll/win32/browseui # Out of sync reactos/dll/win32/cabinet # Synced to Wine-1.5.19