static ULONG WINAPI IEnumPinsImpl_AddRef(IEnumPins * iface) { IEnumPinsImpl *This = impl_from_IEnumPins(iface); ULONG ref = InterlockedIncrement(&This->refCount); TRACE("(%p)->(): new ref = %u\n", iface, ref); return ref; }
static HRESULT WINAPI IEnumPinsImpl_Reset(IEnumPins * iface) { IEnumPinsImpl *This = impl_from_IEnumPins(iface); TRACE("(%p)->()\n", iface); This->Version = This->receive_version(This->base); This->uIndex = 0; return S_OK; }
static HRESULT WINAPI IEnumPinsImpl_Clone(IEnumPins * iface, IEnumPins ** ppEnum) { HRESULT hr; IEnumPinsImpl *This = impl_from_IEnumPins(iface); TRACE("(%p)->(%p)\n", iface, ppEnum); hr = EnumPins_Construct(This->base, This->receive_pin, This->receive_pincount, This->receive_version, ppEnum); if (FAILED(hr)) return hr; return IEnumPins_Skip(*ppEnum, This->uIndex); }
static HRESULT WINAPI IEnumPinsImpl_Skip(IEnumPins * iface, ULONG cPins) { IEnumPinsImpl *This = impl_from_IEnumPins(iface); TRACE("(%p)->(%u)\n", iface, cPins); if (This->Version != This->receive_version(This->base)) return VFW_E_ENUM_OUT_OF_SYNC; if (This->receive_pincount(This->base) >= This->uIndex + cPins) return S_FALSE; This->uIndex += cPins; return S_OK; }
static ULONG WINAPI IEnumPinsImpl_Release(IEnumPins * iface) { IEnumPinsImpl *This = impl_from_IEnumPins(iface); ULONG ref = InterlockedDecrement(&This->refCount); TRACE("(%p)->(): new ref = %u\n", iface, ref); if (!ref) { IBaseFilter_Release(&This->base->IBaseFilter_iface); CoTaskMemFree(This); } return ref; }
static HRESULT WINAPI EnumPins_Next(IEnumPins *iface, ULONG cPins, IPin **ppPins, ULONG *pcFetched) { test_filter *This = impl_from_IEnumPins(iface); check_calls_list("EnumPins_Next", ENUMPINS_NEXT, This->filter_type); ok(cPins == 1, "cPins = %d\n", cPins); ok(ppPins != NULL, "ppPins == NULL\n"); ok(pcFetched != NULL, "pcFetched == NULL\n"); if(This->enum_pins_pos++ < (This->filter_type == INTERMEDIATE_FILTER ? 2 : 1)) { *ppPins = &This->IPin_iface; *pcFetched = 1; return S_OK; } *pcFetched = 0; return S_FALSE; }
static HRESULT WINAPI IEnumPinsImpl_Next(IEnumPins * iface, ULONG cPins, IPin ** ppPins, ULONG * pcFetched) { IEnumPinsImpl *This = impl_from_IEnumPins(iface); HRESULT hr = S_OK; ULONG i = 0; TRACE("(%p)->(%u, %p, %p)\n", iface, cPins, ppPins, pcFetched); if (!ppPins) return E_POINTER; if (cPins > 1 && !pcFetched) return E_INVALIDARG; if (pcFetched) *pcFetched = 0; if (This->Version != This->receive_version(This->base)) return VFW_E_ENUM_OUT_OF_SYNC; while (i < cPins && hr == S_OK) { IPin *pin; pin = This->receive_pin(This->base, This->uIndex + i); if (!pin) break; else ppPins[i] = pin; ++i; } if (pcFetched) *pcFetched = i; This->uIndex += i; if (i < cPins) return S_FALSE; return S_OK; }