2024年5月1日发(作者:)
{
params = nullptr;
IBaseFilter* pFilter;
HRESULT hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter);
if (FAILED(hr))
return hr;
IEnumPins* pinEnum;
hr = pFilter->EnumPins(&pinEnum);
if (FAILED(hr)) {
pFilter->Release();
return hr;
}
List
IPin* pPins;
while (pinEnum->Next(1, &pPins, NULL) == S_OK)
{
PIN_INFO pinInfo;
hr = pPins->QueryPinInfo(&pinInfo);
if (FAILED(hr) || != PINDIR_OUTPUT)
{
pPins->Release();
continue;
}
IEnumMediaTypes* mtEnum;
hr = pPins->EnumMediaTypes(&mtEnum);
if (FAILED(hr))
{
pPins->Release();
continue;
}
AM_MEDIA_TYPE* mt;
while (mtEnum->Next(1, &mt, NULL) == S_OK)
{
VideoParams^ param = nullptr;
if (mt->formattype == FORMAT_VideoInfo)
{
VIDEOINFOHEADER* pVih = reinterpret_cast
param = gcnew VideoParams();
param->FrameWidth = pVih->h;
param->FrameHeight = pVih->ht;
param->AverageFrameRate = pVih->AvgTimePerFrame == 0 ? 0 : 10000000 / pVih->AvgTimePerFrame;
}
else if (mt->formattype == FORMAT_VideoInfo2) {
VIDEOINFOHEADER2* pVih = reinterpret_cast
param = gcnew VideoParams();
param->FrameWidth = pVih->h;
param->FrameHeight = pVih->ht;
param->AverageFrameRate = pVih->AvgTimePerFrame == 0 ? 0 : 10000000 / pVih->AvgTimePerFrame;
}
if (param && param->AverageFrameRate > 1)
{
Boolean isExit = false;
for each (VideoParams ^ item in list)
{
if (item->FrameWidth == param->FrameWidth && item->FrameHeight == param->FrameHeight && item->AverageFrameRate == param->AverageFrameRate)
{
isExit = true;
break;
}
}
if (!isExit)
list->Add(param);
}
}
pPins->Release();
}
pFilter->Release();
params = list->ToArray();
return S_OK;
}
发布评论