Go to the documentation of this file.
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;
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
#define DECLARE_CREATE(prefix, class, setup,...)
DECLARE_QUERYINTERFACE(filter, DShowFilter, { {&IID_IUnknown, 0}, {&IID_IBaseFilter, 0} })
long ff_dshow_filter_EnumPins(DShowFilter *this, IEnumPins **enumpin)
long ff_dshow_filter_QueryFilterInfo(DShowFilter *this, FILTER_INFO *info)
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
long ff_dshow_filter_JoinFilterGraph(DShowFilter *this, IFilterGraph *graph, const wchar_t *name)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define DECLARE_ADDREF(prefix, class)
unsigned long ff_dshow_pin_AddRef(DShowPin *)
long ff_dshow_filter_Stop(DShowFilter *this)
long ff_dshow_filter_GetSyncSource(DShowFilter *this, IReferenceClock **clock)
static int ff_dshow_filter_Cleanup(DShowFilter *this)
long ff_dshow_filter_Run(DShowFilter *this, REFERENCE_TIME start)
#define SETVTBL(vtbl, prefix, fn)
long ff_dshow_filter_SetSyncSource(DShowFilter *this, IReferenceClock *clock)
static void callback(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
long ff_dshow_filter_Pause(DShowFilter *this)
static int64_t start_time
static int ff_dshow_filter_Setup(DShowFilter *this, void *priv_data, void *callback, enum dshowDeviceType type)
#define DECLARE_DESTROY(prefix, class, func)
unsigned long ff_dshow_pin_Release(DShowPin *)
DShowEnumPins * ff_dshow_enumpins_Create(DShowPin *pin, DShowFilter *filter)
long ff_dshow_filter_QueryVendorInfo(DShowFilter *this, wchar_t **info)
#define DECLARE_RELEASE(prefix, class)
long ff_dshow_filter_FindPin(DShowFilter *this, const wchar_t *id, IPin **pin)
DShowPin * ff_dshow_pin_Create(DShowFilter *filter)
long ff_dshow_filter_GetClassID(DShowFilter *, CLSID *)
long ff_dshow_filter_GetState(DShowFilter *this, DWORD ms, FILTER_STATE *state)