-
FilterInfor()Media_Dev 2008. 3. 26. 18:15반응형
This can show the list of connected filter by Graph Manager in DirectShow.
void TraceFilterInfo()
{
IEnumFilters *pIEnumFilters = NULL;
HRESULT hRes = S_OK;
hRes = m_pGraph->EnumFilters(&pIEnumFilters);
IBaseFilter *pIBaseFilter_Enum = NULL;
CLSID clsid;
FILTER_INFO filter_info;
ULONG ulHowManyPins = 0;while (hRes ==S_OK)
{
hRes = pIEnumFilters->Next(1, &pIBaseFilter_Enum, 0);
pIBaseFilter_Enum->GetClassID(&clsid);
pIBaseFilter_Enum->QueryFilterInfo(&filter_info);TRACE(L"%s\n", filter_info.achName);
if(hRes == S_OK)
{
//When we find one ... loop through it's pins.
HRESULT hRes2 = S_OK;
IEnumPins *pIEnumPins = NULL;
IPin *pIPin = NULL;PIN_DIRECTION pin_direction;
bool locHasOutputs = false;
hRes2 = pIBaseFilter_Enum->EnumPins(&pIEnumPins);if(hRes2 == S_OK)
{
while(hRes2 == S_OK)
{
//Loop through the pins.
hRes2 = pIEnumPins->Next(1, &pIPin, &ulHowManyPins);
TRACE(L"--- Pin Numbers : %d, ", ulHowManyPins);if(hRes2 == S_OK)
{
pIPin->QueryDirection(&pin_direction);
PIN_INFO pin_info;
pIPin->QueryPinInfo(&pin_info);TRACE(L"%s\n", pin_info.achName);
if (pin_direction == PINDIR_OUTPUT)
{
//Has an output pin... can't be a renderer, break out of the pin loop.
locHasOutputs = true;
break;
}
}
else
TRACE(L"\n");
}
if(!locHasOutputs)
{
//Renderer filter here. Remove it from the graph.
// hRes2 = m_pGraph->RemoveFilter(pIBaseFilter_Enum);
//Break out of the filter loop.
//break;
}
}
}
pIBaseFilter_Enum->Release();
}pIEnumFilters->Release();
}반응형'Media_Dev' 카테고리의 다른 글
wave (0) 2008.08.16 BITMAPINFO (0) 2008.06.10 코덱종류 (0) 2008.04.07 Simple Directmedia Layer (0) 2008.03.18 AVI RIFF file Reference (0) 2008.03.18