ReactOS 0.4.17-dev-1071-gb2116d0
filter.c File Reference
#include "strmbase_private.h"
Include dependency graph for filter.c:

Go to the source code of this file.

Classes

struct  enum_pins
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (quartz)
 
static HRESULT enum_pins_create (struct strmbase_filter *filter, IEnumPins **out)
 
static struct enum_pins * impl_from_IEnumPins (IEnumPins *iface)
 
static HRESULT WINAPI enum_pins_QueryInterface (IEnumPins *iface, REFIID iid, void **out)
 
static ULONG WINAPI enum_pins_AddRef (IEnumPins *iface)
 
static ULONG WINAPI enum_pins_Release (IEnumPins *iface)
 
static HRESULT WINAPI enum_pins_Next (IEnumPins *iface, ULONG count, IPin **pins, ULONG *ret_count)
 
static HRESULT WINAPI enum_pins_Skip (IEnumPins *iface, ULONG count)
 
static HRESULT WINAPI enum_pins_Reset (IEnumPins *iface)
 
static HRESULT WINAPI enum_pins_Clone (IEnumPins *iface, IEnumPins **out)
 
static struct strmbase_filter * impl_from_IUnknown (IUnknown *iface)
 
static HRESULT WINAPI filter_inner_QueryInterface (IUnknown *iface, REFIID iid, void **out)
 
static ULONG WINAPI filter_inner_AddRef (IUnknown *iface)
 
static ULONG WINAPI filter_inner_Release (IUnknown *iface)
 
static struct strmbase_filter * impl_from_IBaseFilter (IBaseFilter *iface)
 
static HRESULT WINAPI filter_QueryInterface (IBaseFilter *iface, REFIID iid, void **out)
 
static ULONG WINAPI filter_AddRef (IBaseFilter *iface)
 
static ULONG WINAPI filter_Release (IBaseFilter *iface)
 
static HRESULT WINAPI filter_GetClassID (IBaseFilter *iface, CLSID *clsid)
 
static HRESULT WINAPI filter_Stop (IBaseFilter *iface)
 
static HRESULT WINAPI filter_Pause (IBaseFilter *iface)
 
static HRESULT WINAPI filter_Run (IBaseFilter *iface, REFERENCE_TIME start)
 
static HRESULT WINAPI filter_GetState (IBaseFilter *iface, DWORD timeout, FILTER_STATE *state)
 
static HRESULT WINAPI filter_SetSyncSource (IBaseFilter *iface, IReferenceClock *clock)
 
static HRESULT WINAPI filter_GetSyncSource (IBaseFilter *iface, IReferenceClock **clock)
 
static HRESULT WINAPI filter_EnumPins (IBaseFilter *iface, IEnumPins **enum_pins)
 
static HRESULT WINAPI filter_FindPin (IBaseFilter *iface, const WCHAR *id, IPin **ret)
 
static HRESULT WINAPI filter_QueryFilterInfo (IBaseFilter *iface, FILTER_INFO *info)
 
static HRESULT WINAPI filter_JoinFilterGraph (IBaseFilter *iface, IFilterGraph *graph, const WCHAR *name)
 
static HRESULT WINAPI filter_QueryVendorInfo (IBaseFilter *iface, WCHAR **info)
 
VOID WINAPI BaseFilterImpl_IncrementPinVersion (struct strmbase_filter *filter)
 
void strmbase_filter_init (struct strmbase_filter *filter, IUnknown *outer, const CLSID *clsid, const struct strmbase_filter_ops *ops)
 
void strmbase_filter_cleanup (struct strmbase_filter *filter)
 

Variables

static const IEnumPinsVtbl enum_pins_vtbl
 
static const IUnknownVtbl filter_inner_vtbl
 
static const IBaseFilterVtbl filter_vtbl
 

Function Documentation

◆ BaseFilterImpl_IncrementPinVersion()

VOID WINAPI BaseFilterImpl_IncrementPinVersion ( struct strmbase_filter *  filter)

Definition at line 512 of file filter.c.

513{
514 InterlockedIncrement(&filter->pin_version);
515}
#define InterlockedIncrement
Definition: armddk.h:53
Definition: filter.c:165

Referenced by FileSource_Load().

◆ enum_pins_AddRef()

static ULONG WINAPI enum_pins_AddRef ( IEnumPins *  iface)
static

Definition at line 86 of file filter.c.

87{
90 TRACE("%p increasing refcount to %lu.\n", enum_pins, refcount);
91 return refcount;
92}
static struct enum_pins * impl_from_IEnumPins(IEnumPins *iface)
Definition: filter.c:39
#define TRACE(s)
Definition: solgame.cpp:4
LONG refcount
Definition: filter.c:31
uint32_t ULONG
Definition: typedefs.h:59

◆ enum_pins_Clone()

static HRESULT WINAPI enum_pins_Clone ( IEnumPins *  iface,
IEnumPins **  out 
)
static

Definition at line 178 of file filter.c.

179{
180 struct enum_pins *enum_pins = impl_from_IEnumPins(iface);
181 HRESULT hr;
182
183 TRACE("iface %p, out %p.\n", iface, out);
184
186 return hr;
187 return IEnumPins_Skip(*out, enum_pins->index);
188}
HRESULT hr
Definition: delayimp.cpp:582
#define FAILED(hr)
Definition: intsafe.h:51
static HRESULT enum_pins_create(struct strmbase_filter *filter, IEnumPins **out)
Definition: filter.c:37
unsigned int index
Definition: filter.c:34
struct strmbase_filter * filter
Definition: filter.c:32
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ enum_pins_create()

static HRESULT enum_pins_create ( struct strmbase_filter *  filter,
IEnumPins **  out 
)
static

Definition at line 37 of file filter.c.

38{
39 struct enum_pins *object;
40
41 if (!out)
42 return E_POINTER;
43
44 if (!(object = heap_alloc_zero(sizeof(*object))))
45 {
46 *out = NULL;
47 return E_OUTOFMEMORY;
48 }
49
50 object->IEnumPins_iface.lpVtbl = &enum_pins_vtbl;
51 object->refcount = 1;
52 object->filter = filter;
53 IBaseFilter_AddRef(&filter->IBaseFilter_iface);
54 object->version = filter->pin_version;
55
56 while (filter->ops->filter_get_pin(filter, object->count))
57 ++object->count;
58
59 TRACE("Created enumerator %p.\n", object);
60 *out = &object->IEnumPins_iface;
61
62 return S_OK;
63}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
static const IEnumPinsVtbl enum_pins_vtbl
Definition: filter.c:37
#define S_OK
Definition: intsafe.h:52
#define E_POINTER
Definition: winerror.h:3480

Referenced by enum_pins_Clone(), and filter_EnumPins().

◆ enum_pins_Next()

static HRESULT WINAPI enum_pins_Next ( IEnumPins *  iface,
ULONG  count,
IPin **  pins,
ULONG *  ret_count 
)
static

Definition at line 108 of file filter.c.

109{
110 struct enum_pins *enum_pins = impl_from_IEnumPins(iface);
111 unsigned int i;
112
113 TRACE("iface %p, count %lu, pins %p, ret_count %p.\n", iface, count, pins, ret_count);
114
115 if (!pins)
116 return E_POINTER;
117
118 if (count > 1 && !ret_count)
119 return E_INVALIDARG;
120
121 if (ret_count)
122 *ret_count = 0;
123
124 if (enum_pins->version != enum_pins->filter->pin_version)
125 return S_FALSE;
126
127 for (i = 0; i < count; ++i)
128 {
129 struct strmbase_pin *pin = enum_pins->filter->ops->filter_get_pin(enum_pins->filter, enum_pins->index + i);
130
131 if (!pin)
132 break;
133
134 IPin_AddRef(pins[i] = &pin->IPin_iface);
135 }
136
137 if (ret_count)
138 *ret_count = i;
139 enum_pins->index += i;
140 return i == count ? S_OK : S_FALSE;
141}
#define E_INVALIDARG
Definition: ddrawi.h:101
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int version
Definition: filter.c:31
IPin ** pins
Definition: filter.c:33
IPin IPin_iface
Definition: strmbase.h:57
#define S_FALSE
Definition: winerror.h:3451

◆ enum_pins_QueryInterface()

static HRESULT WINAPI enum_pins_QueryInterface ( IEnumPins *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 70 of file filter.c.

71{
72 TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
73
74 if (IsEqualGUID(iid, &IID_IUnknown) || IsEqualGUID(iid, &IID_IEnumPins))
75 {
76 IEnumPins_AddRef(iface);
77 *out = iface;
78 return S_OK;
79 }
80
81 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
82 *out = NULL;
83 return E_NOINTERFACE;
84}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ enum_pins_Release()

static ULONG WINAPI enum_pins_Release ( IEnumPins *  iface)
static

Definition at line 94 of file filter.c.

95{
98
99 TRACE("%p decreasing refcount to %lu.\n", enum_pins, refcount);
100 if (!refcount)
101 {
102 IBaseFilter_Release(&enum_pins->filter->IBaseFilter_iface);
104 }
105 return refcount;
106}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedDecrement
Definition: armddk.h:52

◆ enum_pins_Reset()

static HRESULT WINAPI enum_pins_Reset ( IEnumPins *  iface)
static

Definition at line 159 of file filter.c.

160{
161 struct enum_pins *enum_pins = impl_from_IEnumPins(iface);
162
163 TRACE("iface %p.\n", iface);
164
165 if (enum_pins->version != enum_pins->filter->pin_version)
166 {
167 enum_pins->count = 0;
168 while (enum_pins->filter->ops->filter_get_pin(enum_pins->filter, enum_pins->count))
169 ++enum_pins->count;
170 }
171
172 enum_pins->version = enum_pins->filter->pin_version;
173 enum_pins->index = 0;
174
175 return S_OK;
176}
unsigned int count
Definition: filter.c:34

◆ enum_pins_Skip()

static HRESULT WINAPI enum_pins_Skip ( IEnumPins *  iface,
ULONG  count 
)
static

Definition at line 143 of file filter.c.

144{
145 struct enum_pins *enum_pins = impl_from_IEnumPins(iface);
146
147 TRACE("iface %p, count %lu.\n", iface, count);
148
149 if (enum_pins->version != enum_pins->filter->pin_version)
151
153 return S_FALSE;
154
156 return S_OK;
157}
#define VFW_E_ENUM_OUT_OF_SYNC
Definition: vfwmsgs.h:42

◆ filter_AddRef()

static ULONG WINAPI filter_AddRef ( IBaseFilter *  iface)
static

Definition at line 280 of file filter.c.

281{
283 return IUnknown_AddRef(filter->outer_unk);
284}
static struct strmbase_filter * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: filter.c:269

◆ filter_EnumPins()

static HRESULT WINAPI filter_EnumPins ( IBaseFilter *  iface,
IEnumPins **  enum_pins 
)
static

Definition at line 420 of file filter.c.

421{
423
424 TRACE("filter %p %s, enum_pins %p.\n", filter, debugstr_w(filter->name), enum_pins);
425
427}
#define debugstr_w
Definition: kernel32.h:32
WCHAR name[128]
Definition: filter.c:172

◆ filter_FindPin()

static HRESULT WINAPI filter_FindPin ( IBaseFilter *  iface,
const WCHAR *  id,
IPin **  ret 
)
static

Definition at line 429 of file filter.c.

430{
432 struct strmbase_pin *pin;
433 unsigned int i;
434
435 TRACE("filter %p %s, id %s, ret %p.\n", filter, debugstr_w(filter->name), debugstr_w(id), ret);
436
437 for (i = 0; (pin = filter->ops->filter_get_pin(filter, i)); ++i)
438 {
439 if (!lstrcmpW(id, pin->id))
440 {
441 IPin_AddRef(*ret = &pin->IPin_iface);
442 return S_OK;
443 }
444 }
445
446 return VFW_E_NOT_FOUND;
447}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
return ret
Definition: mutex.c:147
WCHAR id[128]
Definition: strmbase.h:61
#define VFW_E_NOT_FOUND
Definition: vfwmsgs.h:61

◆ filter_GetClassID()

static HRESULT WINAPI filter_GetClassID ( IBaseFilter *  iface,
CLSID *  clsid 
)
static

Definition at line 292 of file filter.c.

293{
295
296 TRACE("filter %p %s, clsid %p.\n", filter, debugstr_w(filter->name), clsid);
297
298 *clsid = filter->clsid;
299
300 return S_OK;
301}
const CLSID * clsid
Definition: msctf.cpp:50

◆ filter_GetState()

static HRESULT WINAPI filter_GetState ( IBaseFilter *  iface,
DWORD  timeout,
FILTER_STATE *  state 
)
static

Definition at line 366 of file filter.c.

367{
369 HRESULT hr = S_OK;
370
371 TRACE("filter %p %s, timeout %lu, state %p.\n", filter, debugstr_w(filter->name), timeout, state);
372
373 EnterCriticalSection(&filter->filter_cs);
374
375 if (filter->ops->filter_wait_state)
376 hr = filter->ops->filter_wait_state(filter, timeout);
377 *state = filter->state;
378
379 LeaveCriticalSection(&filter->filter_cs);
380
381 return hr;
382}
static int state
Definition: maze.c:121
FILTER_STATE state
Definition: filter.c:177
Definition: dhcpd.h:248
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

◆ filter_GetSyncSource()

static HRESULT WINAPI filter_GetSyncSource ( IBaseFilter *  iface,
IReferenceClock **  clock 
)
static

Definition at line 403 of file filter.c.

404{
406
407 TRACE("filter %p %s, clock %p.\n", filter, debugstr_w(filter->name), clock);
408
409 EnterCriticalSection(&filter->filter_cs);
410
411 *clock = filter->clock;
412 if (filter->clock)
413 IReferenceClock_AddRef(filter->clock);
414
415 LeaveCriticalSection(&filter->filter_cs);
416
417 return S_OK;
418}
_ACRTIMP clock_t __cdecl clock(void)
Definition: time.c:698
IReferenceClock * clock
Definition: filter.c:171

◆ filter_inner_AddRef()

static ULONG WINAPI filter_inner_AddRef ( IUnknown *  iface)
static

Definition at line 239 of file filter.c.

240{
243
244 TRACE("%p increasing refcount to %lu.\n", filter, refcount);
245
246 return refcount;
247}
static struct strmbase_filter * impl_from_IUnknown(IUnknown *iface)
Definition: filter.c:201
LONG refcount
Definition: filter.c:168

◆ filter_inner_QueryInterface()

static HRESULT WINAPI filter_inner_QueryInterface ( IUnknown *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 206 of file filter.c.

207{
209 HRESULT hr;
210
211 TRACE("filter %p %s, iid %s, out %p.\n", filter, debugstr_w(filter->name), debugstr_guid(iid), out);
212
213 *out = NULL;
214
215 if (filter->ops->filter_query_interface
216 && SUCCEEDED(hr = filter->ops->filter_query_interface(filter, iid, out)))
217 {
218 return hr;
219 }
220
221 if (IsEqualIID(iid, &IID_IUnknown))
222 *out = iface;
223 else if (IsEqualIID(iid, &IID_IPersist)
224 || IsEqualIID(iid, &IID_IMediaFilter)
225 || IsEqualIID(iid, &IID_IBaseFilter))
226 {
227 *out = &filter->IBaseFilter_iface;
228 }
229 else
230 {
231 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
232 return E_NOINTERFACE;
233 }
234
235 IUnknown_AddRef((IUnknown *)*out);
236 return S_OK;
237}
const GUID IID_IBaseFilter
#define SUCCEEDED(hr)
Definition: intsafe.h:50
const GUID IID_IPersist
Definition: proxy.cpp:14
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ filter_inner_Release()

static ULONG WINAPI filter_inner_Release ( IUnknown *  iface)
static

Definition at line 249 of file filter.c.

250{
253
254 TRACE("%p decreasing refcount to %lu.\n", filter, refcount);
255
256 if (!refcount)
257 filter->ops->filter_destroy(filter);
258
259 return refcount;
260}

◆ filter_JoinFilterGraph()

static HRESULT WINAPI filter_JoinFilterGraph ( IBaseFilter *  iface,
IFilterGraph *  graph,
const WCHAR *  name 
)
static

Definition at line 464 of file filter.c.

465{
467
468 TRACE("filter %p %s, graph %p, name %s.\n", filter, debugstr_w(filter->name), graph, debugstr_w(name));
469
470 EnterCriticalSection(&filter->filter_cs);
471
472 if (name)
474 else
475 filter->name[0] = 0;
476 /* The graph references us, so we cannot also reference the graph. */
477 filter->graph = graph;
478
479 LeaveCriticalSection(&filter->filter_cs);
480
481 return S_OK;
482}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define lstrcpynW
Definition: compat.h:738
IFilterGraph * graph
Definition: filter.c:173
Definition: graph.c:32
Definition: name.c:39
IFilterGraph * graph
Definition: strmbase.h:154

◆ filter_Pause()

static HRESULT WINAPI filter_Pause ( IBaseFilter *  iface)
static

Definition at line 324 of file filter.c.

325{
327 HRESULT hr = S_OK;
328
329 TRACE("filter %p %s.\n", filter, debugstr_w(filter->name));
330
331 EnterCriticalSection(&filter->filter_cs);
332
333 if (filter->state == State_Stopped && filter->ops->filter_init_stream)
334 hr = filter->ops->filter_init_stream(filter);
335 else if (filter->state == State_Running && filter->ops->filter_stop_stream)
336 hr = filter->ops->filter_stop_stream(filter);
337 if (SUCCEEDED(hr))
338 filter->state = State_Paused;
339
340 LeaveCriticalSection(&filter->filter_cs);
341
342 return hr;
343}

◆ filter_QueryFilterInfo()

static HRESULT WINAPI filter_QueryFilterInfo ( IBaseFilter *  iface,
FILTER_INFO *  info 
)
static

Definition at line 449 of file filter.c.

450{
452
453 TRACE("filter %p %s, info %p.\n", filter, debugstr_w(filter->name), info);
454
455 lstrcpyW(info->achName, filter->name);
456 info->pGraph = filter->graph;
457
458 if (info->pGraph)
459 IFilterGraph_AddRef(info->pGraph);
460
461 return S_OK;
462}
#define lstrcpyW
Definition: compat.h:749

◆ filter_QueryInterface()

static HRESULT WINAPI filter_QueryInterface ( IBaseFilter *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 274 of file filter.c.

275{
277 return IUnknown_QueryInterface(filter->outer_unk, iid, out);
278}

◆ filter_QueryVendorInfo()

static HRESULT WINAPI filter_QueryVendorInfo ( IBaseFilter *  iface,
WCHAR **  info 
)
static

Definition at line 484 of file filter.c.

485{
487
488 TRACE("filter %p %s, info %p.\n", filter, debugstr_w(filter->name), info);
489
490 return E_NOTIMPL;
491}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ filter_Release()

static ULONG WINAPI filter_Release ( IBaseFilter *  iface)
static

Definition at line 286 of file filter.c.

287{
289 return IUnknown_Release(filter->outer_unk);
290}

◆ filter_Run()

static HRESULT WINAPI filter_Run ( IBaseFilter *  iface,
REFERENCE_TIME  start 
)
static

Definition at line 345 of file filter.c.

346{
348 HRESULT hr = S_OK;
349
350 TRACE("filter %p %s, start %s.\n", filter, debugstr_w(filter->name), debugstr_time(start));
351
352 EnterCriticalSection(&filter->filter_cs);
353
354 if (filter->state == State_Stopped && filter->ops->filter_init_stream)
355 hr = filter->ops->filter_init_stream(filter);
356 if (SUCCEEDED(hr) && filter->ops->filter_start_stream)
357 hr = filter->ops->filter_start_stream(filter, start);
358 if (SUCCEEDED(hr))
359 filter->state = State_Running;
360
361 LeaveCriticalSection(&filter->filter_cs);
362
363 return hr;
364}
GLuint start
Definition: gl.h:1545
static const char * debugstr_time(REFERENCE_TIME time)
Definition: strmbase.h:32

◆ filter_SetSyncSource()

static HRESULT WINAPI filter_SetSyncSource ( IBaseFilter *  iface,
IReferenceClock *  clock 
)
static

Definition at line 384 of file filter.c.

385{
387
388 TRACE("filter %p %s, clock %p.\n", filter, debugstr_w(filter->name), clock);
389
390 EnterCriticalSection(&filter->filter_cs);
391
392 if (filter->clock)
393 IReferenceClock_Release(filter->clock);
394 filter->clock = clock;
395 if (filter->clock)
396 IReferenceClock_AddRef(filter->clock);
397
398 LeaveCriticalSection(&filter->filter_cs);
399
400 return S_OK;
401}

◆ filter_Stop()

static HRESULT WINAPI filter_Stop ( IBaseFilter *  iface)
static

Definition at line 303 of file filter.c.

304{
306 HRESULT hr = S_OK;
307
308 TRACE("filter %p %s.\n", filter, debugstr_w(filter->name));
309
310 EnterCriticalSection(&filter->filter_cs);
311
312 if (filter->state == State_Running && filter->ops->filter_stop_stream)
313 hr = filter->ops->filter_stop_stream(filter);
314 if (SUCCEEDED(hr) && filter->ops->filter_cleanup_stream)
315 hr = filter->ops->filter_cleanup_stream(filter);
316 if (SUCCEEDED(hr))
317 filter->state = State_Stopped;
318
319 LeaveCriticalSection(&filter->filter_cs);
320
321 return hr;
322}

◆ impl_from_IBaseFilter()

static struct strmbase_filter * impl_from_IBaseFilter ( IBaseFilter *  iface)
inlinestatic

◆ impl_from_IEnumPins()

static struct enum_pins * impl_from_IEnumPins ( IEnumPins *  iface)
inlinestatic

Definition at line 65 of file filter.c.

66{
67 return CONTAINING_RECORD(iface, struct enum_pins, IEnumPins_iface);
68}

◆ impl_from_IUnknown()

static struct strmbase_filter * impl_from_IUnknown ( IUnknown *  iface)
inlinestatic

Definition at line 201 of file filter.c.

202{
203 return CONTAINING_RECORD(iface, struct strmbase_filter, IUnknown_inner);
204}

Referenced by filter_inner_AddRef(), filter_inner_QueryInterface(), and filter_inner_Release().

◆ strmbase_filter_cleanup()

void strmbase_filter_cleanup ( struct strmbase_filter *  filter)

Definition at line 540 of file filter.c.

541{
542 if (filter->clock)
543 IReferenceClock_Release(filter->clock);
544
545 filter->IBaseFilter_iface.lpVtbl = NULL;
546 if (filter->filter_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
547 filter->filter_cs.DebugInfo->Spare[0] = 0;
548 DeleteCriticalSection(&filter->filter_cs);
549 if (filter->stream_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
550 filter->stream_cs.DebugInfo->Spare[0] = 0;
551 DeleteCriticalSection(&filter->stream_cs);
552}
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)

Referenced by acm_wrapper_destroy(), async_reader_destroy(), audio_record_destroy(), avi_compressor_destroy(), avi_decompressor_destroy(), avi_mux_create(), avi_mux_destroy(), dsound_render_create(), dsound_render_destroy(), file_writer_destroy(), sample_grabber_destroy(), smart_tee_create(), smart_tee_destroy(), strmbase_renderer_cleanup(), testfilter_destroy(), testsink_destroy(), and vfw_capture_destroy().

◆ strmbase_filter_init()

void strmbase_filter_init ( struct strmbase_filter *  filter,
IUnknown *  outer,
const CLSID *  clsid,
const struct strmbase_filter_ops *  ops 
)

Definition at line 517 of file filter.c.

519{
520 memset(filter, 0, sizeof(*filter));
521
522 filter->IBaseFilter_iface.lpVtbl = &filter_vtbl;
523 filter->IUnknown_inner.lpVtbl = &filter_inner_vtbl;
524 filter->outer_unk = outer ? outer : &filter->IUnknown_inner;
525 filter->refcount = 1;
526
529 if (filter->filter_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
530 filter->filter_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": strmbase_filter.filter_cs");
533 if (filter->stream_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
534 filter->stream_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": strmbase_filter.stream_cs");
535 filter->clsid = *clsid;
536 filter->pin_version = 1;
537 filter->ops = ops;
538}
static const IMediaStreamFilterVtbl filter_vtbl
Definition: filter.c:824
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
static IUnknown * outer
Definition: compobj.c:82
static const IUnknownVtbl filter_inner_vtbl
Definition: filter.c:262
#define memset(x, y, z)
Definition: compat.h:39
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:687
#define DWORD_PTR
Definition: treelist.c:76
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156

Referenced by acm_wrapper_create(), async_reader_create(), audio_record_create(), avi_compressor_create(), avi_dec_create(), avi_mux_create(), dsound_render_create(), file_writer_create(), sample_grabber_create(), smart_tee_create(), strmbase_renderer_init(), testfilter_init(), testsink_init(), and vfw_capture_create().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( quartz  )

Variable Documentation

◆ enum_pins_vtbl

static const IEnumPinsVtbl enum_pins_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI enum_pins_Next(IEnumPins *iface, ULONG count, IPin **pins, ULONG *ret_count)
Definition: filter.c:85
static HRESULT WINAPI enum_pins_Reset(IEnumPins *iface)
Definition: filter.c:116
static HRESULT WINAPI enum_pins_Skip(IEnumPins *iface, ULONG count)
Definition: filter.c:105
static HRESULT WINAPI enum_pins_Clone(IEnumPins *iface, IEnumPins **out)
Definition: filter.c:126
static ULONG WINAPI enum_pins_AddRef(IEnumPins *iface)
Definition: filter.c:60
static HRESULT WINAPI enum_pins_QueryInterface(IEnumPins *iface, REFIID iid, void **out)
Definition: filter.c:44
static ULONG WINAPI enum_pins_Release(IEnumPins *iface)
Definition: filter.c:68

Definition at line 35 of file filter.c.

◆ filter_inner_vtbl

const IUnknownVtbl filter_inner_vtbl
static
Initial value:
=
{
}
static ULONG WINAPI filter_inner_AddRef(IUnknown *iface)
Definition: filter.c:239
static ULONG WINAPI filter_inner_Release(IUnknown *iface)
Definition: filter.c:249
static HRESULT WINAPI filter_inner_QueryInterface(IUnknown *iface, REFIID iid, void **out)
Definition: filter.c:206

Definition at line 262 of file filter.c.

Referenced by strmbase_filter_init().

◆ filter_vtbl

const IBaseFilterVtbl filter_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI filter_Run(IMediaStreamFilter *iface, REFERENCE_TIME start)
Definition: filter.c:344
static HRESULT WINAPI filter_QueryVendorInfo(IMediaStreamFilter *iface, LPWSTR *vendor_info)
Definition: filter.c:532
static HRESULT WINAPI filter_Stop(IMediaStreamFilter *iface)
Definition: filter.c:300
static ULONG WINAPI filter_AddRef(IMediaStreamFilter *iface)
Definition: filter.c:220
static HRESULT WINAPI filter_SetSyncSource(IMediaStreamFilter *iface, IReferenceClock *clock)
Definition: filter.c:382
static HRESULT WINAPI filter_FindPin(IMediaStreamFilter *iface, const WCHAR *id, IPin **out)
Definition: filter.c:456
static HRESULT WINAPI filter_JoinFilterGraph(IMediaStreamFilter *iface, IFilterGraph *graph, const WCHAR *name)
Definition: filter.c:512
static HRESULT WINAPI filter_EnumPins(IMediaStreamFilter *iface, IEnumPins **enum_pins)
Definition: filter.c:418
static HRESULT WINAPI filter_GetClassID(IMediaStreamFilter *iface, CLSID *clsid)
Definition: filter.c:266
static HRESULT WINAPI filter_QueryInterface(IMediaStreamFilter *iface, REFIID iid, void **out)
Definition: filter.c:197
static ULONG WINAPI filter_Release(IMediaStreamFilter *iface)
Definition: filter.c:230
static HRESULT WINAPI filter_QueryFilterInfo(IMediaStreamFilter *iface, FILTER_INFO *info)
Definition: filter.c:494
static HRESULT WINAPI filter_Pause(IMediaStreamFilter *iface)
Definition: filter.c:329
static HRESULT WINAPI filter_GetSyncSource(IMediaStreamFilter *iface, IReferenceClock **clock)
Definition: filter.c:401
static HRESULT WINAPI filter_GetState(IMediaStreamFilter *iface, DWORD timeout, FILTER_STATE *state)
Definition: filter.c:364

Definition at line 493 of file filter.c.