ReactOS  0.4.14-dev-98-gb0d4763
parser.c
Go to the documentation of this file.
1 /*
2  * Parser (Base for parsers and splitters)
3  *
4  * Copyright 2003 Robert Shearman
5  * Copyright 2004-2005 Christian Costa
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include "quartz_private.h"
23 #include "pin.h"
24 
25 #include "vfwmsgs.h"
26 #include "amvideo.h"
27 
28 #include "wine/unicode.h"
29 #include "wine/debug.h"
30 
31 #include <math.h>
32 #include <assert.h>
33 
34 #include "parser.h"
35 
37 
38 static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0};
39 static const IMediaSeekingVtbl Parser_Seeking_Vtbl;
40 static const IPinVtbl Parser_OutputPin_Vtbl;
41 static const IPinVtbl Parser_InputPin_Vtbl;
42 
48 static HRESULT WINAPI Parser_OutputPin_GetMediaType(BasePin *iface, int iPosition, AM_MEDIA_TYPE *pmt);
51 
53 {
54  return CONTAINING_RECORD(iface, ParserImpl, sourceSeeking.IMediaSeeking_iface);
55 }
56 
58 {
59  return CONTAINING_RECORD(iface, ParserImpl, filter.IBaseFilter_iface);
60 }
61 
62 static inline ParserImpl *impl_from_BaseFilter( BaseFilter *iface )
63 {
64  return CONTAINING_RECORD(iface, ParserImpl, filter);
65 }
66 
67 /* FIXME: WRONG */
68 static IPin* WINAPI Parser_GetPin(BaseFilter *iface, int pos)
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 }
81 
83 {
85 
86  TRACE("%p->()\n", This);
87 
88  return This->cStreams;
89 }
90 
94 };
95 
96 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)
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);
135  BaseFilterImpl_Release(&pParser->filter.IBaseFilter_iface);
136  CoTaskMemFree(pParser);
137  }
138 
139  return hr;
140 }
141 
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 }
170 
172 {
173  return BaseFilterImpl_AddRef(iface);
174 }
175 
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 }
212 
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 }
225 
229 {
231 
232  TRACE("%p->(%p)\n", This, pClsid);
233 
234  *pClsid = This->filter.clsid;
235 
236  return S_OK;
237 }
238 
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 }
278 
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 }
312 
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 }
360 
361 HRESULT WINAPI Parser_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
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 }
382 
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 }
396 
398 {
399  return BaseFilterImpl_GetSyncSource(iface, ppClock);
400 }
401 
405 {
406  return BaseFilterImpl_EnumPins(iface,ppEnum);
407 }
408 
410 {
412  FIXME("(%p)->(%s,%p)\n", This, debugstr_w(Id), ppPin);
413 
414  /* FIXME: critical section */
415 
416  return E_NOTIMPL;
417 }
418 
419 HRESULT WINAPI Parser_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo)
420 {
421  return BaseFilterImpl_QueryFilterInfo(iface, pInfo);
422 }
423 
425 {
426  return BaseFilterImpl_JoinFilterGraph(iface, pGraph, pName);
427 }
428 
430 {
431  return BaseFilterImpl_QueryVendorInfo(iface, pVendorInfo);
432 }
433 
435  {
440  },
444 };
445 
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 }
481 
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 }
508 
510 {
511  FIXME("(%p) filter hasn't implemented start position change!\n", iface);
512  return S_OK;
513 }
514 
516 {
517  FIXME("(%p) filter hasn't implemented stop position change!\n", iface);
518  return S_OK;
519 }
520 
522 {
523  FIXME("(%p) filter hasn't implemented rate change!\n", iface);
524  return S_OK;
525 }
526 
527 
529 {
531 
532  return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
533 }
534 
536 {
538 
539  return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
540 }
541 
543 {
545 
546  return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
547 }
548 
549 static const IMediaSeekingVtbl Parser_Seeking_Vtbl =
550 {
571 };
572 
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 }
589 
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 }
600 
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 }
622 
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 }
641 
642 
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 }
669 
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 }
689 
690 static HRESULT WINAPI Parser_OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
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 }
702 
704 {
706 
707  dump_AM_MEDIA_TYPE(pmt);
708 
709  return (memcmp(This->pmt, pmt, sizeof(AM_MEDIA_TYPE)) == 0);
710 }
711 
712 static const IPinVtbl Parser_OutputPin_Vtbl =
713 {
732 };
733 
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 }
758 
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 }
796 
797 static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
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 }
815 
817 {
818  BasePin *This = (BasePin *)iface;
819 
820  TRACE("(%p/%p)->(%p)\n", This, iface, ppEnum);
821 
823 }
824 
825 static const IPinVtbl Parser_InputPin_Vtbl =
826 {
845 };
ULONG WINAPI PullPin_Release(IPin *iface)
Definition: pin.c:374
HRESULT WINAPI SourceSeekingImpl_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: seeking.c:110
const GUID IID_IBaseFilter
HRESULT(* REQUESTPROC)(LPVOID userdata)
Definition: pin.h:60
static HRESULT WINAPI Parser_PullPin_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
Definition: parser.c:816
#define VFW_S_NO_MORE_ITEMS
Definition: vfwmsgs.h:19
ULONG cStreams
Definition: parser.h:40
HRESULT(WINAPI * SourceSeeking_ChangeRate)(IMediaSeeking *iface)
Definition: strmbase.h:270
HRESULT WINAPI BasePinImpl_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *pmt)
Definition: pin.c:175
void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE *pmt)
Definition: enummedia.c:27
HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *pClock)
Definition: filter.c:101
#define REFIID
Definition: guiddef.h:118
HRESULT WINAPI SourceSeekingImpl_GetRate(IMediaSeeking *iface, double *dRate)
Definition: seeking.c:305
#define E_NOINTERFACE
Definition: winerror.h:2364
HRESULT WINAPI SourceSeekingImpl_SetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
Definition: seeking.c:218
HRESULT WINAPI PullPin_EndFlush(IPin *iface)
Definition: pin.c:773
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:422
HRESULT hr
Definition: shlfolder.c:183
static HRESULT WINAPI Parser_PullPin_Disconnect(IPin *iface)
Definition: parser.c:759
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
HRESULT WINAPI SourceSeekingImpl_SetRate(IMediaSeeking *iface, double dRate)
Definition: seeking.c:282
#define VFW_S_STATE_INTERMEDIATE
Definition: vfwmsgs.h:21
REFIID riid
Definition: precomp.h:44
HRESULT WINAPI SourceSeekingImpl_CheckCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: seeking.c:74
HRESULT WINAPI Parser_Pause(IBaseFilter *iface)
Definition: parser.c:279
static LONG WINAPI Parser_GetPinCount(BaseFilter *iface)
Definition: parser.c:82
HRESULT WINAPI Parser_QueryInterface(IBaseFilter *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:142
const char * qzdebugstr_guid(const GUID *id)
Definition: main.c:279
const GUID IID_IPersist
Definition: proxy.cpp:14
HRESULT WINAPI BaseInputPinImpl_Connect(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:881
static HRESULT WINAPI Parser_OutputPin_DecideBufferSize(BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest)
Definition: parser.c:573
HRESULT WINAPI BaseOutputPinImpl_Active(BaseOutputPin *This)
Definition: pin.c:614
static ULONG WINAPI Parser_Seeking_AddRef(IMediaSeeking *iface)
Definition: parser.c:535
REFIID LPVOID * ppv
Definition: atlbase.h:39
VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter *This)
Definition: filter.c:190
HRESULT WINAPI PullPin_QueryInterface(IPin *iface, REFIID riid, LPVOID *ppv)
Definition: pin.c:345
#define assert(x)
Definition: debug.h:53
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
HRESULT WINAPI Parser_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
Definition: parser.c:313
HRESULT(* PFN_QUERY_ACCEPT)(LPVOID iface, const AM_MEDIA_TYPE *pmt)
Definition: parser.h:26
HRESULT WINAPI Parser_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *pGraph, LPCWSTR pName)
Definition: parser.c:424
HRESULT PullPin_WaitForStateChange(PullPin *This, DWORD dwMilliseconds)
Definition: pin.c:708
int rate
Definition: pcmconverter.c:98
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static ULONG WINAPI Parser_OutputPin_Release(IPin *iface)
Definition: parser.c:670
static IPin *WINAPI Parser_GetPin(BaseFilter *iface, int pos)
Definition: parser.c:68
static PullPin * impl_PullPin_from_IPin(IPin *iface)
Definition: pin.h:132
HRESULT WINAPI Parser_GetSyncSource(IBaseFilter *iface, IReferenceClock **ppClock)
Definition: parser.c:397
HRESULT WINAPI SourceSeekingImpl_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:137
HRESULT WINAPI PullPin_EndOfStream(IPin *iface)
Definition: pin.c:724
#define lstrcpynW
Definition: compat.h:397
IPin ** ppPins
Definition: parser.h:39
DWORD Id
Definition: regsvr.c:103
HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
Definition: seeking.c:254
HRESULT WINAPI PullPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:253
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
ULONG WINAPI BaseFilterImpl_Release(IBaseFilter *iface)
Definition: filter.c:64
HRESULT(WINAPI * SourceSeeking_ChangeStop)(IMediaSeeking *iface)
Definition: strmbase.h:272
HRESULT WINAPI PullPin_Disconnect(IPin *iface)
Definition: pin.c:803
static ParserImpl * impl_from_BaseFilter(BaseFilter *iface)
Definition: parser.c:62
static const IPinVtbl Parser_InputPin_Vtbl
Definition: parser.c:41
long LONG
Definition: pedump.c:60
static ParserImpl * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: parser.c:57
static void FreeMediaType(AM_MEDIA_TYPE *pMediaType)
Definition: filtergraph.c:692
HRESULT(WINAPI * SourceSeeking_ChangeStart)(IMediaSeeking *iface)
Definition: strmbase.h:271
#define debugstr_w
Definition: kernel32.h:32
HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin *iface)
Definition: pin.c:545
#define FIXME(fmt,...)
Definition: debug.h:110
HRESULT WINAPI SourceSeekingImpl_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
Definition: seeking.c:172
HRESULT WINAPI Parser_FindPin(IBaseFilter *iface, LPCWSTR Id, IPin **ppPin)
Definition: parser.c:409
static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:797
#define S_FALSE
Definition: winerror.h:2357
HRESULT WINAPI BasePinImpl_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:311
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
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(* PFN_DISCONNECT)(LPVOID iface)
Definition: parser.h:29
HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin *iface, IEnumMediaTypes **ppEnum)
Definition: pin.c:318
static HRESULT WINAPI Parser_OutputPin_BreakConnect(BaseOutputPin *This)
Definition: parser.c:623
#define VFW_E_NOT_CONNECTED
Definition: vfwmsgs.h:48
HRESULT WINAPI Parser_EnumPins(IBaseFilter *iface, IEnumPins **ppEnum)
Definition: parser.c:404
static HRESULT WINAPI Parser_OutputPin_CheckMediaType(BasePin *pin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:703
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
static const WCHAR wcsInputPinName[]
Definition: parser.c:38
HRESULT WINAPI SourceSeekingImpl_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
Definition: seeking.c:63
HRESULT PullPin_PauseProcessing(PullPin *This)
Definition: pin.c:646
static HRESULT WINAPI Parser_Seeking_QueryInterface(IMediaSeeking *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:528
HRESULT WINAPI BaseFilter_Destroy(BaseFilter *This)
Definition: filter.c:214
HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter *iface, LPWSTR *pVendorInfo)
Definition: filter.c:178
#define TRACE(s)
Definition: solgame.cpp:4
static LPSTR pName
Definition: security.c:75
HRESULT WINAPI BasePinImpl_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
Definition: pin.c:338
HRESULT(* PFN_PRE_CONNECT)(IPin *iface, IPin *pConnectPin, ALLOCATOR_PROPERTIES *prop)
Definition: parser.h:27
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
HRESULT WINAPI SourceSeekingImpl_GetPreroll(IMediaSeeking *iface, LONGLONG *pPreroll)
Definition: seeking.c:319
__wchar_t WCHAR
Definition: xmlstorage.h:180
HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin *iface)
Definition: pin.c:536
HRESULT WINAPI SourceSeekingImpl_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
Definition: seeking.c:268
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:122
BaseFilter filter
Definition: parser.h:33
const GUID IID_IUnknown
HRESULT(* PFN_PROCESS_SAMPLE)(LPVOID iface, IMediaSample *pSample, DWORD_PTR cookie)
Definition: parser.h:25
#define WINAPI
Definition: msvc.h:8
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
ULONG WINAPI Parser_Release(IBaseFilter *iface)
Definition: parser.c:213
unsigned long DWORD
Definition: ntddk_ex.h:95
WINE_DEFAULT_DEBUG_CHANNEL(quartz)
HRESULT WINAPI Parser_Stop(IBaseFilter *iface)
Definition: parser.c:241
static HRESULT CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
Definition: filtergraph.c:706
HRESULT Parser_AddPin(ParserImpl *This, const PIN_INFO *piOutput, ALLOCATOR_PROPERTIES *props, const AM_MEDIA_TYPE *amt)
Definition: parser.c:446
HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin *iface, PIN_INFO *pInfo)
Definition: pin.c:273
static HRESULT WINAPI Parser_ChangeStop(IMediaSeeking *iface)
Definition: parser.c:515
static const BaseFilterFuncTable BaseFuncTable
Definition: parser.c:91
#define InterlockedDecrement
Definition: armddk.h:52
IBaseFilter IBaseFilter_iface
Definition: strmbase.h:163
HRESULT WINAPI BasePinImpl_QueryId(IPin *iface, LPWSTR *Id)
Definition: pin.c:296
static int state
Definition: maze.c:121
#define VFW_E_NO_ALLOCATOR
Definition: vfwmsgs.h:49
HRESULT WINAPI PullPin_BeginFlush(IPin *iface)
Definition: pin.c:739
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
CRITICAL_SECTION csFilter
Definition: strmbase.h:165
HRESULT WINAPI SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking *iface, GUID *pFormat)
Definition: seeking.c:102
static HRESULT WINAPI Parser_PullPin_QueryInterface(IPin *iface, REFIID riid, LPVOID *ppv)
Definition: parser.c:734
HRESULT WINAPI Parser_QueryVendorInfo(IBaseFilter *iface, LPWSTR *pVendorInfo)
Definition: parser.c:429
HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin *iface, IPin **apPin, ULONG *cPin)
Definition: pin.c:329
HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter *iface, IEnumPins **ppEnum)
Definition: filter.c:135
uint32_t DWORD_PTR
Definition: typedefs.h:63
HRESULT WINAPI BaseOutputPinImpl_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:405
HRESULT WINAPI BaseOutputPinImpl_Inactive(BaseOutputPin *This)
Definition: pin.c:634
#define VFW_E_NOT_STOPPED
Definition: vfwmsgs.h:75
HRESULT(* PFN_CLEANUP)(LPVOID iface)
Definition: parser.h:28
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
HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes **ppEnum)
Definition: mediatype.c:108
#define ERR(fmt,...)
Definition: debug.h:109
HRESULT WINAPI SourceSeekingImpl_GetDuration(IMediaSeeking *iface, LONGLONG *pDuration)
Definition: seeking.c:145
int connected
Definition: main.c:61
static ParserImpl * impl_from_IMediaSeeking(IMediaSeeking *iface)
Definition: parser.c:52
HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:490
HRESULT(* STOPPROCESSPROC)(LPVOID userdata)
Definition: pin.h:65
#define S_OK
Definition: intsafe.h:59
HRESULT WINAPI Parser_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
Definition: parser.c:361
HRESULT WINAPI SourceSeekingImpl_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
Definition: seeking.c:158
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin *This, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:712
GLuint start
Definition: gl.h:1545
PFN_DISCONNECT fnDisconnect
Definition: parser.h:36
static Parser_OutputPin * unsafe_impl_Parser_OutputPin_from_IPin(IPin *iface)
Definition: parser.h:81
static HRESULT WINAPI Parser_ChangeStart(IMediaSeeking *iface)
Definition: parser.c:509
Definition: axcore.idl:91
HRESULT PullPin_StartProcessing(PullPin *This)
Definition: pin.c:623
#define E_NOTIMPL
Definition: ddrawi.h:99
static HRESULT Parser_RemoveOutputPins(ParserImpl *This)
Definition: parser.c:482
HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *pInfo)
Definition: filter.c:145
HRESULT WINAPI PullPin_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
Definition: pin.c:837
static HRESULT WINAPI Parser_OutputPin_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
Definition: parser.c:690
ULONG WINAPI BaseFilterImpl_AddRef(IBaseFilter *iface)
Definition: filter.c:54
HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter *iface, IReferenceClock **ppClock)
Definition: filter.c:119
HRESULT WINAPI Parser_SetSyncSource(IBaseFilter *iface, IReferenceClock *pClock)
Definition: parser.c:383
SourceSeeking sourceSeeking
Definition: parser.h:41
HRESULT WINAPI Parser_GetClassID(IBaseFilter *iface, CLSID *pClsid)
Definition: parser.c:228
HRESULT WINAPI PullPin_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *pmt)
Definition: pin.c:715
Definition: import.c:86
static const IMediaSeekingVtbl Parser_Seeking_Vtbl
Definition: parser.c:39
static const WCHAR props[]
Definition: wbemdisp.c:288
HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *pGraph, LPCWSTR pName)
Definition: filter.c:159
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
unsigned int ULONG
Definition: retypes.h:1
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
HRESULT WINAPI BaseFilter_Init(BaseFilter *This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable *pBaseFuncsTable)
Definition: filter.c:196
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: parser.c:96
static const IPinVtbl Parser_OutputPin_Vtbl
Definition: parser.c:40
ULONG WINAPI BasePinImpl_AddRef(IPin *iface)
Definition: pin.c:187
HRESULT WINAPI SourceSeekingImpl_IsFormatSupported(IMediaSeeking *iface, const GUID *pFormat)
Definition: seeking.c:95
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void Parser_Destroy(ParserImpl *This)
Definition: parser.c:176
HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *pmt)
Definition: pin.c:248
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static HRESULT WINAPI Parser_OutputPin_GetMediaType(BasePin *iface, int iPosition, AM_MEDIA_TYPE *pmt)
Definition: parser.c:590
#define INFINITE
Definition: serial.h:102
ULONG WINAPI Parser_AddRef(IBaseFilter *iface)
Definition: parser.c:171
HRESULT WINAPI Parser_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *pInfo)
Definition: parser.c:419
static ULONG WINAPI Parser_Seeking_Release(IMediaSeeking *iface)
Definition: parser.c:542
const GUID IID_IPin
Definition: pincontrol.cpp:15
LONG WINAPI BasePinImpl_GetMediaTypeVersion(BasePin *This)
Definition: pin.c:182
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:406
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
static const BaseOutputPinFuncTable output_BaseOutputFuncTable
Definition: parser.c:434
HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin *iface)
Definition: pin.c:497
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
static HRESULT WINAPI Parser_OutputPin_DecideAllocator(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc)
Definition: parser.c:601
static HRESULT WINAPI Parser_ChangeRate(IMediaSeeking *iface)
Definition: parser.c:521
#define SUCCEEDED(hr)
Definition: intsafe.h:57
HRESULT WINAPI SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
Definition: seeking.c:185