Initial
This commit is contained in:
49
dvcap/Nuker.cpp
Normal file
49
dvcap/Nuker.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <dvcap/nuker.hpp>
|
||||
|
||||
Nuker::Nuker(ComPointer<IGraphBuilder> &graphBuilder)
|
||||
: mGraphBuilder(graphBuilder)
|
||||
{
|
||||
mGraphBuilder->AddRef(); // make sure this does what you want (ie) we don't want the
|
||||
} // graphBuilder to be destroyed when the constructor fires
|
||||
|
||||
Nuker::~Nuker()
|
||||
{
|
||||
}
|
||||
|
||||
bool Nuker::nukeFilter(ComPointer<IBaseFilter> &baseFilter,bool nukeDownstream,bool isDeviceFilter)
|
||||
{
|
||||
ComPointer<IEnumPins> enumPins;
|
||||
ComPointer<IPin> pin;
|
||||
ULONG fetched=0;
|
||||
PIN_INFO pinInfo;
|
||||
|
||||
if(!baseFilter.isOkay())return false;
|
||||
if(!ComResult(baseFilter->EnumPins((IEnumPins**)enumPins)).success())
|
||||
message("[Nuker::nukeFilter]baseFilter->EnumPins((IEnumPins**)enumPins) failed.");
|
||||
enumPins->Reset();
|
||||
while(ComResult(enumPins->Next(1,(IPin**)pin,&fetched)).success())
|
||||
{
|
||||
ComPointer<IPin> toPin;
|
||||
if(!pin.isOkay())break;
|
||||
if(ComResult(pin->ConnectedTo((IPin**)toPin)).success()&&toPin.isOkay())
|
||||
{
|
||||
if(!ComResult(toPin->QueryPinInfo(&pinInfo)).success())
|
||||
message("[Nuker::nukeFilter]toPin->QueryPinInfo(&pinInfo) Failed.");
|
||||
if(PINDIR_INPUT==pinInfo.dir && nukeDownstream)
|
||||
{
|
||||
ComPointer<IBaseFilter> pinFilter(pinInfo.pFilter);
|
||||
nukeFilter(pinFilter,nukeDownstream,isDeviceFilter); // have to do something with first argument
|
||||
mGraphBuilder->Disconnect(toPin);
|
||||
mGraphBuilder->Disconnect(pin);
|
||||
if(!isDeviceFilter)
|
||||
{
|
||||
if(!ComResult(mGraphBuilder->RemoveFilter(pinInfo.pFilter)).success())
|
||||
{
|
||||
message("[Nuker::nukeFilter] mGraphBuilder->RemoveFilter(pinInfo.pFilter).");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user