本文整理汇总了C++中IPin_Release函数的典型用法代码示例。如果您正苦于以下问题:C++ IPin_Release函数的具体用法?C++ IPin_Release怎么用?C++ IPin_Release使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IPin_Release函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: QT_RemoveOutputPins
/*
* Input Pin
*/
static HRESULT QT_RemoveOutputPins(QTSplitter *This)
{
HRESULT hr;
TRACE("(%p)\n", This);
if (This->pVideo_Pin)
{
OutputQueue_Destroy(This->pVideo_Pin->queue);
hr = BaseOutputPinImpl_BreakConnect(&This->pVideo_Pin->pin);
TRACE("Disconnect: %08x\n", hr);
IPin_Release(&This->pVideo_Pin->pin.pin.IPin_iface);
This->pVideo_Pin = NULL;
}
if (This->pAudio_Pin)
{
OutputQueue_Destroy(This->pAudio_Pin->queue);
hr = BaseOutputPinImpl_BreakConnect(&This->pAudio_Pin->pin);
TRACE("Disconnect: %08x\n", hr);
IPin_Release(&This->pAudio_Pin->pin.pin.IPin_iface);
This->pAudio_Pin = NULL;
}
BaseFilterImpl_IncrementPinVersion(&This->filter);
return S_OK;
}
开发者ID:Kelimion,项目名称:wine,代码行数:28,代码来源:qtsplitter.c
示例2: NullRendererInner_Release
static ULONG WINAPI NullRendererInner_Release(IUnknown * iface)
{
ICOM_THIS_MULTI(NullRendererImpl, IInner_vtbl, iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
TRACE("(%p/%p)->() Release from %d\n", This, iface, refCount + 1);
if (!refCount)
{
IPin *pConnectedTo;
if (This->pClock)
IReferenceClock_Release(This->pClock);
if (SUCCEEDED(IPin_ConnectedTo((IPin *)This->pInputPin, &pConnectedTo)))
{
IPin_Disconnect(pConnectedTo);
IPin_Release(pConnectedTo);
}
IPin_Disconnect((IPin *)This->pInputPin);
IPin_Release((IPin *)This->pInputPin);
This->lpVtbl = NULL;
This->csFilter.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->csFilter);
TRACE("Destroying Null Renderer\n");
CoTaskMemFree(This);
return 0;
}
else
return refCount;
}
开发者ID:bilboed,项目名称:wine,代码行数:34,代码来源:nullrenderer.c
示例3: Parser_Destroy
void Parser_Destroy(ParserImpl *This)
{
IPin *connected = NULL;
ULONG pinref;
assert(!This->filter.refCount);
PullPin_WaitForStateChange(This->pInputPin, INFINITE);
/* Don't need to clean up output pins, freeing input pin will do that */
IPin_ConnectedTo(&This->pInputPin->pin.IPin_iface, &connected);
if (connected)
{
assert(IPin_Disconnect(connected) == S_OK);
IPin_Release(connected);
assert(IPin_Disconnect(&This->pInputPin->pin.IPin_iface) == S_OK);
}
pinref = IPin_Release(&This->pInputPin->pin.IPin_iface);
if (pinref)
{
/* Valgrind could find this, if I kill it here */
ERR("pinref should be null, is %u, destroying anyway\n", pinref);
assert((LONG)pinref > 0);
while (pinref)
pinref = IPin_Release(&This->pInputPin->pin.IPin_iface);
}
CoTaskMemFree(This->ppPins);
TRACE("Destroying parser\n");
CoTaskMemFree(This);
}
开发者ID:Dimillian,项目名称:wine,代码行数:32,代码来源:parser.c
示例4: unknown_inner_Release
static ULONG WINAPI unknown_inner_Release(IUnknown *iface)
{
VfwCapture *This = impl_from_IUnknown(iface);
ULONG ref = InterlockedDecrement(&This->filter.refCount);
TRACE("(%p) ref=%d\n", This, ref);
if (!ref)
{
IPin *conn = NULL;
TRACE("destroying everything\n");
if (This->init)
{
if (This->filter.state != State_Stopped)
qcap_driver_stop(This->driver_info, &This->filter.state);
qcap_driver_destroy(This->driver_info);
}
IPin_ConnectedTo(This->pOutputPin, &conn);
if (conn)
{
IPin_Disconnect(conn);
IPin_Disconnect(This->pOutputPin);
IPin_Release(conn);
}
IPin_Release(This->pOutputPin);
BaseFilter_Destroy(&This->filter);
CoTaskMemFree(This);
ObjectRefCount(FALSE);
}
return ref;
}
开发者ID:AndreRH,项目名称:wine,代码行数:33,代码来源:vfwcapture.c
示例5: test_AviCo
static void test_AviCo(void)
{
IPersistPropertyBag *persist_bag;
IPin *pin, *in_pin, *out_pin;
IEnumPins *enum_pins;
IBaseFilter *avico;
PIN_INFO pin_info;
HRESULT hres;
static const WCHAR inputW[] = {'I','n','p','u','t',0};
static const WCHAR outputW[] = {'O','u','t','p','u','t',0};
hres = CoCreateInstance(&CLSID_AVICo, NULL, CLSCTX_INPROC_SERVER, &IID_IBaseFilter, (void**)&avico);
if(hres == REGDB_E_CLASSNOTREG) {
win_skip("CLSID_AVICo not restered\n");
return;
}
ok(hres == S_OK, "Could not create CLSID_AVICo class: %08x\n", hres);
hres = IBaseFilter_QueryInterface(avico, &IID_IPin, (void**)&pin);
ok(hres == E_NOINTERFACE, "QueryInterface(IID_IPin) returned: %08x\n", hres);
hres = IBaseFilter_QueryInterface(avico, &IID_IPersistPropertyBag, (void**)&persist_bag);
ok(hres == S_OK, "QueryInterface(IID_IPersistPropertyBag) returned: %08x\n", hres);
SET_EXPECT(Read_FccHandler);
hres = IPersistPropertyBag_Load(persist_bag, &PropertyBag, NULL);
ok(hres == S_OK, "Load failed: %08x\n", hres);
CHECK_CALLED(Read_FccHandler);
IPersistPropertyBag_Release(persist_bag);
hres = IBaseFilter_EnumPins(avico, &enum_pins);
ok(hres == S_OK, "EnumPins failed: %08x\n", hres);
hres = IEnumPins_Next(enum_pins, 1, &in_pin, NULL);
ok(hres == S_OK, "Next failed: %08x\n", hres);
hres = IPin_QueryPinInfo(in_pin, &pin_info);
ok(hres == S_OK, "QueryPinInfo failed: %08x\n", hres);
ok(pin_info.pFilter == avico, "pin_info.pFilter != avico\n");
ok(pin_info.dir == PINDIR_INPUT, "pin_info.dir = %d\n", pin_info.dir);
ok(!lstrcmpW(pin_info.achName, inputW), "pin_info.achName = %s\n", wine_dbgstr_w(pin_info.achName));
hres = IEnumPins_Next(enum_pins, 1, &out_pin, NULL);
ok(hres == S_OK, "Next failed: %08x\n", hres);
hres = IPin_QueryPinInfo(out_pin, &pin_info);
ok(hres == S_OK, "QueryPinInfo failed: %08x\n", hres);
ok(pin_info.pFilter == avico, "pin_info.pFilter != avico\n");
ok(pin_info.dir == PINDIR_OUTPUT, "pin_info.dir = %d\n", pin_info.dir);
ok(!lstrcmpW(pin_info.achName, outputW), "pin_info.achName = %s\n", wine_dbgstr_w(pin_info.achName));
IEnumPins_Release(enum_pins);
IPin_Release(in_pin);
IPin_Release(out_pin);
IBaseFilter_Release(avico);
}
开发者ID:Dimillian,项目名称:wine,代码行数:59,代码来源:qcap.c
示例6: QT_Destroy
static void QT_Destroy(QTSplitter *This)
{
IPin *connected = NULL;
ULONG pinref;
TRACE("Destroying\n");
EnterCriticalSection(&This->csReceive);
/* Don't need to clean up output pins, disconnecting input pin will do that */
IPin_ConnectedTo(&This->pInputPin.pin.IPin_iface, &connected);
if (connected)
{
IPin_Disconnect(connected);
IPin_Release(connected);
}
pinref = IPin_Release(&This->pInputPin.pin.IPin_iface);
if (pinref)
{
ERR("pinref should be null, is %u, destroying anyway\n", pinref);
assert((LONG)pinref > 0);
while (pinref)
pinref = IPin_Release(&This->pInputPin.pin.IPin_iface);
}
if (This->pQTMovie)
{
DisposeMovie(This->pQTMovie);
This->pQTMovie = NULL;
}
if (This->vContext)
QTVisualContextRelease(This->vContext);
if (This->aSession)
MovieAudioExtractionEnd(This->aSession);
ExitMoviesOnThread();
LeaveCriticalSection(&This->csReceive);
if (This->loaderThread)
{
WaitForSingleObject(This->loaderThread, INFINITE);
CloseHandle(This->loaderThread);
}
if (This->splitterThread)
{
SetEvent(This->runEvent);
WaitForSingleObject(This->splitterThread, INFINITE);
CloseHandle(This->splitterThread);
}
CloseHandle(This->runEvent);
This->csReceive.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->csReceive);
BaseFilter_Destroy(&This->filter);
CoTaskMemFree(This);
}
开发者ID:AmesianX,项目名称:wine,代码行数:58,代码来源:qtsplitter.c
示例7: QualityControlImpl_Notify
HRESULT WINAPI QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm)
{
QualityControlImpl *This = impl_from_IQualityControl(iface);
HRESULT hr = S_FALSE;
TRACE("%p %p { 0x%x %u " XTIME_FMT " " XTIME_FMT " }\n",
This, sender, qm.Type, qm.Proportion,
XTIME(qm.Late), XTIME(qm.TimeStamp));
if (This->tonotify)
return IQualityControl_Notify(This->tonotify, This->self, qm);
if (This->input) {
IPin *to = NULL;
IPin_ConnectedTo(This->input, &to);
if (to) {
IQualityControl *qc = NULL;
IPin_QueryInterface(to, &IID_IQualityControl, (void**)&qc);
if (qc) {
hr = IQualityControl_Notify(qc, This->self, qm);
IQualityControl_Release(qc);
}
IPin_Release(to);
}
}
return hr;
}
开发者ID:AndreRH,项目名称:wine,代码行数:28,代码来源:qualitycontrol.c
示例8: IAMMultiMediaStreamImpl_Release
static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
{
IAMMultiMediaStreamImpl *This = impl_from_IAMMultiMediaStream(iface);
ULONG ref = InterlockedDecrement(&This->ref);
ULONG i;
TRACE("(%p/%p)\n", iface, This);
if (!ref)
{
for(i = 0; i < This->nbStreams; i++)
IMediaStream_Release(This->pStreams[i]);
if (This->ipin)
IPin_Release(This->ipin);
if (This->media_stream_filter)
IBaseFilter_Release(This->media_stream_filter);
if (This->media_seeking)
IMediaSeeking_Release(This->media_seeking);
if (This->media_control)
IMediaControl_Release(This->media_control);
if (This->pFilterGraph)
IGraphBuilder_Release(This->pFilterGraph);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
开发者ID:miurahr,项目名称:wine,代码行数:27,代码来源:amstream.c
示例9: pin_matches
static BOOL pin_matches(IPin *pin, PIN_DIRECTION direction, const GUID *cat, const GUID *type, BOOL unconnected)
{
IPin *partner;
PIN_DIRECTION pindir;
IPin_QueryDirection(pin, &pindir);
if (pindir != direction)
{
TRACE("No match, wrong direction\n");
return FALSE;
}
if (unconnected && IPin_ConnectedTo(pin, &partner) == S_OK)
{
IPin_Release(partner);
TRACE("No match, %p already connected to %p\n", pin, partner);
return FALSE;
}
if (cat || type)
FIXME("Ignoring category/type\n");
TRACE("Match made in heaven\n");
return TRUE;
}
开发者ID:miurahr,项目名称:wine,代码行数:26,代码来源:capturegraph.c
示例10: Parser_RemoveOutputPins
static HRESULT Parser_RemoveOutputPins(ParserImpl * This)
{
/* NOTE: should be in critical section when calling this function */
HRESULT hr;
ULONG i;
IPin ** ppOldPins = This->ppPins;
TRACE("(%p)\n", This);
/* reduce the pin array down to 1 (just our input pin) */
This->ppPins = CoTaskMemAlloc(sizeof(IPin *) * 1);
memcpy(This->ppPins, ppOldPins, sizeof(IPin *) * 1);
for (i = 0; i < This->cStreams; i++)
{
hr = ((BaseOutputPin *)ppOldPins[i + 1])->pFuncsTable->pfnBreakConnect((BaseOutputPin *)ppOldPins[i + 1]);
TRACE("Disconnect: %08x\n", hr);
IPin_Release(ppOldPins[i + 1]);
}
BaseFilterImpl_IncrementPinVersion(&This->filter);
This->cStreams = 0;
CoTaskMemFree(ppOldPins);
return S_OK;
}
开发者ID:Dimillian,项目名称:wine,代码行数:26,代码来源:parser.c
示例11: TransformFilter_InputPin_EndOfStream
static HRESULT WINAPI TransformFilter_InputPin_EndOfStream(IPin * iface)
{
BaseInputPin* This = impl_BaseInputPin_from_IPin(iface);
TransformFilter* pTransform;
IPin* ppin;
HRESULT hr;
TRACE("(%p)->()\n", iface);
/* Since we process samples synchronously, just forward notification downstream */
pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter);
if (!pTransform)
hr = E_FAIL;
else
hr = IPin_ConnectedTo(pTransform->ppPins[1], &ppin);
if (SUCCEEDED(hr))
{
hr = IPin_EndOfStream(ppin);
IPin_Release(ppin);
}
if (FAILED(hr))
ERR("%x\n", hr);
return hr;
}
开发者ID:RareHare,项目名称:reactos,代码行数:25,代码来源:transform.c
示例12: TransformFilter_Release
static ULONG WINAPI TransformFilter_Release(IBaseFilter * iface)
{
TransformFilterImpl *This = (TransformFilterImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->refCount);
TRACE("(%p/%p)->() Release from %d\n", This, iface, refCount + 1);
if (!refCount)
{
ULONG i;
if (This->pClock)
IReferenceClock_Release(This->pClock);
for (i = 0; i < This->npins; i++)
{
IPin *pConnectedTo;
if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[i], &pConnectedTo)))
{
IPin_Disconnect(pConnectedTo);
IPin_Release(pConnectedTo);
}
IPin_Disconnect(This->ppPins[i]);
IPin_Release(This->ppPins[i]);
}
CoTaskMemFree(This->ppPins);
This->lpVtbl = NULL;
This->csFilter.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->csFilter);
TRACE("Destroying transform filter\n");
FreeMediaType(&This->pmt);
CoTaskMemFree(This);
return 0;
}
else
return refCount;
}
开发者ID:mutoso-mirrors,项目名称:reactos,代码行数:43,代码来源:transform.c
示例13: DSoundRender_Release
static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
{
DSoundRenderImpl *This = (DSoundRenderImpl *)iface;
ULONG refCount = BaseFilterImpl_Release(iface);
TRACE("(%p)->() Release from %d\n", This, refCount + 1);
if (!refCount)
{
IPin *pConnectedTo;
if (This->dsbuffer)
IDirectSoundBuffer_Release(This->dsbuffer);
This->dsbuffer = NULL;
if (This->dsound)
IDirectSound_Release(This->dsound);
This->dsound = NULL;
if (SUCCEEDED(IPin_ConnectedTo((IPin *)This->pInputPin, &pConnectedTo)))
{
IPin_Disconnect(pConnectedTo);
IPin_Release(pConnectedTo);
}
IPin_Disconnect((IPin *)This->pInputPin);
IPin_Release((IPin *)This->pInputPin);
This->IBasicAudio_vtbl = NULL;
if (This->seekthru_unk)
IUnknown_Release(This->seekthru_unk);
CloseHandle(This->state_change);
CloseHandle(This->blocked);
TRACE("Destroying Audio Renderer\n");
CoTaskMemFree(This);
return 0;
}
else
return refCount;
}
开发者ID:r6144,项目名称:wine,代码行数:42,代码来源:dsoundrender.c
示例14: fnCaptureGraphBuilder2_RenderStream
static HRESULT WINAPI
fnCaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2 * iface,
const GUID *pCategory,
const GUID *pType,
IUnknown *pSource,
IBaseFilter *pfCompressor,
IBaseFilter *pfRenderer)
{
CaptureGraphImpl *This = impl_from_ICaptureGraphBuilder2(iface);
IPin *pin_in = NULL;
IPin *pin_out = NULL;
HRESULT hr;
FIXME("(%p/%p)->(%s, %s, %p, %p, %p) Stub!\n", This, iface,
debugstr_guid(pCategory), debugstr_guid(pType),
pSource, pfCompressor, pfRenderer);
if (pfCompressor)
FIXME("Intermediate streams not supported yet\n");
if (!This->mygraph)
{
FIXME("Need a capture graph\n");
return E_UNEXPECTED;
}
ICaptureGraphBuilder2_FindPin(iface, pSource, PINDIR_OUTPUT, pCategory, pType, TRUE, 0, &pin_in);
if (!pin_in)
return E_FAIL;
ICaptureGraphBuilder2_FindPin(iface, (IUnknown*)pfRenderer, PINDIR_INPUT, pCategory, pType, TRUE, 0, &pin_out);
if (!pin_out)
{
IPin_Release(pin_in);
return E_FAIL;
}
/* Uses 'Intelligent Connect', so Connect, not ConnectDirect here */
hr = IGraphBuilder_Connect(This->mygraph, pin_in, pin_out);
IPin_Release(pin_in);
IPin_Release(pin_out);
return hr;
}
开发者ID:miurahr,项目名称:wine,代码行数:42,代码来源:capturegraph.c
示例15: qcap_driver_stop
HRESULT qcap_driver_stop(Capture *capBox, FILTER_STATE *state)
{
TRACE("%p -> (%p)\n", capBox, state);
if (*state == State_Stopped)
return S_OK;
EnterCriticalSection(&capBox->CritSect);
if (capBox->thread)
{
if (*state == State_Paused)
ResumeThread(capBox->thread);
capBox->stopped = 1;
capBox->thread = 0;
if (capBox->iscommitted)
{
IMemInputPin *pMem = NULL;
IMemAllocator * pAlloc = NULL;
IPin *pConnect = NULL;
HRESULT hr;
capBox->iscommitted = 0;
hr = IPin_ConnectedTo(capBox->pOut, &pConnect);
if (SUCCEEDED(hr))
hr = IPin_QueryInterface(pConnect, &IID_IMemInputPin, (void **) &pMem);
if (SUCCEEDED(hr))
hr = IMemInputPin_GetAllocator(pMem, &pAlloc);
if (SUCCEEDED(hr))
hr = IMemAllocator_Decommit(pAlloc);
if (pAlloc)
IMemAllocator_Release(pAlloc);
if (pMem)
IMemInputPin_Release(pMem);
if (pConnect)
IPin_Release(pConnect);
if (hr != S_OK && hr != VFW_E_NOT_COMMITTED)
WARN("Decommitting allocator: %x\n", hr);
}
V4l_Unprepare(capBox);
}
*state = State_Stopped;
LeaveCriticalSection(&capBox->CritSect);
return S_OK;
}
开发者ID:bilboed,项目名称:wine,代码行数:54,代码来源:v4l.c
示例16: TransformFilterImpl_Release
ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface)
{
TransformFilter *This = impl_from_IBaseFilter(iface);
ULONG refCount = InterlockedDecrement(&This->filter.refCount);
TRACE("(%p/%p)->() Release from %d\n", This, iface, refCount + 1);
if (!refCount)
{
ULONG i;
for (i = 0; i < This->npins; i++)
{
IPin *pConnectedTo;
if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[i], &pConnectedTo)))
{
IPin_Disconnect(pConnectedTo);
IPin_Release(pConnectedTo);
}
IPin_Disconnect(This->ppPins[i]);
IPin_Release(This->ppPins[i]);
}
CoTaskMemFree(This->ppPins);
TRACE("Destroying transform filter\n");
This->csReceive.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->csReceive);
FreeMediaType(&This->pmt);
QualityControlImpl_Destroy(This->qcimpl);
IUnknown_Release(This->seekthru_unk);
BaseFilter_Destroy(&This->filter);
CoTaskMemFree(This);
return 0;
}
else
return refCount;
}
开发者ID:hoangduit,项目名称:reactos,代码行数:41,代码来源:transform.c
示例17: TransformFilterImpl_Release
ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface)
{
TransformFilter *This = (TransformFilter *)iface;
ULONG refCount = BaseFilterImpl_Release(iface);
TRACE("(%p/%p)->() Release from %d\n", This, iface, refCount + 1);
if (!refCount)
{
ULONG i;
for (i = 0; i < This->npins; i++)
{
IPin *pConnectedTo;
if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[i], &pConnectedTo)))
{
IPin_Disconnect(pConnectedTo);
IPin_Release(pConnectedTo);
}
IPin_Disconnect(This->ppPins[i]);
IPin_Release(This->ppPins[i]);
}
CoTaskMemFree(This->ppPins);
TRACE("Destroying transform filter\n");
FreeMediaType(&This->pmt);
CoTaskMemFree(This);
return 0;
}
else
return refCount;
}
开发者ID:carlosbislip,项目名称:wine,代码行数:36,代码来源:transform.c
示例18: test_basefilter
static void test_basefilter(void)
{
IEnumPins *pin_enum = NULL;
IBaseFilter *base = NULL;
IPin *pins[2];
ULONG ref;
HRESULT hr;
IUnknown_QueryInterface(pAviSplitter, &IID_IBaseFilter, (void **)&base);
if (base == NULL)
{
/* test_query_interface handles this case */
skip("No IBaseFilter\n");
return;
}
hr = IBaseFilter_EnumPins(base, NULL);
ok(hr == E_POINTER, "hr = %08x and not E_POINTER\n", hr);
hr= IBaseFilter_EnumPins(base, &pin_enum);
ok(hr == S_OK, "hr = %08x and not S_OK\n", hr);
hr = IEnumPins_Next(pin_enum, 1, NULL, NULL);
ok(hr == E_POINTER, "hr = %08x and not E_POINTER\n", hr);
hr = IEnumPins_Next(pin_enum, 2, pins, NULL);
ok(hr == E_INVALIDARG, "hr = %08x and not E_INVALIDARG\n", hr);
pins[0] = (void *)0xdead;
pins[1] = (void *)0xdeed;
hr = IEnumPins_Next(pin_enum, 2, pins, &ref);
ok(hr == S_FALSE, "hr = %08x instead of S_FALSE\n", hr);
ok(pins[0] != (void *)0xdead && pins[0] != NULL,
"pins[0] = %p\n", pins[0]);
if (pins[0] != (void *)0xdead && pins[0] != NULL)
{
test_pin(pins[0]);
IPin_Release(pins[0]);
}
ok(pins[1] == (void *)0xdeed, "pins[1] = %p\n", pins[1]);
ref = IEnumPins_Release(pin_enum);
ok(ref == 0, "ref is %u and not 0!\n", ref);
IBaseFilter_Release(base);
}
开发者ID:hoangduit,项目名称:reactos,代码行数:48,代码来源:avisplitter.c
示例19: IEnumMediaTypesImpl_Release
static ULONG WINAPI IEnumMediaTypesImpl_Release(IEnumMediaTypes * iface)
{
IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
ULONG ref = InterlockedDecrement(&This->refCount);
TRACE("(%p)->(): new ref = %u\n", iface, ref);
if (!ref)
{
ULONG i;
for (i = 0; i < This->enumMediaDetails.cMediaTypes; i++)
FreeMediaType(&This->enumMediaDetails.pMediaTypes[i]);
CoTaskMemFree(This->enumMediaDetails.pMediaTypes);
IPin_Release(&This->basePin->IPin_iface);
CoTaskMemFree(This);
}
return ref;
}
开发者ID:mvardan,项目名称:ros-svn-mirror,代码行数:18,代码来源:mediatype.c
示例20: MediaStreamFilterImpl_Release
static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter *iface)
{
IMediaStreamFilterImpl *This = impl_from_IMediaStreamFilter(iface);
ULONG ref = BaseFilterImpl_Release(&This->filter.IBaseFilter_iface);
TRACE("(%p)->(): new ref = %u\n", iface, ref);
if (!ref)
{
ULONG i;
for (i = 0; i < This->nb_streams; i++)
{
IMediaStream_Release(This->streams[i]);
IPin_Release(This->pins[i]);
}
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
开发者ID:aidfarh,项目名称:wine,代码行数:20,代码来源:mediastreamfilter.c
注:本文中的IPin_Release函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论