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/CMakeLi…
==============================================================================
--- 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/acmstre…
==============================================================================
--- 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?r…
==============================================================================
--- 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/avifil3…
==============================================================================
--- 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/avifil3…
==============================================================================
--- 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/extrach…
==============================================================================
--- 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/extrach…
==============================================================================
--- 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/getfram…
==============================================================================
--- 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=…
==============================================================================
--- 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