[DSHOW] Add amstream dll (MultiMedia Streams), part of Direct Show.

Christian Costa titan.costa at wanadoo.fr
Thu Mar 4 16:42:59 CST 2004


Hi,

Changelog :
Add amstream dll (MultiMedia Streams), part of Direct Show.

Christian Costa   titan.costa at wanadoo.fr
-------------- next part --------------
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ include/amstream.idl	2004-03-04 21:30:59.000000000 +0000
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+import "strmif.idl";
+
+cpp_quote("#include <ddraw.h>")
+cpp_quote("#include <mmsystem.h>")
+cpp_quote("#include <mmstream.h>")
+cpp_quote("#include <ddstream.h>")
+cpp_quote("#include <austream.h>")
+
+cpp_quote("#if 0")
+interface IDirectDraw;
+interface IDirectDrawSurface;
+cpp_quote("#endif")
+
+interface IAMMultiMediaStream;
+interface IAMMediaStream;
+interface IMediaStreamFilter;
+interface IAMMediaTypeStream;
+interface IAMMediaTypeSample;
+
+enum {
+	AMMSF_NOGRAPHTHREAD      = 0x00000001
+};
+
+enum {
+	AMMSF_ADDDEFAULTRENDERER = 0x00000001,
+	AMMSF_CREATEPEER         = 0x00000002
+};
+
+enum {
+	AMMSF_RENDERTYPEMASK     = 0x00000003,
+	AMMSF_RENDERTOEXISTING   = 0x00000000,
+	AMMSF_RENDERALLSTREAMS   = 0x00000001,
+	AMMSF_NORENDER           = 0x00000002,
+	AMMSF_NOCLOCK            = 0x00000004,
+	AMMSF_RUN                = 0x00000008
+};
+
+
+typedef [v1_enum] enum {
+	Disabled = 0,
+	ReadData = 1,
+	RenderData = 2
+} OUTPUT_STATE;
+
+/*
+[
+object,
+uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),
+dual,
+helpstring("IDirectShowStream Interface"),
+pointer_default(unique)
+]
+interface IDirectShowStream : IDispatch
+{
+	[propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal);
+	[propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal);
+	[propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);
+	[propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal);
+	[propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);
+	[propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal);
+};
+*/
+
+[
+object,
+uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMultiMediaStream : IMultiMediaStream
+{
+	HRESULT Initialize(
+		[in] STREAM_TYPE StreamType,
+		[in] DWORD dwFlags,
+		[in] /*[optional]*/ IGraphBuilder *pFilterGraph);
+
+	HRESULT GetFilterGraph(
+		[out] IGraphBuilder **ppGraphBuilder);
+
+	HRESULT GetFilter(
+		[out] IMediaStreamFilter **ppFilter);
+
+	HRESULT AddMediaStream(
+		[in] /*[optional]*/ IUnknown *pStreamObject,
+		[in] /*[optional]*/ const MSPID *PurposeId,
+		[in] DWORD dwFlags,
+		[out] /*[optional]*/ IMediaStream **ppNewStream);
+
+	HRESULT OpenFile(
+		[in] LPCWSTR pszFileName,
+		[in] DWORD dwFlags);
+
+	HRESULT OpenMoniker(
+		[in] IBindCtx *pCtx,
+		[in] IMoniker *pMoniker,
+		[in] DWORD dwFlags);
+
+	HRESULT Render(
+		[in] DWORD dwFlags);
+}
+
+
+[
+object,
+uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaStream : IMediaStream
+{
+	HRESULT Initialize(
+		[in] /*[optional]*/ IUnknown *pSourceObject,
+		[in] DWORD dwFlags,
+		[in] REFMSPID PurposeId,
+		[in] const STREAM_TYPE StreamType);
+
+	HRESULT SetState(
+		[in] FILTER_STATE State);
+
+	HRESULT JoinAMMultiMediaStream(
+		[in] IAMMultiMediaStream *pAMMultiMediaStream);
+
+	HRESULT JoinFilter(
+		[in] IMediaStreamFilter *pMediaStreamFilter);
+
+	HRESULT JoinFilterGraph(
+		[in] IFilterGraph *pFilterGraph);
+};
+
+
+[
+object,
+local,
+uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStreamFilter : IBaseFilter
+{
+	HRESULT AddMediaStream(
+		[in] IAMMediaStream *pAMMediaStream);
+
+	HRESULT GetMediaStream(
+		[in] REFMSPID idPurpose,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT EnumMediaStreams(
+		[in] long Index,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT SupportSeeking(
+		[in] BOOL bRenderer);
+
+	HRESULT ReferenceTimeToStreamTime(
+		[in] [out] REFERENCE_TIME *pTime);
+
+	HRESULT GetCurrentStreamTime(
+		[out] REFERENCE_TIME *pCurrentStreamTime);
+
+	HRESULT WaitUntil(
+		[in]  REFERENCE_TIME WaitStreamTime);
+
+	HRESULT Flush(
+		[in] BOOL bCancelEOS);
+
+	HRESULT EndOfStream();
+};
+
+
+[
+object,
+local,
+uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSampleAllocator : IUnknown
+{
+	HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);
+};
+
+
+[
+object,
+local,
+uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSample : IUnknown
+{
+	HRESULT GetSurfaceAndReleaseLock(
+		[out] IDirectDrawSurface **ppDirectDrawSurface,
+		[out] RECT * pRect);
+
+	HRESULT LockMediaSamplePointer(void);
+};
+
+
+[
+object,
+local,
+uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+
+interface IAMMediaTypeStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] AM_MEDIA_TYPE * pMediaType,
+		[in] DWORD dwFlags);
+
+	HRESULT SetFormat(
+		[in] AM_MEDIA_TYPE * pMediaType,
+		[in] DWORD dwFlags);
+
+	HRESULT CreateSample(
+		[in] long lSampleSize,
+		[in] /*[optional]*/ BYTE * pbBuffer,
+		[in] DWORD dwFlags,
+		[in] /*[optional]*/ IUnknown *pUnkOuter,
+		[out] IAMMediaTypeSample ** ppAMMediaTypeSample);
+
+	HRESULT GetStreamAllocatorRequirements(
+		[out] ALLOCATOR_PROPERTIES *pProps);
+
+	HRESULT SetStreamAllocatorRequirements(
+		[in] ALLOCATOR_PROPERTIES *pProps);
+};
+
+
+[
+object,
+local,
+uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaTypeSample : IStreamSample
+{
+	HRESULT SetPointer(
+		[in] BYTE *pBuffer,
+		[in] long lSize);
+
+	HRESULT GetPointer(
+		[out] BYTE ** ppBuffer);
+
+	long GetSize(void);
+
+	HRESULT GetTime(
+		[out] REFERENCE_TIME * pTimeStart,
+		[out] REFERENCE_TIME * pTimeEnd);
+
+	HRESULT SetTime(
+		[in] REFERENCE_TIME * pTimeStart,
+		[in] REFERENCE_TIME * pTimeEnd);
+
+	HRESULT IsSyncPoint(void);
+
+	HRESULT SetSyncPoint(
+		BOOL bIsSyncPoint);
+
+	HRESULT IsPreroll(void);
+
+	HRESULT SetPreroll(
+		BOOL bIsPreroll);
+
+	long GetActualDataLength(void);
+
+	HRESULT SetActualDataLength(long Len);
+
+	HRESULT GetMediaType(
+		AM_MEDIA_TYPE **ppMediaType);
+
+	HRESULT SetMediaType(
+		AM_MEDIA_TYPE *pMediaType);
+
+	HRESULT IsDiscontinuity(void);
+
+	HRESULT SetDiscontinuity(
+		BOOL bDiscontinuity);
+
+	HRESULT GetMediaTime(
+		[out] LONGLONG * pTimeStart,
+		[out] LONGLONG * pTimeEnd);
+
+	HRESULT SetMediaTime(
+		[in] LONGLONG * pTimeStart,
+		[in] LONGLONG * pTimeEnd);
+};
+
+cpp_quote("DEFINE_GUID(CLSID_AMMultiMediaStream,  0x49c47ce5, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream,  0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioStream,       0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioData,         0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream,   0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ include/mmstream.idl	2004-03-04 21:31:01.000000000 +0000
@@ -0,0 +1,184 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#define MS_ERROR_CODE(x)                  MAKE_HRESULT(1, FACILITY_ITF, (x) + 0x400)")
+cpp_quote("#define MS_SUCCESS_CODE(x)                MAKE_HRESULT(0, FACILITY_ITF, x)")
+cpp_quote("#define MS_S_PENDING                      MS_SUCCESS_CODE(1)")
+cpp_quote("#define MS_S_NOUPDATE                     MS_SUCCESS_CODE(2)")
+cpp_quote("#define MS_S_ENDOFSTREAM                  MS_SUCCESS_CODE(3)")
+
+cpp_quote("#define MS_E_SAMPLEALLOC                  MS_ERROR_CODE(1)")
+cpp_quote("#define MS_E_PURPOSEID                    MS_ERROR_CODE(2)")
+cpp_quote("#define MS_E_NOSTREAM                     MS_ERROR_CODE(3)")
+cpp_quote("#define MS_E_NOSEEKING                    MS_ERROR_CODE(4)")
+cpp_quote("#define MS_E_INCOMPATIBLE                 MS_ERROR_CODE(5)")
+cpp_quote("#define MS_E_BUSY                         MS_ERROR_CODE(6)")
+cpp_quote("#define MS_E_NOTINIT                      MS_ERROR_CODE(7)")
+cpp_quote("#define MS_E_SOURCEALREADYDEFINED         MS_ERROR_CODE(8)")
+cpp_quote("#define MS_E_INVALIDSTREAMTYPE            MS_ERROR_CODE(9)")
+cpp_quote("#define MS_E_NOTRUNNING                   MS_ERROR_CODE(10)")
+
+cpp_quote("DEFINE_GUID(MSPID_PrimaryVideo,  0xa35ff56a, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+cpp_quote("DEFINE_GUID(MSPID_PrimaryAudio,  0xa35ff56b, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+
+cpp_quote("#if 0")
+typedef void* PAPCFUNC;
+cpp_quote("#endif")
+
+typedef LONGLONG STREAM_TIME;
+
+typedef GUID MSPID;
+typedef REFGUID REFMSPID;
+
+typedef enum {
+	STREAMTYPE_READ         = 0,
+	STREAMTYPE_WRITE        = 1,
+	STREAMTYPE_TRANSFORM    = 2
+} STREAM_TYPE;
+
+typedef enum {
+	STREAMSTATE_STOP        = 0,
+	STREAMSTATE_RUN         = 1
+} STREAM_STATE;
+
+
+typedef enum {
+	COMPSTAT_NOUPDATEOK                             = 0x00000001,
+	COMPSTAT_WAIT                                   = 0x00000002,
+	COMPSTAT_ABORT                                  = 0x00000004
+} COMPLETION_STATUS_FLAGS;
+
+enum {
+	MMSSF_HASCLOCK                                  = 0x00000001,
+	MMSSF_SUPPORTSEEK                               = 0x00000002,
+	MMSSF_ASYNCHRONOUS                              = 0x00000004
+};
+
+enum {
+	SSUPDATE_ASYNC                                  = 0x00000001,
+	SSUPDATE_CONTINUOUS                             = 0x00000002
+};
+
+interface IMultiMediaStream;
+interface IMediaStream;
+interface IStreamSample;
+
+
+[
+object,
+local,
+uuid(B502D1BC-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMultiMediaStream : IUnknown {
+
+	HRESULT GetInformation(
+		[out] /*[optional]*/ char *pdwFlags,
+		[out] /*[optional]*/ STREAM_TYPE *pStreamType);
+
+	HRESULT GetMediaStream(
+		[in] REFMSPID idPurpose,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT EnumMediaStreams(
+		[in] long Index,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT GetState(
+		[out] STREAM_STATE *pCurrentState);
+
+	HRESULT SetState(
+		[in] STREAM_STATE NewState);
+
+	HRESULT GetTime(
+		[out] STREAM_TIME *pCurrentTime);
+
+	HRESULT GetDuration(
+		[out] STREAM_TIME *pDuration);
+
+	HRESULT Seek(
+		[in] STREAM_TIME SeekTime);
+
+	HRESULT GetEndOfStreamEventHandle(
+		[out] HANDLE *phEOS);
+};
+
+
+[
+object,
+uuid(B502D1BD-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStream : IUnknown {
+	
+	HRESULT GetMultiMediaStream(
+		[out] IMultiMediaStream **ppMultiMediaStream);
+
+	HRESULT GetInformation(
+		[out] /*[optional]*/ MSPID *pPurposeId,
+		[out] /*[optional]*/ STREAM_TYPE *pType);
+
+	HRESULT SetSameFormat(
+		[in] IMediaStream *pStreamThatHasDesiredFormat,
+		[in] DWORD dwFlags);
+
+	HRESULT AllocateSample(
+		[in]  DWORD dwFlags,
+		[out] IStreamSample **ppSample);
+
+	HRESULT CreateSharedSample(
+		[in]  IStreamSample *pExistingSample,
+		[in]  DWORD dwFlags,
+		[out] IStreamSample **ppNewSample);
+
+	HRESULT SendEndOfStream(DWORD dwFlags);
+};
+
+
+[
+object,
+local,
+uuid(B502D1BE-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IStreamSample : IUnknown {
+	
+	HRESULT GetMediaStream(
+		[in] IMediaStream **ppMediaStream);
+
+	HRESULT GetSampleTimes(
+		[out] /*[optional]*/ STREAM_TIME * pStartTime,
+		[out] /*[optional]*/ STREAM_TIME * pEndTime,
+		[out] /*[optional]*/ STREAM_TIME * pCurrentTime);
+
+	HRESULT SetSampleTimes(
+		[in] /*[optional]*/ const STREAM_TIME *pStartTime,
+		[in] /*[optional]*/ const STREAM_TIME *pEndTime);
+
+	HRESULT Update(
+		[in] DWORD dwFlags,
+		[in] /*[optional]*/ HANDLE hEvent,
+		[in] /*[optional]*/ PAPCFUNC pfnAPC,
+		[in] /*[optional]*/ DWORD dwAPCData);
+
+	HRESULT CompletionStatus(
+		[in] DWORD dwFlags,
+		[in] /*[optional]*/ DWORD dwMilliseconds);
+};
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ include/austream.idl	2004-03-04 21:31:06.000000000 +0000
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#if 0")
+typedef struct tWAVEFORMATEX WAVEFORMATEX;
+cpp_quote ("#endif")
+
+interface IAudioMediaStream;
+interface IAudioStreamSample;
+interface IMemoryData;
+interface IAudioData;
+
+[
+object,
+local,
+uuid(f7537560-a3be-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioMediaStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+	);
+
+	HRESULT SetFormat(
+		[in] const WAVEFORMATEX *lpWaveFormat);
+
+	HRESULT CreateSample(
+		[in] IAudioData *pAudioData,
+		[in] DWORD dwFlags,
+		[out] IAudioStreamSample **ppSample
+	);
+}
+
+
+[
+object,
+local,
+uuid(345fee00-aba5-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioStreamSample : IStreamSample
+{
+	HRESULT GetAudioData(
+		[out] IAudioData **ppAudio
+	);
+}
+
+
+[
+object,
+local,
+uuid(327fc560-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IMemoryData : IUnknown
+{
+	HRESULT SetBuffer(
+		[in] DWORD cbSize,
+		[in] BYTE *pbData,
+		[in] DWORD dwFlags
+	);
+
+	HRESULT GetInfo(
+		[out] DWORD *pdwLength,
+		[out] BYTE **ppbData,
+		[out] DWORD *pcbActualData
+	);
+	HRESULT SetActual(
+		[in] DWORD cbDataValid
+	);
+}
+
+
+[
+object,
+local,
+uuid(54c719c0-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioData : IMemoryData
+{
+	HRESULT GetFormat(
+		[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+	);
+
+	HRESULT SetFormat(
+		[in] const WAVEFORMATEX *lpWaveFormat
+	);
+}
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ include/ddstream.idl	2004-03-04 21:31:03.000000000 +0000
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#ifndef __WINE_DDRAW_H")
+typedef void * LPDDSURFACEDESC;
+typedef struct tDDSURFACEDESC DDSURFACEDESC;
+interface IDirectDraw;
+interface IDirectDrawSurface;
+interface IDirectDrawPalette;
+cpp_quote("#endif")
+cpp_quote("#include <ddraw.h>")
+
+enum {
+	DDSFF_PROGRESSIVERENDER = 0x00000001
+};
+
+interface IDirectDrawMediaStream;
+interface IDirectDrawStreamSample;
+
+[
+object,
+local,
+uuid(F4104FCE-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] /*[optional]*/ DDSURFACEDESC *pDDSDCurrent,
+		[out] /*[optional]*/ IDirectDrawPalette **ppDirectDrawPalette,
+		[out] /*[optional]*/ DDSURFACEDESC *pDDSDDesired,
+		[out] /*[optional]*/ DWORD *pdwFlags);
+
+	HRESULT SetFormat(
+		[in] const DDSURFACEDESC *pDDSurfaceDesc,
+		[in] /*[optional]*/ IDirectDrawPalette *pDirectDrawPalette);
+
+	HRESULT GetDirectDraw(
+		[out] IDirectDraw **ppDirectDraw);
+
+	HRESULT SetDirectDraw(
+		[in] IDirectDraw *pDirectDraw);
+
+	HRESULT CreateSample(
+		[in] /*[optional]*/ IDirectDrawSurface *pSurface,
+		[in] /*[optional]*/ const RECT *pRect,
+		[in] DWORD dwFlags,
+		[out] IDirectDrawStreamSample **ppSample);
+
+	HRESULT GetTimePerFrame(
+		[out] STREAM_TIME *pFrameTime);
+};
+
+
+[
+object,
+local,
+uuid(F4104FCF-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawStreamSample : IStreamSample
+{
+	HRESULT GetSurface(
+		[out] /*[optional]*/ IDirectDrawSurface ** ppDirectDrawSurface,
+		[out] /*[optional]*/ RECT * pRect);
+
+	HRESULT SetRect(
+		[in] const RECT * pRect);
+
+};
Index: include/Makefile.in
===================================================================
RCS file: /home/wine/wine/include/Makefile.in,v
retrieving revision 1.120
diff -u -r1.120 Makefile.in
--- include/Makefile.in	3 Mar 2004 02:18:32 -0000	1.120
+++ include/Makefile.in	4 Mar 2004 21:33:54 -0000
@@ -5,6 +5,10 @@
 MODULE	  = none
 
 IDL_SRCS = \
+	amstream.idl \
+	austream.idl \
+	ddstream.idl \
+	mmstream.idl \
 	amvideo.idl \
 	comcat.idl \
 	docobj.idl \
Index: include/ddraw.h
===================================================================
RCS file: /home/wine/wine/include/ddraw.h,v
retrieving revision 1.52
diff -u -r1.52 ddraw.h
--- include/ddraw.h	5 Sep 2003 23:15:44 -0000	1.52
+++ include/ddraw.h	4 Mar 2004 21:34:03 -0000
@@ -32,6 +32,7 @@
 /*****************************************************************************
  * Predeclare the interfaces
  */
+#ifndef __DDRAW_GUID_DEFINED__
 DEFINE_GUID( CLSID_DirectDraw,		0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
 DEFINE_GUID( CLSID_DirectDraw7,         0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
 DEFINE_GUID( CLSID_DirectDrawClipper,	0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
@@ -48,6 +49,7 @@
 DEFINE_GUID( IID_IDirectDrawClipper,	0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
 DEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
 DEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
+#endif
 
 typedef struct IDirectDraw IDirectDraw,*LPDIRECTDRAW;
 typedef struct IDirectDraw2 IDirectDraw2,*LPDIRECTDRAW2;
Index: dlls/uuid/uuid.c
===================================================================
RCS file: /home/wine/wine/dlls/uuid/uuid.c,v
retrieving revision 1.1
diff -u -r1.1 uuid.c
--- dlls/uuid/uuid.c	26 Jan 2004 21:29:05 -0000	1.1
+++ dlls/uuid/uuid.c	4 Mar 2004 21:34:04 -0000
@@ -64,6 +64,8 @@
 #define __IKsPropertySet_INTERFACE_DEFINED__
 #include "strmif.h"
 #include "control.h"
+#define __DDRAW_GUID_DEFINED__
+#include "amstream.h"
 
 /* GUIDs not declared in an exported header file */
 DEFINE_GUID(IID_IDirectPlaySP,0xc9f6360,0xcc61,0x11cf,0xac,0xec,0x00,0xaa,0x00,0x68,0x86,0xe3);
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.250
diff -u -r1.250 configure.ac
--- configure.ac	3 Mar 2004 20:30:46 -0000	1.250
+++ configure.ac	4 Mar 2004 21:34:08 -0000
@@ -1485,6 +1485,7 @@
 dlls/Makefile
 dlls/advapi32/Makefile
 dlls/advapi32/tests/Makefile
+dlls/amstream/Makefile
 dlls/avicap32/Makefile
 dlls/avifil32/Makefile
 dlls/cabinet/Makefile
Index: dlls/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/Makefile.in,v
retrieving revision 1.207
diff -u -r1.207 Makefile.in
--- dlls/Makefile.in	2 Mar 2004 04:57:35 -0000	1.207
+++ dlls/Makefile.in	4 Mar 2004 21:34:13 -0000
@@ -17,6 +17,7 @@
 
 BASEDIRS = \
 	advapi32 \
+	amstream \
 	avicap32 \
 	avifil32 \
 	cabinet \
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/amstream_private.h	2004-03-04 21:53:37.000000000 +0000
@@ -0,0 +1,38 @@
+/*
+ *      MultiMedia Streams private interfaces (AMSTREAM.DLL)
+ *
+ * Copyright 2004 Christian Costa
+ *
+ * This file contains the (internal) driver registration functions,
+ * driver enumeration APIs and DirectDraw creation functions.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __AMSTREAM_PRIVATE_INCLUDED__
+#define __AMSTREAM_PRIVATE_INCLUDED__
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wtypes.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "dshow.h"
+
+HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj);
+
+#endif /* __AMSTREAM_PRIVATE_INCLUDED__ */
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/amstream.c	2004-03-04 21:32:43.000000000 +0000
@@ -0,0 +1,269 @@
+/*
+ * Implementation of IAMMultiMediaStream Interface
+ *
+ * Copyright 2004 Christian Costa
+ *
+ * This file contains the (internal) driver registration functions,
+ * driver enumeration APIs and DirectDraw creation functions.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+#include "wine/debug.h"
+
+#include "winbase.h"
+#include "wingdi.h"
+
+#include "amstream_private.h"
+#include "amstream.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(amstream);
+
+typedef struct {
+    IAMMultiMediaStream lpVtbl;
+    int ref;
+} IAMMultiMediaStreamImpl;
+
+static struct ICOM_VTABLE(IAMMultiMediaStream) AM_Vtbl;
+
+HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+{
+    IAMMultiMediaStreamImpl* object; 
+
+    FIXME("(%p,%p)\n", pUnkOuter, ppObj);
+      
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAMMultiMediaStreamImpl));
+    
+    object->lpVtbl.lpVtbl = &AM_Vtbl;
+    object->ref = 1;
+
+    *ppObj = object;
+    
+    return S_OK;
+}
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI IAMMultiMediaStreamImpl_QueryInterface(IAMMultiMediaStream* iface, REFIID riid, void** ppvObject)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
+
+  if (IsEqualGUID(riid, &IID_IUnknown)
+      || IsEqualGUID(riid, &IID_IAMMultiMediaStream))
+  {
+    IClassFactory_AddRef(iface);
+    *ppvObject = This;
+    return S_OK;
+  }
+
+  ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
+  return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IAMMultiMediaStreamImpl_AddRef(IAMMultiMediaStream* iface)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)\n", iface, This); 
+
+  This->ref++;
+  return S_OK;
+}
+
+static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)\n", iface, This); 
+
+  if (!--This->ref)
+    HeapFree(GetProcessHeap(), 0, This);
+
+  return S_OK;
+}
+
+/*** IMultiMediaStream methods ***/
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetInformation(IAMMultiMediaStream* iface, char* pdwFlags, STREAM_TYPE* pStreamType)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pdwFlags, pStreamType); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetMediaStream(IAMMultiMediaStream* iface, REFMSPID idPurpose, IMediaStream** ppMediaStream)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, idPurpose, ppMediaStream); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_EnumMediaStreams(IAMMultiMediaStream* iface, long Index, IMediaStream** ppMediaStream)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, Index, ppMediaStream); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetState(IAMMultiMediaStream* iface, STREAM_STATE* pCurrentState)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentState); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_SetState(IAMMultiMediaStream* iface, STREAM_STATE NewState)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+  
+  FIXME("(%p/%p)->() stub!\n", This, iface); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetTime(IAMMultiMediaStream* iface, STREAM_TIME* pCurrentTime)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, pCurrentTime); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetDuration(IAMMultiMediaStream* iface, STREAM_TIME* pDuration)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDuration); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_Seek(IAMMultiMediaStream* iface, STREAM_TIME SeekTime)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->() stub!\n", This, iface); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetEndOfStream(IAMMultiMediaStream* iface, HANDLE* phEOS)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, phEOS); 
+
+  return S_FALSE;
+}
+
+/*** IAMMultiMediaStream methods ***/
+static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* iface, STREAM_TYPE StreamType, DWORD dwFlags, IGraphBuilder* pFilterGraph)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%lx,%lx,%p) stub!\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilterGraph(IAMMultiMediaStream* iface, IGraphBuilder** ppGraphBuilder)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppGraphBuilder); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilter(IAMMultiMediaStream* iface, IMediaStreamFilter** ppFilter)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppFilter); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_AddMediaStream(IAMMultiMediaStream* iface, IUnknown* pStreamObject, const MSPID* PurposeId,
+                                          DWORD dwFlags, IMediaStream** ppNewStream)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p,%p,%lx,%p) stub!\n", This, iface, pStreamObject, PurposeId, dwFlags, ppNewStream); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenFile(IAMMultiMediaStream* iface, LPCWSTR pszFileName, DWORD dwFlags)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p,%lx) stub!\n", This, iface, pszFileName, dwFlags); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenMoniker(IAMMultiMediaStream* iface, IBindCtx* pCtx, IMoniker* pMoniker, DWORD dwFlags)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%p,%p,%lx) stub!\n", This, iface, pCtx, pMoniker, dwFlags); 
+
+  return S_FALSE;
+}
+
+static HRESULT WINAPI IAMMultiMediaStreamImpl_Render(IAMMultiMediaStream* iface, DWORD dwFlags)
+{
+  ICOM_THIS(IAMMultiMediaStreamImpl, iface);
+
+  FIXME("(%p/%p)->(%lx) stub!\n", This, iface, dwFlags); 
+
+  return S_FALSE;
+}
+
+static ICOM_VTABLE(IAMMultiMediaStream) AM_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+    IAMMultiMediaStreamImpl_QueryInterface,
+    IAMMultiMediaStreamImpl_AddRef,
+    IAMMultiMediaStreamImpl_Release,
+    IAMMultiMediaStreamImpl_GetInformation,
+    IAMMultiMediaStreamImpl_GetMediaStream,
+    IAMMultiMediaStreamImpl_EnumMediaStreams,
+    IAMMultiMediaStreamImpl_GetState,
+    IAMMultiMediaStreamImpl_SetState,
+    IAMMultiMediaStreamImpl_GetTime,
+    IAMMultiMediaStreamImpl_GetDuration,
+    IAMMultiMediaStreamImpl_Seek,
+    IAMMultiMediaStreamImpl_GetEndOfStream,
+    IAMMultiMediaStreamImpl_Initialize,
+    IAMMultiMediaStreamImpl_GetFilterGraph,
+    IAMMultiMediaStreamImpl_GetFilter,
+    IAMMultiMediaStreamImpl_AddMediaStream,
+    IAMMultiMediaStreamImpl_OpenFile,
+    IAMMultiMediaStreamImpl_OpenMoniker,
+    IAMMultiMediaStreamImpl_Render
+};
+
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/amstream.spec	2004-02-29 21:13:14.000000000 +0000
@@ -0,0 +1,4 @@
+@ stdcall -private DllCanUnloadNow() AMSTREAM_DllCanUnloadNow
+@ stdcall -private DllGetClassObject(ptr ptr ptr) AMSTREAM_DllGetClassObject
+@ stdcall -private DllRegisterServer() AMSTREAM_DllRegisterServer
+@ stdcall -private DllUnregisterServer() AMSTREAM_DllUnregisterServer
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/main.c	2004-03-04 21:52:41.000000000 +0000
@@ -0,0 +1,211 @@
+/*
+ *     MultiMedia Streams Base Functions (AMSTREAM.DLL)
+ *
+ * Copyright 2004 Christian Costa
+ *
+ * This file contains the (internal) driver registration functions,
+ * driver enumeration APIs and DirectDraw creation functions.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define COM_NO_WINDOWS_H
+
+#include <stdarg.h>
+#include <string.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "winreg.h"
+#include "winerror.h"
+
+#include "ole2.h"
+#include "uuids.h"
+
+#include "amstream_private.h"
+#include "amstream.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(amstream);
+
+static DWORD dll_ref = 0;
+
+/* For the moment, do nothing here. */
+BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
+{
+    switch(fdwReason) {
+        case DLL_PROCESS_ATTACH:
+            DisableThreadLibraryCalls(hInstDLL);
+	    break;
+	case DLL_PROCESS_DETACH:
+	    break;
+    }
+    return TRUE;
+}
+
+/******************************************************************************
+ * Multimedia Streams ClassFactory
+ */
+typedef struct {
+    IClassFactory ITF_IClassFactory;
+
+    DWORD ref;
+    HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
+} IClassFactoryImpl;
+
+struct object_creation_info
+{
+    const CLSID *clsid;
+    HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
+};
+
+static const struct object_creation_info object_creation[] =
+{
+    { &CLSID_AMMultiMediaStream, AM_create },
+};
+
+static HRESULT WINAPI
+AMCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
+{
+    ICOM_THIS(IClassFactoryImpl,iface);
+
+    if (IsEqualGUID(riid, &IID_IUnknown)
+	|| IsEqualGUID(riid, &IID_IClassFactory))
+    {
+	IClassFactory_AddRef(iface);
+	*ppobj = This;
+	return S_OK;
+    }
+
+    WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI AMCF_AddRef(LPCLASSFACTORY iface) {
+    ICOM_THIS(IClassFactoryImpl,iface);
+    return ++(This->ref);
+}
+
+static ULONG WINAPI AMCF_Release(LPCLASSFACTORY iface) {
+    ICOM_THIS(IClassFactoryImpl,iface);
+
+    ULONG ref = --This->ref;
+
+    if (ref == 0)
+	HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
+}
+
+
+static HRESULT WINAPI AMCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
+					  REFIID riid, LPVOID *ppobj) {
+    ICOM_THIS(IClassFactoryImpl,iface);
+    HRESULT hres;
+    LPUNKNOWN punk;
+    
+    TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
+
+    hres = This->pfnCreateInstance(pOuter, (LPVOID *) &punk);
+    if (FAILED(hres)) {
+        *ppobj = NULL;
+        return hres;
+    }
+    hres = IUnknown_QueryInterface(punk, riid, ppobj);
+    if (FAILED(hres)) {
+        *ppobj = NULL;
+	return hres;
+    }
+    IUnknown_Release(punk);
+    return hres;
+}
+
+static HRESULT WINAPI AMCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
+    ICOM_THIS(IClassFactoryImpl,iface);
+    FIXME("(%p)->(%d),stub!\n",This,dolock);
+    return S_OK;
+}
+
+static ICOM_VTABLE(IClassFactory) DSCF_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+    AMCF_QueryInterface,
+    AMCF_AddRef,
+    AMCF_Release,
+    AMCF_CreateInstance,
+    AMCF_LockServer
+};
+
+/*******************************************************************************
+ * DllGetClassObject [AMSTREAM.@]
+ * Retrieves class object from a DLL object
+ *
+ * NOTES
+ *    Docs say returns STDAPI
+ *
+ * PARAMS
+ *    rclsid [I] CLSID for the class object
+ *    riid   [I] Reference to identifier of interface for class object
+ *    ppv    [O] Address of variable to receive interface pointer for riid
+ *
+ * RETURNS
+ *    Success: S_OK
+ *    Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
+ *             E_UNEXPECTED
+ */
+DWORD WINAPI AMSTREAM_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+{
+    int i;
+    IClassFactoryImpl *factory;
+    
+    TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+    
+    if ( !IsEqualGUID( &IID_IClassFactory, riid )
+	 && ! IsEqualGUID( &IID_IUnknown, riid) )
+	return E_NOINTERFACE;
+
+    for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
+    {
+	if (IsEqualGUID(object_creation[i].clsid, rclsid))
+	    break;
+    }
+
+    if (i == sizeof(object_creation)/sizeof(object_creation[0]))
+    {
+	FIXME("%s: no class found.\n", debugstr_guid(rclsid));
+	return CLASS_E_CLASSNOTAVAILABLE;
+    }
+
+    factory = HeapAlloc(GetProcessHeap(), 0, sizeof(*factory));
+    if (factory == NULL) return E_OUTOFMEMORY;
+
+    factory->ITF_IClassFactory.lpVtbl = &DSCF_Vtbl;
+    factory->ref = 1;
+
+    factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
+
+    *ppv = &(factory->ITF_IClassFactory);
+    return S_OK;
+}
+
+/***********************************************************************
+ *              DllCanUnloadNow (AMSTREAM.@)
+ */
+HRESULT WINAPI AMSTREAM_DllCanUnloadNow()
+{
+    return dll_ref != 0 ? S_FALSE : S_OK;
+}
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/regsvr.c	2004-03-04 21:49:22.000000000 +0000
@@ -0,0 +1,554 @@
+/*
+ *	self-registerable dll functions for amstream.dll
+ *
+ * Copyright (C) 2003 John K. Hohm
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define COM_NO_WINDOWS_H
+#include <stdarg.h>
+#include <string.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "wingdi.h"
+#include "winreg.h"
+#include "winerror.h"
+
+#include "ole2.h"
+#include "uuids.h"
+
+#include "amstream.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(amstream);
+
+/*
+ * Near the bottom of this file are the exported DllRegisterServer and
+ * DllUnregisterServer, which make all this worthwhile.
+ */
+
+/***********************************************************************
+ *		interface for self-registering
+ */
+struct regsvr_interface
+{
+    IID const *iid;		/* NULL for end of list */
+    LPCSTR name;		/* can be NULL to omit */
+    IID const *base_iid;	/* can be NULL to omit */
+    int num_methods;		/* can be <0 to omit */
+    CLSID const *ps_clsid;	/* can be NULL to omit */
+    CLSID const *ps_clsid32;	/* can be NULL to omit */
+};
+
+static HRESULT register_interfaces(struct regsvr_interface const *list);
+static HRESULT unregister_interfaces(struct regsvr_interface const *list);
+
+struct regsvr_coclass
+{
+    CLSID const *clsid;		/* NULL for end of list */
+    LPCSTR name;		/* can be NULL to omit */
+    LPCSTR ips;			/* can be NULL to omit */
+    LPCSTR ips32;		/* can be NULL to omit */
+    LPCSTR ips32_tmodel;	/* can be NULL to omit */
+    LPCSTR progid;		/* can be NULL to omit */
+    LPCSTR viprogid;		/* can be NULL to omit */
+    LPCSTR progid_extra;	/* can be NULL to omit */
+};
+
+static HRESULT register_coclasses(struct regsvr_coclass const *list);
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list);
+
+/***********************************************************************
+ *		static string constants
+ */
+static WCHAR const interface_keyname[10] = {
+    'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 };
+static WCHAR const base_ifa_keyname[14] = {
+    'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c',
+    'e', 0 };
+static WCHAR const num_methods_keyname[11] = {
+    'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 };
+static WCHAR const ps_clsid_keyname[15] = {
+    'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
+    'i', 'd', 0 };
+static WCHAR const ps_clsid32_keyname[17] = {
+    'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
+    'i', 'd', '3', '2', 0 };
+static WCHAR const clsid_keyname[6] = {
+    'C', 'L', 'S', 'I', 'D', 0 };
+static WCHAR const curver_keyname[7] = {
+    'C', 'u', 'r', 'V', 'e', 'r', 0 };
+static WCHAR const ips_keyname[13] = {
+    'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
+    0 };
+static WCHAR const ips32_keyname[15] = {
+    'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
+    '3', '2', 0 };
+static WCHAR const progid_keyname[7] = {
+    'P', 'r', 'o', 'g', 'I', 'D', 0 };
+static WCHAR const viprogid_keyname[25] = {
+    'V', 'e', 'r', 's', 'i', 'o', 'n', 'I', 'n', 'd', 'e', 'p',
+    'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D',
+    0 };
+static char const tmodel_valuename[] = "ThreadingModel";
+
+/***********************************************************************
+ *		static helper functions
+ */
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid);
+static LONG register_key_defvalueW(HKEY base, WCHAR const *name,
+				   WCHAR const *value);
+static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
+				   char const *value);
+static LONG register_progid(WCHAR const *clsid,
+			    char const *progid, char const *curver_progid,
+			    char const *name, char const *extra);
+static LONG recursive_delete_key(HKEY key);
+static LONG recursive_delete_keyA(HKEY base, char const *name);
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name);
+
+/***********************************************************************
+ *		register_interfaces
+ */
+static HRESULT register_interfaces(struct regsvr_interface const *list)
+{
+    LONG res = ERROR_SUCCESS;
+    HKEY interface_key;
+
+    res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0,
+			  KEY_READ | KEY_WRITE, NULL, &interface_key, NULL);
+    if (res != ERROR_SUCCESS) goto error_return;
+
+    for (; res == ERROR_SUCCESS && list->iid; ++list) {
+	WCHAR buf[39];
+	HKEY iid_key;
+
+	StringFromGUID2(list->iid, buf, 39);
+	res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0,
+			      KEY_READ | KEY_WRITE, NULL, &iid_key, NULL);
+	if (res != ERROR_SUCCESS) goto error_close_interface_key;
+
+	if (list->name) {
+	    res = RegSetValueExA(iid_key, NULL, 0, REG_SZ,
+				 (CONST BYTE*)(list->name),
+				 strlen(list->name) + 1);
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+	}
+
+	if (list->base_iid) {
+	    register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+	}
+
+	if (0 <= list->num_methods) {
+	    static WCHAR const fmt[3] = { '%', 'd', 0 };
+	    HKEY key;
+
+	    res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0,
+				  KEY_READ | KEY_WRITE, NULL, &key, NULL);
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+
+	    wsprintfW(buf, fmt, list->num_methods);
+	    res = RegSetValueExW(key, NULL, 0, REG_SZ,
+				 (CONST BYTE*)buf,
+				 (lstrlenW(buf) + 1) * sizeof(WCHAR));
+	    RegCloseKey(key);
+
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+	}
+
+	if (list->ps_clsid) {
+	    register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+	}
+
+	if (list->ps_clsid32) {
+	    register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
+	    if (res != ERROR_SUCCESS) goto error_close_iid_key;
+	}
+
+    error_close_iid_key:
+	RegCloseKey(iid_key);
+    }
+
+error_close_interface_key:
+    RegCloseKey(interface_key);
+error_return:
+    return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ *		unregister_interfaces
+ */
+static HRESULT unregister_interfaces(struct regsvr_interface const *list)
+{
+    LONG res = ERROR_SUCCESS;
+    HKEY interface_key;
+
+    res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0,
+			KEY_READ | KEY_WRITE, &interface_key);
+    if (res == ERROR_FILE_NOT_FOUND) return S_OK;
+    if (res != ERROR_SUCCESS) goto error_return;
+
+    for (; res == ERROR_SUCCESS && list->iid; ++list) {
+	WCHAR buf[39];
+
+	StringFromGUID2(list->iid, buf, 39);
+	res = recursive_delete_keyW(interface_key, buf);
+    }
+
+    RegCloseKey(interface_key);
+error_return:
+    return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ *		register_coclasses
+ */
+static HRESULT register_coclasses(struct regsvr_coclass const *list)
+{
+    LONG res = ERROR_SUCCESS;
+    HKEY coclass_key;
+
+    res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0,
+			  KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL);
+    if (res != ERROR_SUCCESS) goto error_return;
+
+    for (; res == ERROR_SUCCESS && list->clsid; ++list) {
+	WCHAR buf[39];
+	HKEY clsid_key;
+
+	StringFromGUID2(list->clsid, buf, 39);
+	res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0,
+			      KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL);
+	if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+
+	if (list->name) {
+	    res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ,
+				 (CONST BYTE*)(list->name),
+				 strlen(list->name) + 1);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+	}
+
+	if (list->ips) {
+	    res = register_key_defvalueA(clsid_key, ips_keyname, list->ips);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+	}
+
+	if (list->ips32) {
+	    HKEY ips32_key;
+
+	    res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0,
+				  KEY_READ | KEY_WRITE, NULL,
+				  &ips32_key, NULL);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+	    res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ,
+				 (CONST BYTE*)list->ips32,
+				 lstrlenA(list->ips32) + 1);
+	    if (res == ERROR_SUCCESS && list->ips32_tmodel)
+		res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ,
+				     (CONST BYTE*)list->ips32_tmodel,
+				     strlen(list->ips32_tmodel) + 1);
+	    RegCloseKey(ips32_key);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+	}
+
+	if (list->progid) {
+	    res = register_key_defvalueA(clsid_key, progid_keyname,
+					 list->progid);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+	    res = register_progid(buf, list->progid, NULL,
+				  list->name, list->progid_extra);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+	}
+
+	if (list->viprogid) {
+	    res = register_key_defvalueA(clsid_key, viprogid_keyname,
+					 list->viprogid);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+	    res = register_progid(buf, list->viprogid, list->progid,
+				  list->name, list->progid_extra);
+	    if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+	}
+
+    error_close_clsid_key:
+	RegCloseKey(clsid_key);
+    }
+
+error_close_coclass_key:
+    RegCloseKey(coclass_key);
+error_return:
+    return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ *		unregister_coclasses
+ */
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
+{
+    LONG res = ERROR_SUCCESS;
+    HKEY coclass_key;
+
+    res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0,
+			KEY_READ | KEY_WRITE, &coclass_key);
+    if (res == ERROR_FILE_NOT_FOUND) return S_OK;
+    if (res != ERROR_SUCCESS) goto error_return;
+
+    for (; res == ERROR_SUCCESS && list->clsid; ++list) {
+	WCHAR buf[39];
+
+	StringFromGUID2(list->clsid, buf, 39);
+	res = recursive_delete_keyW(coclass_key, buf);
+	if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+
+	if (list->progid) {
+	    res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid);
+	    if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+	}
+
+	if (list->viprogid) {
+	    res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->viprogid);
+	    if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+	}
+    }
+
+error_close_coclass_key:
+    RegCloseKey(coclass_key);
+error_return:
+    return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ *		regsvr_key_guid
+ */
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
+{
+    WCHAR buf[39];
+
+    StringFromGUID2(guid, buf, 39);
+    return register_key_defvalueW(base, name, buf);
+}
+
+/***********************************************************************
+ *		regsvr_key_defvalueW
+ */
+static LONG register_key_defvalueW(
+    HKEY base,
+    WCHAR const *name,
+    WCHAR const *value)
+{
+    LONG res;
+    HKEY key;
+
+    res = RegCreateKeyExW(base, name, 0, NULL, 0,
+			  KEY_READ | KEY_WRITE, NULL, &key, NULL);
+    if (res != ERROR_SUCCESS) return res;
+    res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
+			 (lstrlenW(value) + 1) * sizeof(WCHAR));
+    RegCloseKey(key);
+    return res;
+}
+
+/***********************************************************************
+ *		regsvr_key_defvalueA
+ */
+static LONG register_key_defvalueA(
+    HKEY base,
+    WCHAR const *name,
+    char const *value)
+{
+    LONG res;
+    HKEY key;
+
+    res = RegCreateKeyExW(base, name, 0, NULL, 0,
+			  KEY_READ | KEY_WRITE, NULL, &key, NULL);
+    if (res != ERROR_SUCCESS) return res;
+    res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
+			 lstrlenA(value) + 1);
+    RegCloseKey(key);
+    return res;
+}
+
+/***********************************************************************
+ *		regsvr_progid
+ */
+static LONG register_progid(
+    WCHAR const *clsid,
+    char const *progid,
+    char const *curver_progid,
+    char const *name,
+    char const *extra)
+{
+    LONG res;
+    HKEY progid_key;
+
+    res = RegCreateKeyExA(HKEY_CLASSES_ROOT, progid, 0,
+			  NULL, 0, KEY_READ | KEY_WRITE, NULL,
+			  &progid_key, NULL);
+    if (res != ERROR_SUCCESS) return res;
+
+    if (name) {
+	res = RegSetValueExA(progid_key, NULL, 0, REG_SZ,
+			     (CONST BYTE*)name, strlen(name) + 1);
+	if (res != ERROR_SUCCESS) goto error_close_progid_key;
+    }
+
+    if (clsid) {
+	res = register_key_defvalueW(progid_key, clsid_keyname, clsid);
+	if (res != ERROR_SUCCESS) goto error_close_progid_key;
+    }
+
+    if (curver_progid) {
+	res = register_key_defvalueA(progid_key, curver_keyname,
+				     curver_progid);
+	if (res != ERROR_SUCCESS) goto error_close_progid_key;
+    }
+
+    if (extra) {
+	HKEY extra_key;
+
+	res = RegCreateKeyExA(progid_key, extra, 0,
+			      NULL, 0, KEY_READ | KEY_WRITE, NULL,
+			      &extra_key, NULL);
+	if (res == ERROR_SUCCESS)
+	    RegCloseKey(extra_key);
+    }
+
+error_close_progid_key:
+    RegCloseKey(progid_key);
+    return res;
+}
+
+/***********************************************************************
+ *		recursive_delete_key
+ */
+static LONG recursive_delete_key(HKEY key)
+{
+    LONG res;
+    WCHAR subkey_name[MAX_PATH];
+    DWORD cName;
+    HKEY subkey;
+
+    for (;;) {
+	cName = sizeof(subkey_name) / sizeof(WCHAR);
+	res = RegEnumKeyExW(key, 0, subkey_name, &cName,
+			    NULL, NULL, NULL, NULL);
+	if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) {
+	    res = ERROR_SUCCESS; /* presumably we're done enumerating */
+	    break;
+	}
+	res = RegOpenKeyExW(key, subkey_name, 0,
+			    KEY_READ | KEY_WRITE, &subkey);
+	if (res == ERROR_FILE_NOT_FOUND) continue;
+	if (res != ERROR_SUCCESS) break;
+
+	res = recursive_delete_key(subkey);
+	RegCloseKey(subkey);
+	if (res != ERROR_SUCCESS) break;
+    }
+
+    if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0);
+    return res;
+}
+
+/***********************************************************************
+ *		recursive_delete_keyA
+ */
+static LONG recursive_delete_keyA(HKEY base, char const *name)
+{
+    LONG res;
+    HKEY key;
+
+    res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key);
+    if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
+    if (res != ERROR_SUCCESS) return res;
+    res = recursive_delete_key(key);
+    RegCloseKey(key);
+    return res;
+}
+
+/***********************************************************************
+ *		recursive_delete_keyW
+ */
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
+{
+    LONG res;
+    HKEY key;
+
+    res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key);
+    if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
+    if (res != ERROR_SUCCESS) return res;
+    res = recursive_delete_key(key);
+    RegCloseKey(key);
+    return res;
+}
+
+/***********************************************************************
+ *		coclass list
+ */
+static struct regsvr_coclass const coclass_list[] = {
+    {   &CLSID_AMMultiMediaStream,
+	"ActiveMovie MultiMedia Stream",
+	NULL,
+	"amstream.dll",
+	"Both"
+    },
+    { NULL }			/* list terminator */
+};
+
+/***********************************************************************
+ *		interface list
+ */
+
+static struct regsvr_interface const interface_list[] = {
+    { NULL }			/* list terminator */
+};
+
+/***********************************************************************
+ *		DllRegisterServer (AMSTREAM.@)
+ */
+HRESULT WINAPI AMSTREAM_DllRegisterServer(void)
+{
+    HRESULT hr;
+
+    TRACE("\n");
+
+    hr = register_coclasses(coclass_list);
+    if (SUCCEEDED(hr))
+	hr = register_interfaces(interface_list);
+    return hr;
+}
+
+/***********************************************************************
+ *		DllUnregisterServer (AMSTREAM.@)
+ */
+HRESULT WINAPI AMSTREAM_DllUnregisterServer(void)
+{
+    HRESULT hr;
+
+    TRACE("\n");
+
+    hr = unregister_coclasses(coclass_list);
+    if (SUCCEEDED(hr))
+	hr = unregister_interfaces(interface_list);
+    return hr;
+}
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/version.rc	2004-03-01 21:21:13.000000000 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2004 Christian Costa
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define WINE_FILEDESCRIPTION_STR "Wine AMStream dll"
+#define WINE_FILENAME_STR "amstream.dll"
+#define WINE_FILEVERSION 6,3,1,881
+#define WINE_FILEVERSION_STR "6.3.1.881"
+#define WINE_PRODUCTVERSION 6,3,1,881
+#define WINE_PRODUCTVERSION_STR "6.3"
+#define WINE_PRODUCTNAME_STR "DirectShow"
+
+#include "wine/wine_common_ver.rc"
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ dlls/amstream/Makefile.in	2004-03-03 23:17:52.000000000 +0000
@@ -0,0 +1,18 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = amstream.dll
+IMPORTS   = ole32 oleaut32 advapi32 kernel32 user32
+EXTRALIBS = -luuid $(LIBUNICODE)
+
+C_SRCS = \
+	amstream.c \
+	main.c \
+	regsvr.c
+
+RC_SRCS = version.rc
+
+ at MAKE_DLL_RULES@
+
+### Dependencies:


More information about the wine-patches mailing list