Я перечисляю свойства UVC для камеры с использованием интерфейса IKsTopologyInfo и IKsControl. Я использую как MFT, так и Direct Показать этот код. При перечислении я получаю различные GUID, например CLSID_IAMCameraControl, CLSID_IAMVideoProcAmp и многие другие.Перечисление объектов UVC Свойства набора свойств камеры
Теперь IAMVideoProcAmp Поддержка 10 properties и IAMCameraControl поддерживают 7 properties
Не все камеры поддерживают все свойства items.I хотела знать точные свойства (перечисление индекс/значение), поддерживаемые любую camera.Can мы запрашиваем это с помощью IKsTopologyInfo и IKsControl? Это так.
Вот код для перечисления свойств, т.е. этот код дает мне интерфейс CLSID_IAMCameraControl, CLSID_IAMVideoProcAmp
HRESULT hRet = S_OK;
CComPtr<IKsTopologyInfo> ksTopology = NULL;
BYTE* pList = NULL;
do
{
if(!m_pMediaSource)
break;
if(m_SuppPropSetGUIDS.size())
break;
hRet = m_pMediaSource->QueryInterface(IID_PPV_ARGS(&ksTopology));
if(FAILED(hRet))
break;
ksTopology->get_NumNodes(&m_dwNumNodes);
for (ULONG ulNode=0; ulNode < m_dwNumNodes; ulNode++)
{
CComPtr<IKsControl> ksControl = 0;
GUID nodeType = GUID_NULL;
DWORD dwBytesReturned = 0;
KSPROPERTY KsProp = {0};
KsProp.Set = GUID_NULL;
KsProp.Id = 0; // Ignored
KsProp.Flags = KSPROPERTY_TYPE_SETSUPPORT;
KSP_NODE KsNode = {0};
KsNode.Property.Set = GUID_NULL;
KsNode.NodeId = ulNode;
KsNode.Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
ksTopology->get_NodeType(ulNode, &nodeType);
hRet = ksTopology->CreateNodeInstance(ulNode, IID_PPV_ARGS(&ksControl));
if(FAILED(hRet))
continue;
hRet = ksControl->KsProperty(&KsProp, sizeof(KSPROPERTY), NULL, NULL, &dwBytesReturned);
if(hRet == HRESULT_FROM_WIN32(ERROR_MORE_DATA) && dwBytesReturned)
{
pList = (BYTE*)calloc(dwBytesReturned, sizeof(BYTE));
if (pList == NULL)
continue;
hRet = ksControl->KsProperty(&KsProp, sizeof(KSPROPERTY), pList, dwBytesReturned, &dwBytesReturned);
if(FAILED(hRet))
break;
}
else
continue;
GUID* pGuidList = (GUID*)pList;
int iCount = dwBytesReturned/sizeof(GUID);
for(int i = 0; i < iCount; i++)
{
if(!LookUpPS(&pGuidList[i]))
m_SuppPropSetGUIDS.push_back(pGuidList[i]);
}
if(pList)
free(pList);
pList = NULL;
}
}while(FALSE);
if(pList)
free(pList);
pList = NULL;
return hRet;
Thanks..I уже реализовали его в C++ я просто хотел бы знать, почему IKsTopologyInfo не работает. Вот. –
Одна возможность: некоторые камеры не используют KsProxy.ax и вместо этого предоставляют свой собственный фильтр захвата видео DirectShow. Следовательно, они, вероятно, не реализуют интерфейс IKsPropertySet. –