2 * Header file for Wine's strmbase implementation
4 * Copyright 2003 Robert Shearman
5 * Copyright 2010 Aric Stewart, CodeWeavers
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 HRESULT WINAPI
CopyMediaType(AM_MEDIA_TYPE
* pDest
, const AM_MEDIA_TYPE
*pSrc
);
23 void WINAPI
FreeMediaType(AM_MEDIA_TYPE
* pMediaType
);
24 AM_MEDIA_TYPE
* WINAPI
CreateMediaType(AM_MEDIA_TYPE
const * pSrc
);
25 void WINAPI
DeleteMediaType(AM_MEDIA_TYPE
* pMediaType
);
29 typedef struct BasePin
31 const struct IPinVtbl
* lpVtbl
;
33 LPCRITICAL_SECTION pCritSec
;
36 AM_MEDIA_TYPE mtCurrent
;
37 REFERENCE_TIME tStart
;
41 const struct BasePinFuncTable
* pFuncsTable
;
44 typedef HRESULT (WINAPI
*BasePin_CheckMediaType
)(BasePin
*This
, const AM_MEDIA_TYPE
*pmt
);
45 typedef HRESULT (WINAPI
*BasePin_AttemptConnection
)(BasePin
*This
, IPin
*pReceivePin
, const AM_MEDIA_TYPE
*pmt
);
46 typedef LONG (WINAPI
*BasePin_GetMediaTypeVersion
)(BasePin
*This
);
47 typedef HRESULT (WINAPI
*BasePin_GetMediaType
)(BasePin
*This
, int iPosition
, AM_MEDIA_TYPE
*amt
);
49 typedef struct BasePinFuncTable
{
50 /* Required for Input Pins*/
51 BasePin_CheckMediaType pfnCheckMediaType
;
52 /* Required for Output Pins*/
53 BasePin_AttemptConnection pfnAttemptConnection
;
54 /* Required for BasePinImpl_EnumMediaTypes */
55 BasePin_GetMediaTypeVersion pfnGetMediaTypeVersion
;
56 BasePin_GetMediaType pfnGetMediaType
;
59 typedef struct BaseOutputPin
61 /* inheritance C style! */
63 IMemInputPin
* pMemInputPin
;
65 const struct BaseOutputPinFuncTable
* pFuncsTable
;
68 typedef HRESULT (WINAPI
*BaseOutputPin_DecideBufferSize
)(BaseOutputPin
*This
, IMemAllocator
*pAlloc
, ALLOCATOR_PROPERTIES
*ppropInputRequest
);
69 typedef HRESULT (WINAPI
*BaseOutputPin_DecideAllocator
)(BaseOutputPin
*This
, IMemInputPin
*pPin
, IMemAllocator
**pAlloc
);
70 typedef HRESULT (WINAPI
*BaseOutputPin_BreakConnect
)(BaseOutputPin
* This
);
72 typedef struct BaseOutputPinFuncTable
{
73 /* Required for BaseOutputPinImpl_DecideAllocator */
74 BaseOutputPin_DecideBufferSize pfnDecideBufferSize
;
75 /* Required for BaseOutputPinImpl_AttemptConnection */
76 BaseOutputPin_DecideAllocator pfnDecideAllocator
;
77 BaseOutputPin_BreakConnect pfnBreakConnect
;
78 } BaseOutputPinFuncTable
;
80 typedef struct BaseInputPin
82 /* inheritance C style! */
85 const IMemInputPinVtbl
* lpVtblMemInput
;
86 IMemAllocator
* pAllocator
;
87 BOOL flushing
, end_of_stream
;
88 IMemAllocator
*preferred_allocator
;
90 const struct BaseInputPinFuncTable
* pFuncsTable
;
93 typedef HRESULT (WINAPI
*BaseInputPin_Receive
)(BaseInputPin
*This
, IMediaSample
*pSample
);
95 typedef struct BaseInputPinFuncTable
{
97 BaseInputPin_Receive pfnReceive
;
98 } BaseInputPinFuncTable
;
101 HRESULT WINAPI
BasePinImpl_GetMediaType(BasePin
*This
, int iPosition
, AM_MEDIA_TYPE
*pmt
);
102 LONG WINAPI
BasePinImpl_GetMediaTypeVersion(BasePin
*This
);
103 ULONG WINAPI
BasePinImpl_AddRef(IPin
* iface
);
104 HRESULT WINAPI
BasePinImpl_Disconnect(IPin
* iface
);
105 HRESULT WINAPI
BasePinImpl_ConnectedTo(IPin
* iface
, IPin
** ppPin
);
106 HRESULT WINAPI
BasePinImpl_ConnectionMediaType(IPin
* iface
, AM_MEDIA_TYPE
* pmt
);
107 HRESULT WINAPI
BasePinImpl_QueryPinInfo(IPin
* iface
, PIN_INFO
* pInfo
);
108 HRESULT WINAPI
BasePinImpl_QueryDirection(IPin
* iface
, PIN_DIRECTION
* pPinDir
);
109 HRESULT WINAPI
BasePinImpl_QueryId(IPin
* iface
, LPWSTR
* Id
);
110 HRESULT WINAPI
BasePinImpl_QueryAccept(IPin
* iface
, const AM_MEDIA_TYPE
* pmt
);
111 HRESULT WINAPI
BasePinImpl_EnumMediaTypes(IPin
* iface
, IEnumMediaTypes
** ppEnum
);
112 HRESULT WINAPI
BasePinImpl_QueryInternalConnections(IPin
* iface
, IPin
** apPin
, ULONG
* cPin
);
113 HRESULT WINAPI
BasePinImpl_NewSegment(IPin
* iface
, REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
);
115 /* Base Output Pin */
116 HRESULT WINAPI
BaseOutputPinImpl_QueryInterface(IPin
* iface
, REFIID riid
, LPVOID
* ppv
);
117 ULONG WINAPI
BaseOutputPinImpl_Release(IPin
* iface
);
118 HRESULT WINAPI
BaseOutputPinImpl_Connect(IPin
* iface
, IPin
* pReceivePin
, const AM_MEDIA_TYPE
* pmt
);
119 HRESULT WINAPI
BaseOutputPinImpl_ReceiveConnection(IPin
* iface
, IPin
* pReceivePin
, const AM_MEDIA_TYPE
* pmt
);
120 HRESULT WINAPI
BaseOutputPinImpl_Disconnect(IPin
* iface
);
121 HRESULT WINAPI
BaseOutputPinImpl_EndOfStream(IPin
* iface
);
122 HRESULT WINAPI
BaseOutputPinImpl_BeginFlush(IPin
* iface
);
123 HRESULT WINAPI
BaseOutputPinImpl_EndFlush(IPin
* iface
);
125 HRESULT WINAPI
BaseOutputPinImpl_GetDeliveryBuffer(BaseOutputPin
* This
, IMediaSample
** ppSample
, REFERENCE_TIME
* tStart
, REFERENCE_TIME
* tStop
, DWORD dwFlags
);
126 HRESULT WINAPI
BaseOutputPinImpl_Deliver(BaseOutputPin
* This
, IMediaSample
* pSample
);
127 HRESULT WINAPI
BaseOutputPinImpl_BreakConnect(BaseOutputPin
* This
);
128 HRESULT WINAPI
BaseOutputPinImpl_Active(BaseOutputPin
* This
);
129 HRESULT WINAPI
BaseOutputPinImpl_Inactive(BaseOutputPin
* This
);
130 HRESULT WINAPI
BaseOutputPinImpl_InitAllocator(BaseOutputPin
*This
, IMemAllocator
**pMemAlloc
);
131 HRESULT WINAPI
BaseOutputPinImpl_DecideAllocator(BaseOutputPin
*This
, IMemInputPin
*pPin
, IMemAllocator
**pAlloc
);
132 HRESULT WINAPI
BaseOutputPinImpl_AttemptConnection(BasePin
*This
, IPin
* pReceivePin
, const AM_MEDIA_TYPE
* pmt
);
134 HRESULT WINAPI
BaseOutputPin_Construct(const IPinVtbl
*OutputPin_Vtbl
, LONG outputpin_size
, const PIN_INFO
* pPinInfo
, const BasePinFuncTable
* pBaseFuncsTable
, const BaseOutputPinFuncTable
* pBaseOutputFuncsTable
, LPCRITICAL_SECTION pCritSec
, IPin
** ppPin
);
137 HRESULT WINAPI
BaseInputPinImpl_QueryInterface(IPin
* iface
, REFIID riid
, LPVOID
* ppv
);
138 ULONG WINAPI
BaseInputPinImpl_Release(IPin
* iface
);
139 HRESULT WINAPI
BaseInputPinImpl_Connect(IPin
* iface
, IPin
* pConnector
, const AM_MEDIA_TYPE
* pmt
);
140 HRESULT WINAPI
BaseInputPinImpl_ReceiveConnection(IPin
* iface
, IPin
* pReceivePin
, const AM_MEDIA_TYPE
* pmt
);
141 HRESULT WINAPI
BaseInputPinImpl_QueryAccept(IPin
* iface
, const AM_MEDIA_TYPE
* pmt
);
142 HRESULT WINAPI
BaseInputPinImpl_EndOfStream(IPin
* iface
);
143 HRESULT WINAPI
BaseInputPinImpl_BeginFlush(IPin
* iface
);
144 HRESULT WINAPI
BaseInputPinImpl_EndFlush(IPin
* iface
);
145 HRESULT WINAPI
BaseInputPinImpl_NewSegment(IPin
* iface
, REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
);
147 HRESULT
BaseInputPin_Construct(const IPinVtbl
*InputPin_Vtbl
, const PIN_INFO
* pPinInfo
, const BasePinFuncTable
* pBaseFuncsTable
, const BaseInputPinFuncTable
* pBaseInputFuncsTable
, LPCRITICAL_SECTION pCritSec
, IMemAllocator
*, IPin
** ppPin
);
149 typedef struct BaseFilter
151 const struct IBaseFilterVtbl
*lpVtbl
;
153 CRITICAL_SECTION csFilter
;
156 REFERENCE_TIME rtStreamStart
;
157 IReferenceClock
* pClock
;
158 FILTER_INFO filterInfo
;
162 const struct BaseFilterFuncTable
* pFuncsTable
;
165 typedef IPin
* (WINAPI
*BaseFilter_GetPin
)(BaseFilter
* iface
, int iPosition
);
166 typedef LONG (WINAPI
*BaseFilter_GetPinCount
)(BaseFilter
* iface
);
167 typedef LONG (WINAPI
*BaseFilter_GetPinVersion
)(BaseFilter
* iface
);
169 typedef struct BaseFilterFuncTable
{
171 BaseFilter_GetPin pfnGetPin
;
172 BaseFilter_GetPinCount pfnGetPinCount
;
173 } BaseFilterFuncTable
;
175 HRESULT WINAPI
BaseFilterImpl_QueryInterface(IBaseFilter
* iface
, REFIID riid
, LPVOID
* ppv
);
176 ULONG WINAPI
BaseFilterImpl_AddRef(IBaseFilter
* iface
);
177 ULONG WINAPI
BaseFilterImpl_Release(IBaseFilter
* iface
);
178 HRESULT WINAPI
BaseFilterImpl_GetClassID(IBaseFilter
* iface
, CLSID
* pClsid
);
179 HRESULT WINAPI
BaseFilterImpl_GetState(IBaseFilter
* iface
, DWORD dwMilliSecsTimeout
, FILTER_STATE
*pState
);
180 HRESULT WINAPI
BaseFilterImpl_SetSyncSource(IBaseFilter
* iface
, IReferenceClock
*pClock
);
181 HRESULT WINAPI
BaseFilterImpl_GetSyncSource(IBaseFilter
* iface
, IReferenceClock
**ppClock
);
182 HRESULT WINAPI
BaseFilterImpl_EnumPins(IBaseFilter
* iface
, IEnumPins
**ppEnum
);
183 HRESULT WINAPI
BaseFilterImpl_QueryFilterInfo(IBaseFilter
* iface
, FILTER_INFO
*pInfo
);
184 HRESULT WINAPI
BaseFilterImpl_JoinFilterGraph(IBaseFilter
* iface
, IFilterGraph
*pGraph
, LPCWSTR pName
);
185 HRESULT WINAPI
BaseFilterImpl_QueryVendorInfo(IBaseFilter
* iface
, LPWSTR
*pVendorInfo
);
187 LONG WINAPI
BaseFilterImpl_GetPinVersion(BaseFilter
* This
);
188 VOID WINAPI
BaseFilterImpl_IncrementPinVersion(BaseFilter
* This
);
190 HRESULT WINAPI
BaseFilter_Init(BaseFilter
* This
, const IBaseFilterVtbl
*Vtbl
, const CLSID
*pClsid
, DWORD_PTR DebugInfo
, const BaseFilterFuncTable
* pBaseFuncsTable
);
193 HRESULT WINAPI
EnumMediaTypes_Construct(BasePin
*iface
, BasePin_GetMediaType enumFunc
, BasePin_GetMediaTypeVersion versionFunc
, IEnumMediaTypes
** ppEnum
);
195 HRESULT WINAPI
EnumPins_Construct(BaseFilter
*base
, BaseFilter_GetPin receive_pin
, BaseFilter_GetPinCount receive_pincount
, BaseFilter_GetPinVersion receive_version
, IEnumPins
** ppEnum
);
197 /* Quality Control */
198 typedef struct QualityControlImpl
{
199 const IQualityControlVtbl
*lpVtbl
;
202 IQualityControl
*tonotify
;
205 IReferenceClock
*clock
;
206 REFERENCE_TIME last_in_time
, last_left
, avg_duration
, avg_pt
, avg_render
, start
, stop
;
207 REFERENCE_TIME current_jitter
, current_rstart
, current_rstop
, clockstart
;
209 LONG64 rendered
, dropped
;
210 BOOL qos_handled
, is_dropped
;
211 } QualityControlImpl
;
213 void QualityControlImpl_init(QualityControlImpl
*This
, IPin
*input
, IBaseFilter
*self
);
214 HRESULT WINAPI
QualityControlImpl_QueryInterface(IQualityControl
*iface
, REFIID riid
, void **ppv
);
215 ULONG WINAPI
QualityControlImpl_AddRef(IQualityControl
*iface
);
216 ULONG WINAPI
QualityControlImpl_Release(IQualityControl
*iface
);
217 HRESULT WINAPI
QualityControlImpl_Notify(IQualityControl
*iface
, IBaseFilter
*sender
, Quality qm
);
218 HRESULT WINAPI
QualityControlImpl_SetSink(IQualityControl
*iface
, IQualityControl
*tonotify
);
220 void QualityControlRender_Start(QualityControlImpl
*This
, REFERENCE_TIME tStart
);
221 void QualityControlRender_SetClock(QualityControlImpl
*This
, IReferenceClock
*clock
);
222 HRESULT
QualityControlRender_WaitFor(QualityControlImpl
*This
, IMediaSample
*sample
, HANDLE ev
);
223 void QualityControlRender_DoQOS(QualityControlImpl
*priv
);
224 void QualityControlRender_BeginRender(QualityControlImpl
*This
);
225 void QualityControlRender_EndRender(QualityControlImpl
*This
);
227 /* Transform Filter */
228 typedef struct TransformFilter
236 const struct TransformFilterFuncTable
* pFuncsTable
;
237 QualityControlImpl qcimpl
;
240 typedef HRESULT (WINAPI
*TransformFilter_DecideBufferSize
) (TransformFilter
*iface
, IMemAllocator
*pAlloc
, ALLOCATOR_PROPERTIES
*ppropInputRequest
);
241 typedef HRESULT (WINAPI
*TransformFilter_StartStreaming
) (TransformFilter
*iface
);
242 typedef HRESULT (WINAPI
*TransformFilter_StopStreaming
) (TransformFilter
*iface
);
243 typedef HRESULT (WINAPI
*TransformFilter_Receive
) (TransformFilter
* iface
, IMediaSample
* pIn
);
244 typedef HRESULT (WINAPI
*TransformFilter_CompleteConnect
) (TransformFilter
*iface
, PIN_DIRECTION dir
, IPin
*pPin
);
245 typedef HRESULT (WINAPI
*TransformFilter_BreakConnect
) (TransformFilter
*iface
, PIN_DIRECTION dir
);
246 typedef HRESULT (WINAPI
*TransformFilter_SetMediaType
) (TransformFilter
*iface
, PIN_DIRECTION dir
, const AM_MEDIA_TYPE
*pMediaType
);
247 typedef HRESULT (WINAPI
*TransformFilter_CheckInputType
) (TransformFilter
*iface
, const AM_MEDIA_TYPE
*pMediaType
);
248 typedef HRESULT (WINAPI
*TransformFilter_EndOfStream
) (TransformFilter
*iface
);
249 typedef HRESULT (WINAPI
*TransformFilter_BeginFlush
) (TransformFilter
*iface
);
250 typedef HRESULT (WINAPI
*TransformFilter_EndFlush
) (TransformFilter
*iface
);
251 typedef HRESULT (WINAPI
*TransformFilter_NewSegment
) (TransformFilter
*iface
,
252 REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
);
253 typedef HRESULT (WINAPI
*TransformFilter_Notify
) (TransformFilter
*iface
, IBaseFilter
*sender
, Quality qm
);
255 typedef struct TransformFilterFuncTable
{
257 TransformFilter_DecideBufferSize pfnDecideBufferSize
;
259 TransformFilter_StartStreaming pfnStartStreaming
;
260 TransformFilter_Receive pfnReceive
;
261 TransformFilter_StopStreaming pfnStopStreaming
;
262 TransformFilter_CheckInputType pfnCheckInputType
;
263 TransformFilter_SetMediaType pfnSetMediaType
;
264 TransformFilter_CompleteConnect pfnCompleteConnect
;
265 TransformFilter_BreakConnect pfnBreakConnect
;
266 TransformFilter_EndOfStream pfnEndOfStream
;
267 TransformFilter_BeginFlush pfnBeginFlush
;
268 TransformFilter_EndFlush pfnEndFlush
;
269 TransformFilter_NewSegment pfnNewSegment
;
270 TransformFilter_Notify pfnNotify
;
271 } TransformFilterFuncTable
;
273 HRESULT WINAPI
TransformFilterImpl_QueryInterface(IBaseFilter
* iface
, REFIID riid
, LPVOID
* ppv
);
274 ULONG WINAPI
TransformFilterImpl_Release(IBaseFilter
* iface
);
275 HRESULT WINAPI
TransformFilterImpl_Stop(IBaseFilter
* iface
);
276 HRESULT WINAPI
TransformFilterImpl_Pause(IBaseFilter
* iface
);
277 HRESULT WINAPI
TransformFilterImpl_Run(IBaseFilter
* iface
, REFERENCE_TIME tStart
);
278 HRESULT WINAPI
TransformFilterImpl_FindPin(IBaseFilter
* iface
, LPCWSTR Id
, IPin
**ppPin
);
280 HRESULT
TransformFilter_Construct( const IBaseFilterVtbl
*filterVtbl
, LONG filter_size
, const CLSID
* pClsid
, const TransformFilterFuncTable
* pFuncsTable
, IBaseFilter
** ppTransformFilter
);
283 typedef HRESULT (WINAPI
*SourceSeeking_ChangeRate
)(IMediaSeeking
*iface
);
284 typedef HRESULT (WINAPI
*SourceSeeking_ChangeStart
)(IMediaSeeking
*iface
);
285 typedef HRESULT (WINAPI
*SourceSeeking_ChangeStop
)(IMediaSeeking
*iface
);
287 typedef struct SourceSeeking
289 const IMediaSeekingVtbl
* lpVtbl
;
292 SourceSeeking_ChangeStop fnChangeStop
;
293 SourceSeeking_ChangeStart fnChangeStart
;
294 SourceSeeking_ChangeRate fnChangeRate
;
295 DWORD dwCapabilities
;
297 LONGLONG llCurrent
, llStop
, llDuration
;
299 PCRITICAL_SECTION crst
;
302 HRESULT
SourceSeeking_Init(SourceSeeking
*pSeeking
, const IMediaSeekingVtbl
*Vtbl
, SourceSeeking_ChangeStop fnChangeStop
, SourceSeeking_ChangeStart fnChangeStart
, SourceSeeking_ChangeRate fnChangeRate
, PCRITICAL_SECTION crit_sect
);
304 HRESULT WINAPI
SourceSeekingImpl_GetCapabilities(IMediaSeeking
* iface
, DWORD
* pCapabilities
);
305 HRESULT WINAPI
SourceSeekingImpl_CheckCapabilities(IMediaSeeking
* iface
, DWORD
* pCapabilities
);
306 HRESULT WINAPI
SourceSeekingImpl_IsFormatSupported(IMediaSeeking
* iface
, const GUID
* pFormat
);
307 HRESULT WINAPI
SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking
* iface
, GUID
* pFormat
);
308 HRESULT WINAPI
SourceSeekingImpl_GetTimeFormat(IMediaSeeking
* iface
, GUID
* pFormat
);
309 HRESULT WINAPI
SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking
* iface
, const GUID
* pFormat
);
310 HRESULT WINAPI
SourceSeekingImpl_SetTimeFormat(IMediaSeeking
* iface
, const GUID
* pFormat
);
311 HRESULT WINAPI
SourceSeekingImpl_GetDuration(IMediaSeeking
* iface
, LONGLONG
* pDuration
);
312 HRESULT WINAPI
SourceSeekingImpl_GetStopPosition(IMediaSeeking
* iface
, LONGLONG
* pStop
);
313 HRESULT WINAPI
SourceSeekingImpl_GetCurrentPosition(IMediaSeeking
* iface
, LONGLONG
* pCurrent
);
314 HRESULT WINAPI
SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking
* iface
, LONGLONG
* pTarget
, const GUID
* pTargetFormat
, LONGLONG Source
, const GUID
* pSourceFormat
);
315 HRESULT WINAPI
SourceSeekingImpl_SetPositions(IMediaSeeking
* iface
, LONGLONG
* pCurrent
, DWORD dwCurrentFlags
, LONGLONG
* pStop
, DWORD dwStopFlags
);
316 HRESULT WINAPI
SourceSeekingImpl_GetPositions(IMediaSeeking
* iface
, LONGLONG
* pCurrent
, LONGLONG
* pStop
);
317 HRESULT WINAPI
SourceSeekingImpl_GetAvailable(IMediaSeeking
* iface
, LONGLONG
* pEarliest
, LONGLONG
* pLatest
);
318 HRESULT WINAPI
SourceSeekingImpl_SetRate(IMediaSeeking
* iface
, double dRate
);
319 HRESULT WINAPI
SourceSeekingImpl_GetRate(IMediaSeeking
* iface
, double * dRate
);
320 HRESULT WINAPI
SourceSeekingImpl_GetPreroll(IMediaSeeking
* iface
, LONGLONG
* pPreroll
);
322 /* Filter Registration */
324 typedef REGPINTYPES AMOVIESETUP_MEDIATYPE
;
325 typedef REGFILTERPINS AMOVIESETUP_PIN
;
327 typedef struct AMOVIESETUP_FILTER
{
332 const AMOVIESETUP_PIN
*pPin
;
333 } AMOVIESETUP_FILTER
, *LPAMOVIESETUP_FILTER
;
335 typedef IUnknown
*(CALLBACK
*LPFNNewCOMObject
)(LPUNKNOWN pUnkOuter
, HRESULT
*phr
);
336 typedef void (CALLBACK
*LPFNInitRoutine
)(BOOL bLoading
, const CLSID
*rclsid
);
338 typedef struct tagFactoryTemplate
{
340 const CLSID
*m_ClsID
;
341 LPFNNewCOMObject m_lpfnNew
;
342 LPFNInitRoutine m_lpfnInit
;
343 const AMOVIESETUP_FILTER
*m_pAMovieSetup_Filter
;
346 HRESULT WINAPI
AMovieDllRegisterServer2(BOOL bRegister
);
347 HRESULT WINAPI
AMovieSetupRegisterFilter2(const AMOVIESETUP_FILTER
*pFilter
, IFilterMapper2
*pIFM2
, BOOL bRegister
);
350 typedef struct tagOutputQueue
{
351 CRITICAL_SECTION csQueue
;
353 BaseOutputPin
* pInputPin
;
356 HANDLE hProcessQueue
;
363 struct list
*SampleList
;
365 const struct OutputQueueFuncTable
* pFuncsTable
;
368 typedef DWORD (WINAPI
*OutputQueue_ThreadProc
)(OutputQueue
*This
);
370 typedef struct OutputQueueFuncTable
372 OutputQueue_ThreadProc pfnThreadProc
;
373 } OutputQueueFuncTable
;
375 HRESULT WINAPI
OutputQueue_Construct( BaseOutputPin
*pInputPin
, BOOL bAuto
,
376 BOOL bQueue
, LONG lBatchSize
, BOOL bBatchExact
, DWORD dwPriority
,
377 const OutputQueueFuncTable
* pFuncsTable
, OutputQueue
**ppOutputQueue
);
378 HRESULT WINAPI
OutputQueue_Destroy(OutputQueue
*pOutputQueue
);
379 HRESULT WINAPI
OutputQueue_ReceiveMultiple(OutputQueue
*pOutputQueue
, IMediaSample
**ppSamples
, LONG nSamples
, LONG
*nSamplesProcessed
);
380 HRESULT WINAPI
OutputQueue_Receive(OutputQueue
*pOutputQueue
, IMediaSample
*pSample
);
381 VOID WINAPI
OutputQueue_EOS(OutputQueue
*pOutputQueue
);
382 VOID WINAPI
OutputQueue_SendAnyway(OutputQueue
*pOutputQueue
);
383 DWORD WINAPI
OutputQueueImpl_ThreadProc(OutputQueue
*pOutputQueue
);
386 BOOL WINAPI
STRMBASE_DllMain(HINSTANCE hInstDLL
, DWORD fdwReason
, LPVOID lpv
);
387 HRESULT WINAPI
STRMBASE_DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
);
388 HRESULT WINAPI
STRMBASE_DllCanUnloadNow(void);