ReactOS  0.4.14-dev-337-gf981a68
parser.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ParserImpl
 
struct  Parser_OutputPin
 

Typedefs

typedef struct ParserImpl ParserImpl
 
typedef HRESULT(* PFN_PROCESS_SAMPLE) (LPVOID iface, IMediaSample *pSample, DWORD_PTR cookie)
 
typedef HRESULT(* PFN_QUERY_ACCEPT) (LPVOID iface, const AM_MEDIA_TYPE *pmt)
 
typedef HRESULT(* PFN_PRE_CONNECT) (IPin *iface, IPin *pConnectPin, ALLOCATOR_PROPERTIES *prop)
 
typedef HRESULT(* PFN_CLEANUP) (LPVOID iface)
 
typedef HRESULT(* PFN_DISCONNECT) (LPVOID iface)
 
typedef struct Parser_OutputPin Parser_OutputPin
 

Functions

HRESULT Parser_AddPin (ParserImpl *This, const PIN_INFO *piOutput, ALLOCATOR_PROPERTIES *props, const AM_MEDIA_TYPE *amt)
 
HRESULT Parser_Create (ParserImpl *, const IBaseFilterVtbl *, const CLSID *, PFN_PROCESS_SAMPLE, PFN_QUERY_ACCEPT, PFN_PRE_CONNECT, PFN_CLEANUP, PFN_DISCONNECT, REQUESTPROC, STOPPROCESSPROC, SourceSeeking_ChangeStop stop, SourceSeeking_ChangeStart start, SourceSeeking_ChangeRate rate)
 
void Parser_Destroy (ParserImpl *This)
 
HRESULT WINAPI Parser_QueryInterface (IBaseFilter *iface, REFIID riid, LPVOID *ppv)
 
ULONG WINAPI Parser_AddRef (IBaseFilter *iface)
 
ULONG WINAPI Parser_Release (IBaseFilter *iface)
 
HRESULT WINAPI Parser_GetClassID (IBaseFilter *iface, CLSID *pClsid)
 
HRESULT WINAPI Parser_Stop (IBaseFilter *iface)
 
HRESULT WINAPI Parser_Pause (IBaseFilter *iface)
 
HRESULT WINAPI Parser_Run (IBaseFilter *iface, REFERENCE_TIME tStart)
 
HRESULT WINAPI Parser_GetState (IBaseFilter *iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
 
HRESULT WINAPI Parser_SetSyncSource (IBaseFilter *iface, IReferenceClock *pClock)
 
HRESULT WINAPI Parser_GetSyncSource (IBaseFilter *iface, IReferenceClock **ppClock)
 
HRESULT WINAPI Parser_EnumPins (IBaseFilter *iface, IEnumPins **ppEnum)
 
HRESULT WINAPI Parser_FindPin (IBaseFilter *iface, LPCWSTR Id, IPin **ppPin)
 
HRESULT WINAPI Parser_QueryFilterInfo (IBaseFilter *iface, FILTER_INFO *pInfo)
 
HRESULT WINAPI Parser_JoinFilterGraph (IBaseFilter *iface, IFilterGraph *pGraph, LPCWSTR pName)
 
HRESULT WINAPI Parser_QueryVendorInfo (IBaseFilter *iface, LPWSTR *pVendorInfo)
 
static Parser_OutputPinunsafe_impl_Parser_OutputPin_from_IPin (IPin *iface)
 

Typedef Documentation

◆ Parser_OutputPin

◆ ParserImpl

Definition at line 23 of file parser.h.

◆ PFN_CLEANUP

typedef HRESULT(* PFN_CLEANUP) (LPVOID iface)

Definition at line 28 of file parser.h.

◆ PFN_DISCONNECT

typedef HRESULT(* PFN_DISCONNECT) (LPVOID iface)

Definition at line 29 of file parser.h.

◆ PFN_PRE_CONNECT

typedef HRESULT(* PFN_PRE_CONNECT) (IPin *iface, IPin *pConnectPin, ALLOCATOR_PROPERTIES *prop)

Definition at line 27 of file parser.h.

◆ PFN_PROCESS_SAMPLE

typedef HRESULT(* PFN_PROCESS_SAMPLE) (LPVOID iface, IMediaSample *pSample, DWORD_PTR cookie)

Definition at line 25 of file parser.h.

◆ PFN_QUERY_ACCEPT

typedef HRESULT(* PFN_QUERY_ACCEPT) (LPVOID iface, const AM_MEDIA_TYPE *pmt)

Definition at line 26 of file parser.h.

Function Documentation

◆ Parser_AddPin()

HRESULT Parser_AddPin ( ParserImpl This,
const PIN_INFO piOutput,
ALLOCATOR_PROPERTIES props,
const AM_MEDIA_TYPE amt 
)

Definition at line 446 of file parser.c.

447 {
448  IPin ** ppOldPins;
449  HRESULT hr;
450 
451  ppOldPins = This->ppPins;
452 
453  This->ppPins = CoTaskMemAlloc((This->cStreams + 2) * sizeof(IPin *));
454  memcpy(This->ppPins, ppOldPins, (This->cStreams + 1) * sizeof(IPin *));
455 
456  hr = BaseOutputPin_Construct(&Parser_OutputPin_Vtbl, sizeof(Parser_OutputPin), piOutput, &output_BaseOutputFuncTable, &This->filter.csFilter, This->ppPins + (This->cStreams + 1));
457 
458  if (SUCCEEDED(hr))
459  {
460  IPin *pPin = This->ppPins[This->cStreams + 1];
462  pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
463  CopyMediaType(pin->pmt, amt);
464  pin->dwSamplesProcessed = 0;
465 
466  pin->pin.pin.pinInfo.pFilter = &This->filter.IBaseFilter_iface;
467  pin->allocProps = *props;
468  This->cStreams++;
470  CoTaskMemFree(ppOldPins);
471  }
472  else
473  {
474  CoTaskMemFree(This->ppPins);
475  This->ppPins = ppOldPins;
476  ERR("Failed with error %x\n", hr);
477  }
478 
479  return hr;
480 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
HRESULT hr
Definition: shlfolder.c:183
VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter *This)
Definition: filter.c:190
Definition: regsvr.c:103
LONG HRESULT
Definition: typedefs.h:77
static HRESULT CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
Definition: filtergraph.c:706
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ERR(fmt,...)
Definition: debug.h:109
static Parser_OutputPin * unsafe_impl_Parser_OutputPin_from_IPin(IPin *iface)
Definition: parser.h:81
Definition: axcore.idl:91
static const WCHAR props[]
Definition: wbemdisp.c:288
HRESULT WINAPI BaseOutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, LONG outputpin_size, const PIN_INFO *pPinInfo, const BaseOutputPinFuncTable *pBaseOutputFuncsTable, LPCRITICAL_SECTION pCritSec, IPin **ppPin)
Definition: pin.c:791
static const IPinVtbl Parser_OutputPin_Vtbl
Definition: parser.c:40
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:404
static const BaseOutputPinFuncTable output_BaseOutputFuncTable
Definition: parser.c:434
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by AVISplitter_ProcessStreamList(), MPEGSplitter_pre_connect(), and WAVEParser_InputPin_PreConnect().

◆ Parser_AddRef()

ULONG WINAPI Parser_AddRef ( IBaseFilter iface)

Definition at line 171 of file parser.c.

172 {
173  return BaseFilterImpl_AddRef(iface);
174 }
ULONG WINAPI BaseFilterImpl_AddRef(IBaseFilter *iface)
Definition: filter.c:54

◆ Parser_Create()

Definition at line 96 of file parser.c.

97 {
98  HRESULT hr;
99  PIN_INFO piInput;
100 
101  /* pTransformFilter is already allocated */
102  BaseFilter_Init(&pParser->filter, Parser_Vtbl, pClsid, (DWORD_PTR)(__FILE__ ": ParserImpl.csFilter"), &BaseFuncTable);
103 
104  pParser->fnDisconnect = fnDisconnect;
105 
106  pParser->cStreams = 0;
107  pParser->ppPins = CoTaskMemAlloc(1 * sizeof(IPin *));
108 
109  /* construct input pin */
110  piInput.dir = PINDIR_INPUT;
111  piInput.pFilter = &pParser->filter.IBaseFilter_iface;
112  lstrcpynW(piInput.achName, wcsInputPinName, sizeof(piInput.achName) / sizeof(piInput.achName[0]));
113 
114  if (!start)
116 
117  if (!stop)
118  stop = Parser_ChangeStop;
119 
120  if (!rate)
122 
123  SourceSeeking_Init(&pParser->sourceSeeking, &Parser_Seeking_Vtbl, stop, start, rate, &pParser->filter.csFilter);
124 
125  hr = PullPin_Construct(&Parser_InputPin_Vtbl, &piInput, fnProcessSample, (LPVOID)pParser, fnQueryAccept, fnCleanup, fnRequest, fnDone, &pParser->filter.csFilter, (IPin **)&pParser->pInputPin);
126 
127  if (SUCCEEDED(hr))
128  {
129  pParser->ppPins[0] = &pParser->pInputPin->pin.IPin_iface;
130  pParser->pInputPin->fnPreConnect = fnPreConnect;
131  }
132  else
133  {
134  CoTaskMemFree(pParser->ppPins);
135  BaseFilterImpl_Release(&pParser->filter.IBaseFilter_iface);
136  CoTaskMemFree(pParser);
137  }
138 
139  return hr;
140 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
HRESULT hr
Definition: shlfolder.c:183
int rate
Definition: pcmconverter.c:97
#define lstrcpynW
Definition: compat.h:405
ULONG WINAPI BaseFilterImpl_Release(IBaseFilter *iface)
Definition: filter.c:64
static const IPinVtbl Parser_InputPin_Vtbl
Definition: parser.c:41
static const WCHAR wcsInputPinName[]
Definition: parser.c:38
LONG HRESULT
Definition: typedefs.h:77
HRESULT SourceSeeking_Init(SourceSeeking *pSeeking, const IMediaSeekingVtbl *Vtbl, SourceSeeking_ChangeStop fnChangeStop, SourceSeeking_ChangeStart fnChangeStart, SourceSeeking_ChangeRate fnChangeRate, PCRITICAL_SECTION crit_sect)
Definition: seeking.c:40
static HRESULT WINAPI Parser_ChangeStop(IMediaSeeking *iface)
Definition: parser.c:515
static const BaseFilterFuncTable BaseFuncTable
Definition: parser.c:91
uint32_t DWORD_PTR
Definition: typedefs.h:63
HRESULT PullPin_Construct(const IPinVtbl *PullPin_Vtbl, const PIN_INFO *pPinInfo, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, REQUESTPROC pCustomRequest, STOPPROCESSPROC pDone, LPCRITICAL_SECTION pCritSec, IPin **ppPin)
Definition: pin.c:221
GLuint start
Definition: gl.h:1545
static HRESULT WINAPI Parser_ChangeStart(IMediaSeeking *iface)
Definition: parser.c:509
Definition: axcore.idl:91
static const IMediaSeekingVtbl Parser_Seeking_Vtbl
Definition: parser.c:39
HRESULT WINAPI BaseFilter_Init(BaseFilter *This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable *pBaseFuncsTable)
Definition: filter.c:196
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:404
static HRESULT WINAPI Parser_ChangeRate(IMediaSeeking *iface)
Definition: parser.c:521
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by AVISplitter_create(), MPEGSplitter_create(), and WAVEParser_create().

◆ Parser_Destroy()

void Parser_Destroy ( ParserImpl This)

Definition at line 176 of file parser.c.

177 {
178  IPin *connected = NULL;
179  ULONG pinref;
180  HRESULT hr;
181 
182  assert(!This->filter.refCount);
184 
185  /* Don't need to clean up output pins, freeing input pin will do that */
186  IPin_ConnectedTo(&This->pInputPin->pin.IPin_iface, &connected);
187  if (connected)
188  {
189  hr = IPin_Disconnect(connected);
190  assert(hr == S_OK);
191  IPin_Release(connected);
192  hr = IPin_Disconnect(&This->pInputPin->pin.IPin_iface);
193  assert(hr == S_OK);
194  }
195  pinref = IPin_Release(&This->pInputPin->pin.IPin_iface);
196  if (pinref)
197  {
198  /* Valgrind could find this, if I kill it here */
199  ERR("pinref should be null, is %u, destroying anyway\n", pinref);
200  assert((LONG)pinref > 0);
201 
202  while (pinref)
203  pinref = IPin_Release(&This->pInputPin->pin.IPin_iface);
204  }
205 
206  CoTaskMemFree(This->ppPins);
207  BaseFilter_Destroy(&This->filter);
208 
209  TRACE("Destroying parser\n");
211 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
HRESULT hr
Definition: shlfolder.c:183
#define assert(x)
Definition: debug.h:53
HRESULT PullPin_WaitForStateChange(PullPin *This, DWORD dwMilliseconds)
Definition: pin.c:708
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI BaseFilter_Destroy(BaseFilter *This)
Definition: filter.c:214
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define ERR(fmt,...)
Definition: debug.h:109
int connected
Definition: main.c:61
#define S_OK
Definition: intsafe.h:59
Definition: axcore.idl:91
unsigned int ULONG
Definition: retypes.h:1
#define INFINITE
Definition: serial.h:102

Referenced by AVISplitter_Release(), and Parser_Release().

◆ Parser_EnumPins()

HRESULT WINAPI Parser_EnumPins ( IBaseFilter iface,
IEnumPins **  ppEnum 
)

IBaseFilter implementation

Definition at line 404 of file parser.c.

405 {
406  return BaseFilterImpl_EnumPins(iface,ppEnum);
407 }
HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter *iface, IEnumPins **ppEnum)
Definition: filter.c:135

◆ Parser_FindPin()

HRESULT WINAPI Parser_FindPin ( IBaseFilter iface,
LPCWSTR  Id,
IPin **  ppPin 
)

Definition at line 409 of file parser.c.

410 {
412  FIXME("(%p)->(%s,%p)\n", This, debugstr_w(Id), ppPin);
413 
414  /* FIXME: critical section */
415 
416  return E_NOTIMPL;
417 }
DWORD Id
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Parser_GetClassID()

HRESULT WINAPI Parser_GetClassID ( IBaseFilter iface,
CLSID pClsid 
)

IPersist methods

Definition at line 228 of file parser.c.

229 {
231 
232  TRACE("%p->(%p)\n", This, pClsid);
233 
234  *pClsid = This->filter.clsid;
235 
236  return S_OK;
237 }
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59

◆ Parser_GetState()

HRESULT WINAPI Parser_GetState ( IBaseFilter iface,
DWORD  dwMilliSecsTimeout,
FILTER_STATE *  pState 
)

Definition at line 361 of file parser.c.

362 {
364  PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]);
365  HRESULT hr = S_OK;
366 
367  TRACE("%p->(%d, %p)\n", This, dwMilliSecsTimeout, pState);
368 
369  EnterCriticalSection(&pin->thread_lock);
370  EnterCriticalSection(&This->filter.csFilter);
371  {
372  *pState = This->filter.state;
373  }
374  LeaveCriticalSection(&This->filter.csFilter);
375 
376  if (This->pInputPin && (PullPin_WaitForStateChange(This->pInputPin, dwMilliSecsTimeout) == S_FALSE))
378  LeaveCriticalSection(&pin->thread_lock);
379 
380  return hr;
381 }
HRESULT hr
Definition: shlfolder.c:183
#define VFW_S_STATE_INTERMEDIATE
Definition: vfwmsgs.h:21
HRESULT PullPin_WaitForStateChange(PullPin *This, DWORD dwMilliseconds)
Definition: pin.c:708
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: regsvr.c:103
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define S_FALSE
Definition: winerror.h:2357
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ Parser_GetSyncSource()

HRESULT WINAPI Parser_GetSyncSource ( IBaseFilter iface,
IReferenceClock **  ppClock 
)

Definition at line 397 of file parser.c.

398 {
399  return BaseFilterImpl_GetSyncSource(iface, ppClock);
400 }
HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter *iface, IReferenceClock **ppClock)
Definition: filter.c:119

◆ Parser_JoinFilterGraph()

HRESULT WINAPI Parser_JoinFilterGraph ( IBaseFilter iface,
IFilterGraph pGraph,
LPCWSTR  pName 
)

Definition at line 424 of file parser.c.

425 {
426  return BaseFilterImpl_JoinFilterGraph(iface, pGraph, pName);
427 }
static LPSTR pName
Definition: security.c:75
HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *pGraph, LPCWSTR pName)
Definition: filter.c:159

◆ Parser_Pause()

HRESULT WINAPI Parser_Pause ( IBaseFilter iface)

Definition at line 279 of file parser.c.

280 {
281  HRESULT hr = S_OK;
283  PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]);
284 
285  TRACE("%p->()\n", This);
286 
287  EnterCriticalSection(&pin->thread_lock);
288  EnterCriticalSection(&This->filter.csFilter);
289 
290  if (This->filter.state == State_Paused)
291  {
292  LeaveCriticalSection(&This->filter.csFilter);
293  LeaveCriticalSection(&pin->thread_lock);
294  return S_OK;
295  }
296 
297  if (This->filter.state == State_Stopped)
298  {
299  LeaveCriticalSection(&This->filter.csFilter);
300  hr = IBaseFilter_Run(iface, -1);
301  EnterCriticalSection(&This->filter.csFilter);
302  }
303 
304  if (SUCCEEDED(hr))
305  This->filter.state = State_Paused;
306 
307  LeaveCriticalSection(&This->filter.csFilter);
308  LeaveCriticalSection(&pin->thread_lock);
309 
310  return hr;
311 }
HRESULT hr
Definition: shlfolder.c:183
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: regsvr.c:103
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ Parser_QueryFilterInfo()

HRESULT WINAPI Parser_QueryFilterInfo ( IBaseFilter iface,
FILTER_INFO *  pInfo 
)

Definition at line 419 of file parser.c.

420 {
421  return BaseFilterImpl_QueryFilterInfo(iface, pInfo);
422 }
HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *pInfo)
Definition: filter.c:145

◆ Parser_QueryInterface()

HRESULT WINAPI Parser_QueryInterface ( IBaseFilter iface,
REFIID  riid,
LPVOID ppv 
)

Definition at line 142 of file parser.c.

143 {
145  TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv);
146 
147  *ppv = NULL;
148 
151  || IsEqualIID(riid, &IID_IMediaFilter)
153  *ppv = &This->filter.IBaseFilter_iface;
154 
155  if (*ppv)
156  {
157  IUnknown_AddRef((IUnknown *)*ppv);
158  return S_OK;
159  }
160 
161  if (!IsEqualIID(riid, &IID_IPin) &&
162  !IsEqualIID(riid, &IID_IVideoWindow) &&
163  !IsEqualIID(riid, &IID_IAMFilterMiscFlags))
164  {
165  FIXME("No interface for %s!\n", qzdebugstr_guid(riid));
166  }
167 
168  return E_NOINTERFACE;
169 }
const GUID IID_IBaseFilter
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
const char * qzdebugstr_guid(const GUID *id)
Definition: main.c:279
const GUID IID_IPersist
Definition: proxy.cpp:14
REFIID LPVOID * ppv
Definition: atlbase.h:39
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:59
const GUID IID_IPin
Definition: pincontrol.cpp:15
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ Parser_QueryVendorInfo()

HRESULT WINAPI Parser_QueryVendorInfo ( IBaseFilter iface,
LPWSTR pVendorInfo 
)

Definition at line 429 of file parser.c.

430 {
431  return BaseFilterImpl_QueryVendorInfo(iface, pVendorInfo);
432 }
HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter *iface, LPWSTR *pVendorInfo)
Definition: filter.c:178

◆ Parser_Release()

ULONG WINAPI Parser_Release ( IBaseFilter iface)

Definition at line 213 of file parser.c.

214 {
216  ULONG refCount = InterlockedDecrement(&This->filter.refCount);
217 
218  TRACE("(%p)->() Release from %d\n", This, refCount + 1);
219 
220  if (!refCount)
222 
223  return refCount;
224 }
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int ULONG
Definition: retypes.h:1
void Parser_Destroy(ParserImpl *This)
Definition: parser.c:176

◆ Parser_Run()

HRESULT WINAPI Parser_Run ( IBaseFilter iface,
REFERENCE_TIME  tStart 
)

Definition at line 313 of file parser.c.

314 {
315  HRESULT hr = S_OK;
317  PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]);
318 
319  ULONG i;
320 
321  TRACE("%p->(%s)\n", This, wine_dbgstr_longlong(tStart));
322 
323  EnterCriticalSection(&pin->thread_lock);
324  EnterCriticalSection(&This->filter.csFilter);
325  {
326  HRESULT hr_any = VFW_E_NOT_CONNECTED;
327 
328  This->filter.rtStreamStart = tStart;
329  if (This->filter.state == State_Running || This->filter.state == State_Paused)
330  {
331  This->filter.state = State_Running;
332  LeaveCriticalSection(&This->filter.csFilter);
333  LeaveCriticalSection(&pin->thread_lock);
334  return S_OK;
335  }
336 
337  for (i = 1; i < (This->cStreams + 1); i++)
338  {
340  if (SUCCEEDED(hr))
341  hr_any = hr;
342  }
343 
344  hr = hr_any;
345  if (SUCCEEDED(hr))
346  {
347  LeaveCriticalSection(&This->filter.csFilter);
348  hr = PullPin_StartProcessing(This->pInputPin);
349  EnterCriticalSection(&This->filter.csFilter);
350  }
351 
352  if (SUCCEEDED(hr))
353  This->filter.state = State_Running;
354  }
355  LeaveCriticalSection(&This->filter.csFilter);
356  LeaveCriticalSection(&pin->thread_lock);
357 
358  return hr;
359 }
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI BaseOutputPinImpl_Active(BaseOutputPin *This)
Definition: pin.c:614
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: regsvr.c:103
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
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define VFW_E_NOT_CONNECTED
Definition: vfwmsgs.h:48
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59
HRESULT PullPin_StartProcessing(PullPin *This)
Definition: pin.c:623
unsigned int ULONG
Definition: retypes.h:1
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ Parser_SetSyncSource()

HRESULT WINAPI Parser_SetSyncSource ( IBaseFilter iface,
IReferenceClock pClock 
)

Definition at line 383 of file parser.c.

384 {
386  PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]);
387 
388  TRACE("%p->(%p)\n", This, pClock);
389 
390  EnterCriticalSection(&pin->thread_lock);
391  BaseFilterImpl_SetSyncSource(iface,pClock);
392  LeaveCriticalSection(&pin->thread_lock);
393 
394  return S_OK;
395 }
HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *pClock)
Definition: filter.c:101
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: regsvr.c:103
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ Parser_Stop()

HRESULT WINAPI Parser_Stop ( IBaseFilter iface)

IMediaFilter methods

Definition at line 241 of file parser.c.

242 {
244  PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]);
245  ULONG i;
246 
247  TRACE("%p->()\n", This);
248 
249  EnterCriticalSection(&pin->thread_lock);
250 
251  IAsyncReader_BeginFlush(This->pInputPin->pReader);
252  EnterCriticalSection(&This->filter.csFilter);
253 
254  if (This->filter.state == State_Stopped)
255  {
256  LeaveCriticalSection(&This->filter.csFilter);
257  IAsyncReader_EndFlush(This->pInputPin->pReader);
258  LeaveCriticalSection(&pin->thread_lock);
259  return S_OK;
260  }
261 
262  This->filter.state = State_Stopped;
263 
264  for (i = 1; i < (This->cStreams + 1); i++)
265  {
267  }
268 
269  LeaveCriticalSection(&This->filter.csFilter);
270 
271  PullPin_PauseProcessing(This->pInputPin);
273  IAsyncReader_EndFlush(This->pInputPin->pReader);
274 
275  LeaveCriticalSection(&pin->thread_lock);
276  return S_OK;
277 }
HRESULT PullPin_WaitForStateChange(PullPin *This, DWORD dwMilliseconds)
Definition: pin.c:708
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: regsvr.c:103
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
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
HRESULT PullPin_PauseProcessing(PullPin *This)
Definition: pin.c:646
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI BaseOutputPinImpl_Inactive(BaseOutputPin *This)
Definition: pin.c:634
#define S_OK
Definition: intsafe.h:59
unsigned int ULONG
Definition: retypes.h:1
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INFINITE
Definition: serial.h:102

◆ unsafe_impl_Parser_OutputPin_from_IPin()

static Parser_OutputPin* unsafe_impl_Parser_OutputPin_from_IPin ( IPin iface)
inlinestatic

Definition at line 81 of file parser.h.

82 {
83  return CONTAINING_RECORD(iface, Parser_OutputPin, pin.pin.IPin_iface);
84 }
Definition: regsvr.c:103
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by AVISplitter_Receive(), AVISplitter_seek(), FillBuffer(), Parser_AddPin(), Parser_OutputPin_Connect(), Parser_OutputPin_QueryInterface(), Parser_OutputPin_Release(), WAVEParser_first_request(), WAVEParser_Sample(), and WAVEParserImpl_seek().