DirectShow中枚举摄像头分辨率

最近没有写程序,主要在做一些文字工作,转发一下以前自己写的一个关于摄像头枚举的问题吧


讲讲DirectShow中枚举摄像头的采集分辨率,这是看代码得来的信息。查这方面的资料确实不太方便,找了好久都没有找到。在这里大部分是写的代码,里面如果有错误请联系本人。。。嘿嘿。。。
 
       用一个函数来完成得到摄像头的采集分辨率:
 
#include"SmartPtr.h"   // 这个头文件参考Windows SDK里面DirectShow部分的代码,里面有这个头文件
#include<dshow.h>
#include<fstream>
HRESULT GetCaptureRatio(IBaseFilter* pCapFilter, ICaptureGraphBuilder2* pBuild) {
       HRESULT hr;
       SmartPtr<IAMStreamConfig> pam;
       hr = pBuild->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
                  pCapFilter, IID_IAMStreamConfig, reinterpret_cast<void**>(&pam)); // 得到媒体控制接口
 
       int nCount = 0;
       int nSize = 0;
       hr = pam->GetNumberOfCapabilities(&nCount, &nSize);
 
       ofstream outfile("capturesize.txt"); // 准备写入文件
 
       // 判断是否为视频信息
       if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == nSize) {
               for (int i=0; i<nCount; i++) {
                       VIDEO_STREAM_CONFIG_CAPS scc;
                       AM_MEDIA_TYPE* pmmt;
 
                        hr = pam->GetStreamCaps(i, &pmmt, reinterpret_cast<BYTE*>(&SCC));
 
                        if (pmmt->formattype == FORMAT_VideoInfo) {
                               VIDEOINFOHEADER* pvih = reinterpret_cast<VIDEOINFOHEADER*>(pmmt->pbFormat);
 
                               int nwid = pvih->bmiHeader.biWidth; // 得到采集的宽
                               int nhei = pvih->bmiHeader.biHeight; // 得到采集的高
                               outfile << nwid << " * " << nhei << endl; // 写入文件
                       }
               }
       }
 
       outfile.close(); // 关闭文件
       reture(hr);
}

你可能感兴趣的:(windows,工作,Stream,video)