读书人

怎么得到USB摄像头的数据格式是YUY2还

发布时间: 2012-09-22 21:54:54 作者: rapoo

如何得到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
[解决办法]

C/C++ code
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可以跳出来一个对话框,让用户选择支持的分辨率,
就可以看到支持的格式.

读书人网 >VC/MFC

热点推荐