2 * Implementation of IMediaStream Interface
4 * Copyright 2005 Christian Costa
6 * This file contains the (internal) driver registration functions,
7 * driver enumeration APIs and DirectDraw creation functions.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 #include "wine/debug.h"
31 #include "amstream_private.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(amstream
);
39 IMultiMediaStream
* Parent
;
41 STREAM_TYPE StreamType
;
44 static const struct IMediaStreamVtbl MediaStream_Vtbl
;
46 HRESULT
MediaStream_create(IMultiMediaStream
* Parent
, const MSPID
* pPurposeId
, STREAM_TYPE StreamType
, IMediaStream
** ppMediaStream
)
48 IMediaStreamImpl
* object
;
50 TRACE("(%p,%p,%p)\n", Parent
, pPurposeId
, ppMediaStream
);
52 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IMediaStreamImpl
));
54 object
->lpVtbl
.lpVtbl
= &MediaStream_Vtbl
;
57 object
->Parent
= Parent
;
58 object
->PurposeId
= *pPurposeId
;
59 object
->StreamType
= StreamType
;
61 *ppMediaStream
= (IMediaStream
*)object
;
66 /*** IUnknown methods ***/
67 static HRESULT WINAPI
IMediaStreamImpl_QueryInterface(IMediaStream
* iface
, REFIID riid
, void** ppvObject
)
69 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
71 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
73 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
74 IsEqualGUID(riid
, &IID_IAMMultiMediaStream
))
76 IClassFactory_AddRef(iface
);
81 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
85 static ULONG WINAPI
IMediaStreamImpl_AddRef(IMediaStream
* iface
)
87 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
89 TRACE("(%p/%p)\n", iface
, This
);
91 return InterlockedIncrement(&This
->ref
);
94 static ULONG WINAPI
IMediaStreamImpl_Release(IMediaStream
* iface
)
96 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
97 ULONG ref
= InterlockedDecrement(&This
->ref
);
99 TRACE("(%p/%p)\n", iface
, This
);
102 HeapFree(GetProcessHeap(), 0, This
);
107 /*** IMediaStream methods ***/
108 static HRESULT WINAPI
IMediaStreamImpl_GetMultiMediaStream(IMediaStream
* iface
, IMultiMediaStream
** ppMultiMediaStream
)
110 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
112 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppMultiMediaStream
);
118 static HRESULT WINAPI
IMediaStreamImpl_GetInformation(IMediaStream
* iface
, MSPID
* pPurposeId
, STREAM_TYPE
* pType
)
120 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
122 TRACE("(%p/%p)->(%p,%p)\n", This
, iface
, pPurposeId
, pType
);
125 *pPurposeId
= This
->PurposeId
;
127 *pType
= This
->StreamType
;
132 static HRESULT WINAPI
IMediaStreamImpl_SetSameFormat(IMediaStream
* iface
, IMediaStream
* pStreamThatHasDesiredFormat
, DWORD dwFlags
)
134 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
136 FIXME("(%p/%p)->(%p,%x) stub!\n", This
, iface
, pStreamThatHasDesiredFormat
, dwFlags
);
141 static HRESULT WINAPI
IMediaStreamImpl_AllocateSample(IMediaStream
* iface
, DWORD dwFlags
, IStreamSample
** ppSample
)
143 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
145 FIXME("(%p/%p)->(%x,%p) stub!\n", This
, iface
, dwFlags
, ppSample
);
150 static HRESULT WINAPI
IMediaStreamImpl_CreateSharedSample(IMediaStream
* iface
, IStreamSample
* pExistingSample
, DWORD dwFlags
, IStreamSample
** ppSample
)
152 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
154 FIXME("(%p/%p)->(%p,%x,%p) stub!\n", This
, iface
, pExistingSample
, dwFlags
, ppSample
);
159 static HRESULT WINAPI
IMediaStreamImpl_SendEndOfStream(IMediaStream
* iface
, DWORD dwFlags
)
161 IMediaStreamImpl
*This
= (IMediaStreamImpl
*)iface
;
163 FIXME("(%p/%p)->(%x) stub!\n", This
, iface
, dwFlags
);
168 static const struct IMediaStreamVtbl MediaStream_Vtbl
=
170 IMediaStreamImpl_QueryInterface
,
171 IMediaStreamImpl_AddRef
,
172 IMediaStreamImpl_Release
,
173 IMediaStreamImpl_GetMultiMediaStream
,
174 IMediaStreamImpl_GetInformation
,
175 IMediaStreamImpl_SetSameFormat
,
176 IMediaStreamImpl_AllocateSample
,
177 IMediaStreamImpl_CreateSharedSample
,
178 IMediaStreamImpl_SendEndOfStream