16,471
社区成员
发帖
与我相关
我的任务
分享
template <typename QueryCallbackT>
static VOID QueryMediaType(IAMStreamConfig *pStreamConfig, QueryCallbackT queryCallback, DWORD dwContext)
{
INT nConfigCount= 0;
INT nConfigSize = 0;
pStreamConfig->GetNumberOfCapabilities(&nConfigCount, &nConfigSize);
LPBYTE lpConfig = new BYTE[nConfigSize];
AM_MEDIA_TYPE *pMediaType = NULL;
for (INT i=0; i<nConfigCount; ++i) {
pStreamConfig->GetStreamCaps(i, &pMediaType, lpConfig);
queryCallback(pStreamConfig, i, pMediaType, dwContext);
DeleteMediaType(pMediaType);
}
delete []lpConfig;
lpConfig = NULL;
}
{
HWND hVideoType = ::GetDlgItem(GetSafeHwnd(), IDC_COMBO_VIDEO_TYPE);
ClearComboBox(hVideoType);
CString strVideoDevice;
GetDlgItemText(IDC_COMBO_VIDEO_DEVICE, strVideoDevice);
CComQIPtr<IBaseFilter> pVideoSrc;
CComPtr<IPin> pSrcPin;
CComQIPtr<IAMStreamConfig> pAMStreamConfig;
pVideoSrc = DSUtility::CreateVideoDevice(strVideoDevice);
if (pVideoSrc == NULL) {
return;
}
DSUtility::GetCapturePin(pVideoSrc, &pSrcPin);
if (pSrcPin == NULL) {
return;
}
pAMStreamConfig = pSrcPin;
if (pAMStreamConfig == NULL) {
return;
}
DSUtility::QueryMediaType(pAMStreamConfig, QueryVideoTypeCallback, ForceCast<DWORD>(hVideoType));
ComboBox_SetCurSel(hVideoType, 0);
}