25 { {&IID_IUnknown,0}, {&IID_IBaseFilter,0} })
31 dshowdebug(
"ff_dshow_filter_GetClassID(%p)\n",
this);
37 dshowdebug(
"ff_dshow_filter_Stop(%p)\n",
this);
38 this->
state = State_Stopped;
43 dshowdebug(
"ff_dshow_filter_Pause(%p)\n",
this);
44 this->
state = State_Paused;
49 dshowdebug(
"ff_dshow_filter_Run(%p) %"PRId64
"\n",
this, start);
50 this->
state = State_Running;
56 dshowdebug(
"ff_dshow_filter_GetState(%p)\n",
this);
64 dshowdebug(
"ff_dshow_filter_SetSyncSource(%p)\n",
this);
66 if (this->clock != clock) {
68 IReferenceClock_Release(this->clock);
71 IReferenceClock_AddRef(clock);
78 dshowdebug(
"ff_dshow_filter_GetSyncSource(%p)\n",
this);
83 IReferenceClock_AddRef(this->clock);
91 dshowdebug(
"ff_dshow_filter_EnumPins(%p)\n",
this);
99 *enumpin = (IEnumPins *)
new;
105 dshowdebug(
"ff_dshow_filter_FindPin(%p)\n",
this);
109 if (!wcscmp(
id,
L"In")) {
113 *pin = (IPin *) found;
115 return VFW_E_NOT_FOUND;
121 dshowdebug(
"ff_dshow_filter_QueryFilterInfo(%p)\n",
this);
125 if (this->info.pGraph)
126 IFilterGraph_AddRef(this->info.pGraph);
134 dshowdebug(
"ff_dshow_filter_JoinFilterGraph(%p)\n",
this);
138 wcscpy(this->
info.achName, name);
144 dshowdebug(
"ff_dshow_filter_QueryVendorInfo(%p)\n",
this);
155 IBaseFilterVtbl *vtbl = this->vtbl;
174 this->priv_data = priv_data;
long ff_dshow_filter_QueryFilterInfo(DShowFilter *this, FILTER_INFO *info)
#define DECLARE_ADDREF(prefix, class)
DECLARE_QUERYINTERFACE(filter, DShowFilter,{{&IID_IUnknown, 0},{&IID_IBaseFilter, 0}})
unsigned long ff_dshow_pin_AddRef(DShowPin *)
long ff_dshow_filter_GetClassID(DShowFilter *, CLSID *)
static int ff_dshow_filter_Cleanup(DShowFilter *this)
DShowPin * ff_dshow_pin_Create(DShowFilter *filter)
static int64_t start_time
long ff_dshow_filter_JoinFilterGraph(DShowFilter *this, IFilterGraph *graph, const wchar_t *name)
long ff_dshow_filter_SetSyncSource(DShowFilter *this, IReferenceClock *clock)
long ff_dshow_filter_GetSyncSource(DShowFilter *this, IReferenceClock **clock)
long ff_dshow_filter_Run(DShowFilter *this, REFERENCE_TIME start)
long ff_dshow_filter_Stop(DShowFilter *this)
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
static void callback(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
static int ff_dshow_filter_Setup(DShowFilter *this, void *priv_data, void *callback, enum dshowDeviceType type)
#define DECLARE_RELEASE(prefix, class)
long ff_dshow_filter_Pause(DShowFilter *this)
DShowEnumPins * ff_dshow_enumpins_Create(DShowPin *pin, DShowFilter *filter)
long ff_dshow_filter_FindPin(DShowFilter *this, const wchar_t *id, IPin **pin)
#define DECLARE_DESTROY(prefix, class, func)
#define SETVTBL(vtbl, prefix, fn)
#define DECLARE_CREATE(prefix, class, setup,...)
unsigned long ff_dshow_pin_Release(DShowPin *)
long ff_dshow_filter_GetState(DShowFilter *this, DWORD ms, FILTER_STATE *state)
long ff_dshow_filter_QueryVendorInfo(DShowFilter *this, wchar_t **info)
long ff_dshow_filter_EnumPins(DShowFilter *this, IEnumPins **enumpin)