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;
long WINAPI 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 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 WINAPI ff_dshow_filter_QueryVendorInfo(DShowFilter *this, wchar_t **info)
unsigned long WINAPI ff_dshow_pin_Release(DShowPin *)
long WINAPI ff_dshow_filter_Pause(DShowFilter *this)
long WINAPI ff_dshow_filter_GetSyncSource(DShowFilter *this, IReferenceClock **clock)
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
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)
static int ff_dshow_filter_Cleanup(DShowFilter *this)
#define SETVTBL(vtbl, prefix, fn)
long WINAPI ff_dshow_filter_QueryFilterInfo(DShowFilter *this, FILTER_INFO *info)
static void callback(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
long WINAPI ff_dshow_filter_FindPin(DShowFilter *this, const wchar_t *id, IPin **pin)
long WINAPI ff_dshow_filter_GetState(DShowFilter *this, DWORD ms, FILTER_STATE *state)
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)
long WINAPI ff_dshow_filter_GetClassID(DShowFilter *, CLSID *)
DShowEnumPins * ff_dshow_enumpins_Create(DShowPin *pin, DShowFilter *filter)
long WINAPI ff_dshow_filter_SetSyncSource(DShowFilter *this, IReferenceClock *clock)
#define DECLARE_RELEASE(prefix, class)
long WINAPI ff_dshow_filter_EnumPins(DShowFilter *this, IEnumPins **enumpin)
unsigned long WINAPI ff_dshow_pin_AddRef(DShowPin *)
DShowPin * ff_dshow_pin_Create(DShowFilter *filter)
long WINAPI ff_dshow_filter_Stop(DShowFilter *this)
long WINAPI ff_dshow_filter_Run(DShowFilter *this, REFERENCE_TIME start)