微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从另一个 DirectShow 过滤器或捕获设备填充缓冲区我的虚拟网络摄像头

如何解决如何从另一个 DirectShow 过滤器或捕获设备填充缓冲区我的虚拟网络摄像头

这是我的代码,当我在 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 举报,一经查实,本站将立刻删除。