如何得到USB摄像头的数据格式是YUY2还是MJPG?
USB摄像头用DirectShow实现视频预览和按键拍照(CCapture类改的)。摄像头在不同的电脑上输出的数据格式不一样,有的是YUY2格式,有的是MJPG格式(通过调用DirectShow的数据格式属性页看到的,这个代码也是从网上找的)。
我如何能得到摄像头在电脑上的数据格式,有了数据格式就可以正确的设置参数了。
如果是YUY2的格式,mt.subtype = MEDIASUBTYPE_RGB24;按键拍照得到的就是bmp图片的数据;
如果是MJPE的格式,mt.subtype = MEDIASUBTYPE_MJPG;按键拍照得到的就是jpg图片的数据;
跪求!!!
[解决办法]
这要看摄像头的吧!
[解决办法]
搞错了吧。
YUY2跟RGB是不一样的。
MJPG是压缩的一种编码格式,跟jpg压缩格式是不一样的。
如果你要拍照,只在在TransformFilter里抓图就行了。
要存储为BMP就直接按BMP文件的格式存储就行了,要是想存为JPG的就得用jpeblib库自己再实现压缩后再存储。
抓图参考例子:DXSDK\Samples\C++\DirectShow\Editing\StillCap
[解决办法]
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);}
[解决办法]
通过pAMStreamConfig设置摄像头的参数。
查看DXSDK\Samples\C++\DirectShow\Capture\AMCap例子。
“Set &Frame Rate...”菜单
[解决办法]
没有sdk,或者sdk中没有接口的话,估计很难
[解决办法]
记得VFW有个API可以跳出来一个对话框,让用户选择支持的分辨率,
就可以看到支持的格式.