ReactOS  0.4.14-dev-337-gf981a68
parser.c File Reference
#include "quartz_private.h"
#include "pin.h"
#include "vfwmsgs.h"
#include "amvideo.h"
#include "wine/unicode.h"
#include "wine/debug.h"
#include <math.h>
#include <assert.h>
#include "parser.h"
Include dependency graph for parser.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (quartz)
 
static HRESULT WINAPI Parser_ChangeStart (IMediaSeeking *iface)
 
static HRESULT WINAPI Parser_ChangeStop (IMediaSeeking *iface)
 
static HRESULT WINAPI Parser_ChangeRate (IMediaSeeking *iface)
 
static HRESULT WINAPI Parser_OutputPin_DecideBufferSize (BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest)
 
static HRESULT WINAPI Parser_OutputPin_CheckMediaType (BasePin *pin, const AM_MEDIA_TYPE *pmt)
 
static HRESULT WINAPI Parser_OutputPin_GetMediaType (BasePin *iface, int iPosition, AM_MEDIA_TYPE *pmt)
 
static HRESULT WINAPI Parser_OutputPin_DecideAllocator (BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc)
 
static HRESULT WINAPI Parser_OutputPin_BreakConnect (BaseOutputPin *This)
 
static ParserImplimpl_from_IMediaSeeking (IMediaSeeking *iface)
 
static ParserImplimpl_from_IBaseFilter (IBaseFilter *iface)
 
static ParserImplimpl_from_BaseFilter (BaseFilter *iface)
 
static IPin *WINAPI Parser_GetPin (BaseFilter *iface, int pos)
 
static LONG WINAPI Parser_GetPinCount (BaseFilter *iface)
 
HRESULT Parser_Create (ParserImpl *pParser, const IBaseFilterVtbl *Parser_Vtbl, const CLSID *pClsid, PFN_PROCESS_SAMPLE fnProcessSample, PFN_QUERY_ACCEPT fnQueryAccept, PFN_PRE_CONNECT fnPreConnect, PFN_CLEANUP fnCleanup, PFN_DISCONNECT fnDisconnect, REQUESTPROC fnRequest, STOPPROCESSPROC fnDone, SourceSeeking_ChangeStop stop, SourceSeeking_ChangeStart start, SourceSeeking_ChangeRate rate)
 
HRESULT WINAPI Parser_QueryInterface (IBaseFilter *iface, REFIID riid, LPVOID *ppv)
 
ULONG WINAPI Parser_AddRef (IBaseFilter *iface)
 
void Parser_Destroy (ParserImpl *This)
 
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)
 
HRESULT Parser_AddPin (ParserImpl *This, const PIN_INFO *piOutput, ALLOCATOR_PROPERTIES *props, const AM_MEDIA_TYPE *amt)
 
static HRESULT Parser_RemoveOutputPins (ParserImpl *This)
 
static HRESULT WINAPI Parser_Seeking_QueryInterface (IMediaSeeking *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI Parser_Seeking_AddRef (IMediaSeeking *iface)
 
static ULONG WINAPI Parser_Seeking_Release (IMediaSeeking *iface)
 
static HRESULT WINAPI Parser_OutputPin_QueryInterface (IPin *iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI Parser_OutputPin_Release (IPin *iface)
 
static HRESULT WINAPI Parser_OutputPin_Connect (IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 
static HRESULT WINAPI Parser_PullPin_QueryInterface (IPin *iface, REFIID riid, LPVOID *ppv)
 
static HRESULT WINAPI Parser_PullPin_Disconnect (IPin *iface)
 
static HRESULT WINAPI Parser_PullPin_ReceiveConnection (IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 
static HRESULT WINAPI Parser_PullPin_EnumMediaTypes (IPin *iface, IEnumMediaTypes **ppEnum)
 

Variables

static const WCHAR wcsInputPinName [] = {'i','n','p','u','t',' ','p','i','n',0}
 
static const IMediaSeekingVtbl Parser_Seeking_Vtbl
 
static const IPinVtbl Parser_OutputPin_Vtbl
 
static const IPinVtbl Parser_InputPin_Vtbl
 
static const BaseFilterFuncTable BaseFuncTable
 
static const BaseOutputPinFuncTable output_BaseOutputFuncTable
 

Function Documentation

◆ impl_from_BaseFilter()

static ParserImpl* impl_from_BaseFilter ( BaseFilter iface)
inlinestatic

Definition at line 62 of file parser.c.

63 {
64  return CONTAINING_RECORD(iface, ParserImpl, filter);
65 }
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
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by Parser_GetPin(), and Parser_GetPinCount().

◆ impl_from_IBaseFilter()

static ParserImpl* impl_from_IBaseFilter ( IBaseFilter iface)
inlinestatic

Definition at line 57 of file parser.c.

58 {
59  return CONTAINING_RECORD(iface, ParserImpl, filter.IBaseFilter_iface);
60 }
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
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by Parser_FindPin(), Parser_GetClassID(), Parser_GetState(), Parser_OutputPin_Connect(), Parser_OutputPin_QueryInterface(), Parser_Pause(), Parser_PullPin_Disconnect(), Parser_PullPin_QueryInterface(), Parser_PullPin_ReceiveConnection(), Parser_QueryInterface(), Parser_Release(), Parser_Run(), Parser_SetSyncSource(), and Parser_Stop().

◆ impl_from_IMediaSeeking()

static ParserImpl* impl_from_IMediaSeeking ( IMediaSeeking iface)
inlinestatic

Definition at line 52 of file parser.c.

53 {
54  return CONTAINING_RECORD(iface, ParserImpl, sourceSeeking.IMediaSeeking_iface);
55 }
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 Parser_Seeking_AddRef(), Parser_Seeking_QueryInterface(), and Parser_Seeking_Release().

◆ 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_ChangeRate()

static HRESULT WINAPI Parser_ChangeRate ( IMediaSeeking iface)
static

Definition at line 521 of file parser.c.

522 {
523  FIXME("(%p) filter hasn't implemented rate change!\n", iface);
524  return S_OK;
525 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:59

Referenced by Parser_Create().

◆ Parser_ChangeStart()

static HRESULT WINAPI Parser_ChangeStart ( IMediaSeeking iface)
static

Definition at line 509 of file parser.c.

510 {
511  FIXME("(%p) filter hasn't implemented start position change!\n", iface);
512  return S_OK;
513 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:59

Referenced by Parser_Create().

◆ Parser_ChangeStop()

static HRESULT WINAPI Parser_ChangeStop ( IMediaSeeking iface)
static

Definition at line 515 of file parser.c.

516 {
517  FIXME("(%p) filter hasn't implemented stop position change!\n", iface);
518  return S_OK;
519 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:59

Referenced by Parser_Create().

◆ Parser_Create()

HRESULT Parser_Create ( ParserImpl pParser,
const IBaseFilterVtbl *  Parser_Vtbl,
const CLSID pClsid,
PFN_PROCESS_SAMPLE  fnProcessSample,
PFN_QUERY_ACCEPT  fnQueryAccept,
PFN_PRE_CONNECT  fnPreConnect,
PFN_CLEANUP  fnCleanup,
PFN_DISCONNECT  fnDisconnect,
REQUESTPROC  fnRequest,
STOPPROCESSPROC  fnDone,
SourceSeeking_ChangeStop  stop,
SourceSeeking_ChangeStart  start,
SourceSeeking_ChangeRate  rate 
)

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 
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);
136  CoTaskMemFree(pParser);
137  }
138 
139  return hr;
140 }
ULONG cStreams
Definition: parser.h:40
PRECONNECTPROC fnPreConnect
Definition: pin.h:82
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
HRESULT hr
Definition: shlfolder.c:183
IPin IPin_iface
Definition: strmbase.h:35
int rate
Definition: pcmconverter.c:97
#define lstrcpynW
Definition: compat.h:405
IPin ** ppPins
Definition: parser.h:39
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
BaseFilter filter
Definition: parser.h:33
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
BasePin pin
Definition: pin.h:73
static HRESULT WINAPI Parser_ChangeStop(IMediaSeeking *iface)
Definition: parser.c:515
static const BaseFilterFuncTable BaseFuncTable
Definition: parser.c:91
IBaseFilter IBaseFilter_iface
Definition: strmbase.h:163
CRITICAL_SECTION csFilter
Definition: strmbase.h:165
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
PFN_DISCONNECT fnDisconnect
Definition: parser.h:36
static HRESULT WINAPI Parser_ChangeStart(IMediaSeeking *iface)
Definition: parser.c:509
Definition: axcore.idl:91
SourceSeeking sourceSeeking
Definition: parser.h:41
PullPin * pInputPin
Definition: parser.h:38
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_GetPin()

static IPin* WINAPI Parser_GetPin ( BaseFilter iface,
int  pos 
)
static

Definition at line 68 of file parser.c.

69 {
71 
72  TRACE("%p->(%x)\n", This, pos);
73 
74  /* Input pin also has a pin, hence the > and not >= */
75  if (pos > This->cStreams || pos < 0)
76  return NULL;
77 
78  IPin_AddRef(This->ppPins[pos]);
79  return This->ppPins[pos];
80 }
static ParserImpl * impl_from_BaseFilter(BaseFilter *iface)
Definition: parser.c:62
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

◆ Parser_GetPinCount()

static LONG WINAPI Parser_GetPinCount ( BaseFilter iface)
static

Definition at line 82 of file parser.c.

83 {
85 
86  TRACE("%p->()\n", This);
87 
88  return This->cStreams;
89 }
static ParserImpl * impl_from_BaseFilter(BaseFilter *iface)
Definition: parser.c:62
#define TRACE(s)
Definition: solgame.cpp:4

◆ 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_OutputPin_BreakConnect()

static HRESULT WINAPI Parser_OutputPin_BreakConnect ( BaseOutputPin This)
static

Definition at line 623 of file parser.c.

624 {
625  HRESULT hr;
626 
627  TRACE("(%p)->()\n", This);
628 
629  EnterCriticalSection(This->pin.pCritSec);
630  if (!This->pin.pConnectedTo || !This->pMemInputPin)
632  else
633  {
634  hr = IPin_Disconnect(This->pin.pConnectedTo);
635  IPin_Disconnect(&This->pin.IPin_iface);
636  }
637  LeaveCriticalSection(This->pin.pCritSec);
638 
639  return hr;
640 }
HRESULT hr
Definition: shlfolder.c:183
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define VFW_E_NOT_CONNECTED
Definition: vfwmsgs.h:48
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ Parser_OutputPin_CheckMediaType()

static HRESULT WINAPI Parser_OutputPin_CheckMediaType ( BasePin pin,
const AM_MEDIA_TYPE pmt 
)
static

Definition at line 703 of file parser.c.

704 {
706 
707  dump_AM_MEDIA_TYPE(pmt);
708 
709  return (memcmp(This->pmt, pmt, sizeof(AM_MEDIA_TYPE)) == 0);
710 }
void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE *pmt)
Definition: enummedia.c:27
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
Definition: regsvr.c:103

◆ Parser_OutputPin_Connect()

static HRESULT WINAPI Parser_OutputPin_Connect ( IPin iface,
IPin pReceivePin,
const AM_MEDIA_TYPE pmt 
)
static

Definition at line 690 of file parser.c.

691 {
693  ParserImpl *parser = impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter);
694 
695  /* Set the allocator to our input pin's */
696  EnterCriticalSection(This->pin.pin.pCritSec);
697  This->alloc = parser->pInputPin->pAlloc;
698  LeaveCriticalSection(This->pin.pin.pCritSec);
699 
700  return BaseOutputPinImpl_Connect(iface, pReceivePin, pmt);
701 }
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
HRESULT WINAPI BaseOutputPinImpl_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:405
static Parser_OutputPin * unsafe_impl_Parser_OutputPin_from_IPin(IPin *iface)
Definition: parser.h:81
Definition: import.c:86
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ Parser_OutputPin_DecideAllocator()

static HRESULT WINAPI Parser_OutputPin_DecideAllocator ( BaseOutputPin This,
IMemInputPin pPin,
IMemAllocator **  pAlloc 
)
static

Definition at line 601 of file parser.c.

602 {
604  HRESULT hr;
605 
606  *pAlloc = NULL;
607 
608  if (This->alloc)
609  {
610  hr = IMemInputPin_NotifyAllocator(pPin, This->alloc, This->readonly);
611  if (SUCCEEDED(hr))
612  {
613  *pAlloc = This->alloc;
614  IMemAllocator_AddRef(*pAlloc);
615  }
616  }
617  else
619 
620  return hr;
621 }
HRESULT hr
Definition: shlfolder.c:183
smooth NULL
Definition: ftsmooth.c:416
LONG HRESULT
Definition: typedefs.h:77
#define VFW_E_NO_ALLOCATOR
Definition: vfwmsgs.h:49
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ Parser_OutputPin_DecideBufferSize()

static HRESULT WINAPI Parser_OutputPin_DecideBufferSize ( BaseOutputPin iface,
IMemAllocator pAlloc,
ALLOCATOR_PROPERTIES ppropInputRequest 
)
static

Definition at line 573 of file parser.c.

574 {
576  ALLOCATOR_PROPERTIES actual;
577 
578  if (ppropInputRequest->cbAlign && ppropInputRequest->cbAlign != This->allocProps.cbAlign)
579  FIXME("Requested Buffer cbAlign mismatch %i,%i\n",This->allocProps.cbAlign, ppropInputRequest->cbAlign);
580  if (ppropInputRequest->cbPrefix)
581  FIXME("Requested Buffer cbPrefix mismatch %i,%i\n",This->allocProps.cbPrefix, ppropInputRequest->cbPrefix);
582  if (ppropInputRequest->cbBuffer)
583  FIXME("Requested Buffer cbBuffer mismatch %i,%i\n",This->allocProps.cbBuffer, ppropInputRequest->cbBuffer);
584  if (ppropInputRequest->cBuffers)
585  FIXME("Requested Buffer cBuffers mismatch %i,%i\n",This->allocProps.cBuffers, ppropInputRequest->cBuffers);
586 
587  return IMemAllocator_SetProperties(pAlloc, &This->allocProps, &actual);
588 }
#define FIXME(fmt,...)
Definition: debug.h:110

◆ Parser_OutputPin_GetMediaType()

static HRESULT WINAPI Parser_OutputPin_GetMediaType ( BasePin iface,
int  iPosition,
AM_MEDIA_TYPE pmt 
)
static

Definition at line 590 of file parser.c.

591 {
593  if (iPosition < 0)
594  return E_INVALIDARG;
595  if (iPosition > 0)
596  return VFW_S_NO_MORE_ITEMS;
597  CopyMediaType(pmt, This->pmt);
598  return S_OK;
599 }
#define VFW_S_NO_MORE_ITEMS
Definition: vfwmsgs.h:19
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
Definition: filtergraph.c:706
#define S_OK
Definition: intsafe.h:59

◆ Parser_OutputPin_QueryInterface()

static HRESULT WINAPI Parser_OutputPin_QueryInterface ( IPin iface,
REFIID  riid,
LPVOID ppv 
)
static

Definition at line 643 of file parser.c.

644 {
646 
647  TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv);
648 
649  *ppv = NULL;
650 
652  *ppv = iface;
653  else if (IsEqualIID(riid, &IID_IPin))
654  *ppv = iface;
655  /* The Parser filter does not support querying IMediaSeeking, return it directly */
656  else if (IsEqualIID(riid, &IID_IMediaSeeking))
657  *ppv = &impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter)->sourceSeeking;
658 
659  if (*ppv)
660  {
661  IUnknown_AddRef((IUnknown *)(*ppv));
662  return S_OK;
663  }
664 
665  FIXME("No interface for %s!\n", qzdebugstr_guid(riid));
666 
667  return E_NOINTERFACE;
668 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
const char * qzdebugstr_guid(const GUID *id)
Definition: main.c:279
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
static Parser_OutputPin * unsafe_impl_Parser_OutputPin_from_IPin(IPin *iface)
Definition: parser.h:81
SourceSeeking sourceSeeking
Definition: parser.h:41
const GUID IID_IPin
Definition: pincontrol.cpp:15
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ Parser_OutputPin_Release()

static ULONG WINAPI Parser_OutputPin_Release ( IPin iface)
static

Definition at line 670 of file parser.c.

671 {
673  ULONG refCount = InterlockedDecrement(&This->pin.pin.refCount);
674 
675  TRACE("(%p)->() Release from %d\n", iface, refCount + 1);
676 
677  if (!refCount)
678  {
679  FreeMediaType(This->pmt);
680  CoTaskMemFree(This->pmt);
681  FreeMediaType(&This->pin.pin.mtCurrent);
682  if (This->pin.pAllocator)
683  IMemAllocator_Release(This->pin.pAllocator);
685  return 0;
686  }
687  return refCount;
688 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
static void FreeMediaType(AM_MEDIA_TYPE *pMediaType)
Definition: filtergraph.c:692
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedDecrement
Definition: armddk.h:52
static Parser_OutputPin * unsafe_impl_Parser_OutputPin_from_IPin(IPin *iface)
Definition: parser.h:81
unsigned int ULONG
Definition: retypes.h:1

◆ 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_PullPin_Disconnect()

static HRESULT WINAPI Parser_PullPin_Disconnect ( IPin iface)
static

Definition at line 759 of file parser.c.

760 {
761  HRESULT hr;
763 
764  TRACE("()\n");
765 
766  EnterCriticalSection(&This->thread_lock);
767  EnterCriticalSection(This->pin.pCritSec);
768  {
769  if (This->pin.pConnectedTo)
770  {
771  FILTER_STATE state;
772  ParserImpl *Parser = impl_from_IBaseFilter(This->pin.pinInfo.pFilter);
773 
774  LeaveCriticalSection(This->pin.pCritSec);
775  hr = IBaseFilter_GetState(This->pin.pinInfo.pFilter, INFINITE, &state);
776  EnterCriticalSection(This->pin.pCritSec);
777 
778  if (SUCCEEDED(hr) && (state == State_Stopped) && SUCCEEDED(Parser->fnDisconnect(Parser)))
779  {
780  LeaveCriticalSection(This->pin.pCritSec);
781  PullPin_Disconnect(iface);
782  EnterCriticalSection(This->pin.pCritSec);
783  hr = Parser_RemoveOutputPins(impl_from_IBaseFilter(This->pin.pinInfo.pFilter));
784  }
785  else
787  }
788  else
789  hr = S_FALSE;
790  }
791  LeaveCriticalSection(This->pin.pCritSec);
792  LeaveCriticalSection(&This->thread_lock);
793 
794  return hr;
795 }
HRESULT hr
Definition: shlfolder.c:183
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: pin.h:70
HRESULT WINAPI PullPin_Disconnect(IPin *iface)
Definition: pin.c:803
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
static int state
Definition: maze.c:121
#define VFW_E_NOT_STOPPED
Definition: vfwmsgs.h:75
PFN_DISCONNECT fnDisconnect
Definition: parser.h:36
static HRESULT Parser_RemoveOutputPins(ParserImpl *This)
Definition: parser.c:482
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INFINITE
Definition: serial.h:102
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ Parser_PullPin_EnumMediaTypes()

static HRESULT WINAPI Parser_PullPin_EnumMediaTypes ( IPin iface,
IEnumMediaTypes **  ppEnum 
)
static

Definition at line 816 of file parser.c.

817 {
818  BasePin *This = (BasePin *)iface;
819 
820  TRACE("(%p/%p)->(%p)\n", This, iface, ppEnum);
821 
823 }
HRESULT WINAPI BasePinImpl_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *pmt)
Definition: pin.c:175
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes **ppEnum)
Definition: mediatype.c:108
LONG WINAPI BasePinImpl_GetMediaTypeVersion(BasePin *This)
Definition: pin.c:182

◆ Parser_PullPin_QueryInterface()

static HRESULT WINAPI Parser_PullPin_QueryInterface ( IPin iface,
REFIID  riid,
LPVOID ppv 
)
static

Definition at line 734 of file parser.c.

735 {
737 
738  TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv);
739 
740  *ppv = NULL;
741 
742  /*
743  * It is important to capture the request for the IMediaSeeking interface before it is passed
744  * on to PullPin_QueryInterface, this is necessary since the Parser filter does not support
745  * querying IMediaSeeking
746  */
747  if (IsEqualIID(riid, &IID_IMediaSeeking))
748  *ppv = &impl_from_IBaseFilter(This->pin.pinInfo.pFilter)->sourceSeeking;
749 
750  if (*ppv)
751  {
752  IUnknown_AddRef((IUnknown *)(*ppv));
753  return S_OK;
754  }
755 
756  return PullPin_QueryInterface(iface, riid, ppv);
757 }
REFIID riid
Definition: precomp.h:44
const char * qzdebugstr_guid(const GUID *id)
Definition: main.c:279
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT WINAPI PullPin_QueryInterface(IPin *iface, REFIID riid, LPVOID *ppv)
Definition: pin.c:345
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
Definition: pin.h:70
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:59
SourceSeeking sourceSeeking
Definition: parser.h:41
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ Parser_PullPin_ReceiveConnection()

static HRESULT WINAPI Parser_PullPin_ReceiveConnection ( IPin iface,
IPin pReceivePin,
const AM_MEDIA_TYPE pmt 
)
static

Definition at line 797 of file parser.c.

798 {
799  HRESULT hr;
800 
801  TRACE("()\n");
802 
803  hr = PullPin_ReceiveConnection(iface, pReceivePin, pmt);
804  if (FAILED(hr))
805  {
806  BasePin *This = (BasePin *)iface;
807 
808  EnterCriticalSection(This->pCritSec);
810  LeaveCriticalSection(This->pCritSec);
811  }
812 
813  return hr;
814 }
HRESULT hr
Definition: shlfolder.c:183
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
HRESULT WINAPI PullPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:253
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
static HRESULT Parser_RemoveOutputPins(ParserImpl *This)
Definition: parser.c:482
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ 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_RemoveOutputPins()

static HRESULT Parser_RemoveOutputPins ( ParserImpl This)
static

Definition at line 482 of file parser.c.

483 {
484  /* NOTE: should be in critical section when calling this function */
485  HRESULT hr;
486  ULONG i;
487  IPin ** ppOldPins = This->ppPins;
488 
489  TRACE("(%p)\n", This);
490 
491  /* reduce the pin array down to 1 (just our input pin) */
492  This->ppPins = CoTaskMemAlloc(sizeof(IPin *) * 1);
493  memcpy(This->ppPins, ppOldPins, sizeof(IPin *) * 1);
494 
495  for (i = 0; i < This->cStreams; i++)
496  {
497  hr = ((BaseOutputPin *)ppOldPins[i + 1])->pFuncsTable->pfnBreakConnect((BaseOutputPin *)ppOldPins[i + 1]);
498  TRACE("Disconnect: %08x\n", hr);
499  IPin_Release(ppOldPins[i + 1]);
500  }
501 
503  This->cStreams = 0;
504  CoTaskMemFree(ppOldPins);
505 
506  return S_OK;
507 }
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
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
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define S_OK
Definition: intsafe.h:59
Definition: axcore.idl:91
unsigned int ULONG
Definition: retypes.h:1
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:404

Referenced by Parser_PullPin_Disconnect(), and Parser_PullPin_ReceiveConnection().

◆ 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_Seeking_AddRef()

static ULONG WINAPI Parser_Seeking_AddRef ( IMediaSeeking iface)
static

Definition at line 535 of file parser.c.

536 {
538 
539  return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
540 }
static ParserImpl * impl_from_IMediaSeeking(IMediaSeeking *iface)
Definition: parser.c:52

◆ Parser_Seeking_QueryInterface()

static HRESULT WINAPI Parser_Seeking_QueryInterface ( IMediaSeeking iface,
REFIID  riid,
LPVOID ppv 
)
static

Definition at line 528 of file parser.c.

529 {
531 
532  return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
533 }
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
static ParserImpl * impl_from_IMediaSeeking(IMediaSeeking *iface)
Definition: parser.c:52

◆ Parser_Seeking_Release()

static ULONG WINAPI Parser_Seeking_Release ( IMediaSeeking iface)
static

Definition at line 542 of file parser.c.

543 {
545 
546  return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
547 }
static ParserImpl * impl_from_IMediaSeeking(IMediaSeeking *iface)
Definition: parser.c:52

◆ 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

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( quartz  )

Variable Documentation

◆ BaseFuncTable

const BaseFilterFuncTable BaseFuncTable
static
Initial value:
= {
}
static LONG WINAPI Parser_GetPinCount(BaseFilter *iface)
Definition: parser.c:82
static IPin *WINAPI Parser_GetPin(BaseFilter *iface, int pos)
Definition: parser.c:68

Definition at line 91 of file parser.c.

Referenced by Parser_Create().

◆ output_BaseOutputFuncTable

const BaseOutputPinFuncTable output_BaseOutputFuncTable
static
Initial value:
= {
{
},
}
static HRESULT WINAPI Parser_OutputPin_DecideBufferSize(BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest)
Definition: parser.c:573
static HRESULT WINAPI Parser_OutputPin_BreakConnect(BaseOutputPin *This)
Definition: parser.c:623
static HRESULT WINAPI Parser_OutputPin_CheckMediaType(BasePin *pin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:703
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin *This, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:712
static HRESULT WINAPI Parser_OutputPin_GetMediaType(BasePin *iface, int iPosition, AM_MEDIA_TYPE *pmt)
Definition: parser.c:590
LONG WINAPI BasePinImpl_GetMediaTypeVersion(BasePin *This)
Definition: pin.c:182
static HRESULT WINAPI Parser_OutputPin_DecideAllocator(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc)
Definition: parser.c:601

Definition at line 434 of file parser.c.

Referenced by Parser_AddPin().

◆ Parser_InputPin_Vtbl

static const IPinVtbl Parser_InputPin_Vtbl
static
Initial value:
=
{
}
ULONG WINAPI PullPin_Release(IPin *iface)
Definition: pin.c:374
static HRESULT WINAPI Parser_PullPin_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
Definition: parser.c:816
HRESULT WINAPI PullPin_EndFlush(IPin *iface)
Definition: pin.c:773
static HRESULT WINAPI Parser_PullPin_Disconnect(IPin *iface)
Definition: parser.c:759
HRESULT WINAPI BaseInputPinImpl_Connect(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:881
HRESULT WINAPI PullPin_EndOfStream(IPin *iface)
Definition: pin.c:724
static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:797
HRESULT WINAPI BasePinImpl_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
Definition: pin.c:285
HRESULT WINAPI BasePinImpl_ConnectedTo(IPin *iface, IPin **ppPin)
Definition: pin.c:222
HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
Definition: pin.c:273
HRESULT WINAPI BasePinImpl_QueryId(IPin *iface, LPWSTR *Id)
Definition: pin.c:296
HRESULT WINAPI PullPin_BeginFlush(IPin *iface)
Definition: pin.c:739
static HRESULT WINAPI Parser_PullPin_QueryInterface(IPin *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:734
HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *cPin)
Definition: pin.c:329
HRESULT WINAPI PullPin_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
Definition: pin.c:837
HRESULT WINAPI PullPin_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:715
ULONG WINAPI BasePinImpl_AddRef(IPin *iface)
Definition: pin.c:187
HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
Definition: pin.c:248

Definition at line 41 of file parser.c.

Referenced by Parser_Create().

◆ Parser_OutputPin_Vtbl

static const IPinVtbl Parser_OutputPin_Vtbl
static
Initial value:
=
{
}
HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin *iface)
Definition: pin.c:527
static HRESULT WINAPI Parser_OutputPin_QueryInterface(IPin *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:643
static ULONG WINAPI Parser_OutputPin_Release(IPin *iface)
Definition: parser.c:670
HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin *iface)
Definition: pin.c:545
HRESULT WINAPI BasePinImpl_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:311
HRESULT WINAPI BasePinImpl_QueryDirection(IPin *iface, PIN_DIRECTION *pPinDir)
Definition: pin.c:285
HRESULT WINAPI BasePinImpl_ConnectedTo(IPin *iface, IPin **ppPin)
Definition: pin.c:222
HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
Definition: pin.c:318
HRESULT WINAPI BasePinImpl_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
Definition: pin.c:338
HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin *iface)
Definition: pin.c:536
HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
Definition: pin.c:273
HRESULT WINAPI BasePinImpl_QueryId(IPin *iface, LPWSTR *Id)
Definition: pin.c:296
HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *cPin)
Definition: pin.c:329
HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:490
static HRESULT WINAPI Parser_OutputPin_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:690
ULONG WINAPI BasePinImpl_AddRef(IPin *iface)
Definition: pin.c:187
HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
Definition: pin.c:248
HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin *iface)
Definition: pin.c:497

Definition at line 40 of file parser.c.

Referenced by Parser_AddPin().

◆ Parser_Seeking_Vtbl

static const IMediaSeekingVtbl Parser_Seeking_Vtbl
static
Initial value:
=
{
}
HRESULT WINAPI SourceSeekingImpl_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: seeking.c:110
HRESULT WINAPI SourceSeekingImpl_GetRate(IMediaSeeking *iface, double *dRate)
Definition: seeking.c:305
HRESULT WINAPI SourceSeekingImpl_SetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
Definition: seeking.c:218
HRESULT WINAPI SourceSeekingImpl_SetRate(IMediaSeeking *iface, double dRate)
Definition: seeking.c:282
HRESULT WINAPI SourceSeekingImpl_CheckCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: seeking.c:74
static ULONG WINAPI Parser_Seeking_AddRef(IMediaSeeking *iface)
Definition: parser.c:535
HRESULT WINAPI SourceSeekingImpl_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:137
HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
Definition: seeking.c:254
HRESULT WINAPI SourceSeekingImpl_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
Definition: seeking.c:172
HRESULT WINAPI SourceSeekingImpl_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: seeking.c:63
static HRESULT WINAPI Parser_Seeking_QueryInterface(IMediaSeeking *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:528
HRESULT WINAPI SourceSeekingImpl_GetPreroll(IMediaSeeking *iface, LONGLONG *pPreroll)
Definition: seeking.c:319
HRESULT WINAPI SourceSeekingImpl_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
Definition: seeking.c:268
HRESULT WINAPI SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:122
HRESULT WINAPI SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: seeking.c:102
HRESULT WINAPI SourceSeekingImpl_GetDuration(IMediaSeeking *iface, LONGLONG *pDuration)
Definition: seeking.c:145
HRESULT WINAPI SourceSeekingImpl_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
Definition: seeking.c:158
HRESULT WINAPI SourceSeekingImpl_IsFormatSupported(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:95
static ULONG WINAPI Parser_Seeking_Release(IMediaSeeking *iface)
Definition: parser.c:542
HRESULT WINAPI SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
Definition: seeking.c:185

Definition at line 39 of file parser.c.

Referenced by Parser_Create().

◆ wcsInputPinName

const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0}
static

Definition at line 38 of file parser.c.

Referenced by createtestfilter(), and Parser_Create().