问题描述
这是我的代码,当我在 Graph 或 Skype 中使用它时它会重新启动它们我尝试使用“IVMRwindowlessControl9”和过滤器基础,就像任何捕获设备一样我也是 C++ 新手,所以如果我误解了我的意思,我很抱歉有问题请帮助我。
HRESULT CVCamStream::BuildGraph(IGraphBuilder* pGraph,IMediaSample* pSample)
{
REFERENCE_TIME rtNow;
REFERENCE_TIME avgFrameTime = ((VIDEOINFOHEADER*)m_mt.pbFormat)->AvgTimePerFrame;
rtNow = m_rtLastTime;
m_rtLastTime += avgFrameTime;
pSample->SetTime(&rtNow,&m_rtLastTime);
pSample->SetSyncPoint(TRUE);
HRESULT hr = S_OK;
CComPtr<IBaseFilter> pManyCam;
hr = pManyCam.CoCreateInstance(CLSID_ManyCam);
IVMRwindowlessControl9 * controlPtr = NULL;
BYTE* pData=NULL;
hr = controlPtr->GetCurrentimage(&pData);
if (SUCCEEDED(hr))
{
BITMAPINFOHEADER* pBMIH = (BITMAPINFOHEADER*)pData;
DWORD bufSize = pBMIH->biSizeImage;
// Let's create a bmp
BITMAPFILEHEADER bmpHdr;
BITMAPINFOHEADER bmpInfo;
size_t hdrSize = sizeof(bmpHdr);
size_t infSize = sizeof(bmpInfo);
memset(&bmpHdr,hdrSize);
bmpHdr.bfType = ('M' << 8) | 'B';
bmpHdr.bfOffBits = static_cast<DWORD>(hdrSize + infSize);
bmpHdr.bfSize = bmpHdr.bfOffBits + bufSize;
// Builder the bit map info.
memset(&bmpInfo,infSize);
bmpInfo.biSize = static_cast<DWORD>(infSize);
bmpInfo.biWidth = pBMIH->biWidth;
bmpInfo.biHeight = pBMIH->biHeight;
bmpInfo.biPlanes = pBMIH->biPlanes;
bmpInfo.biBitCount = pBMIH->biBitCount;
// boost::shared_arrays are awesome!
//boost::shared_array<BYTE> buf(new BYTE[bmpHdr.bfSize]);//(lpDib);
memcpy(new BYTE[bmpHdr.bfSize],&bmpHdr,hdrSize); // copy the header
memcpy(new BYTE[bmpHdr.bfSize] + hdrSize,&bmpInfo,infSize); // Now copy the info block
memcpy(new BYTE[bmpHdr.bfSize] + bmpHdr.bfOffBits,pData,bufSize);
// Do something with your image data ... serIoUsly...
CoTaskMemFree(pData);
}
return NOERROR;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)