在Skype中测试DirectShow过滤器的问题

时间:2017-03-22 17:45:36

标签: c++ directshow skype graphedit

这是FillBuffer函数:

HRESULT CVCamStream::FillBuffer(IMediaSample *pms)
{
    REFERENCE_TIME rtNow;
    REFERENCE_TIME avgFrameTime = ((VIDEOINFOHEADER*)m_mt.pbFormat)->AvgTimePerFrame;

    rtNow = m_rtLastTime;
    m_rtLastTime += avgFrameTime;
    pms->SetTime(&rtNow, &m_rtLastTime);
    pms->SetSyncPoint(TRUE);

    BYTE *pData;
    pms->GetPointer(&pData);
    long lDataLen = pms->GetSize();

    ProcessFrame(hdc, &pData);

    return NOERROR;
}

以及我在ProcessFrame内所做的事情:

void ProcessFrame(HDC hdc, BYTE **lpbitmap)
{
    BYTE *q = *lpbitmap;
    const int32_t height = 640;
    const int32_t width = 480;
    for (int y = 0; y < height; y++)
    {
        uint8_t* p = bgra_image_data;
        for (int x = 0; x < width; x++)
        {
            if (p[3] > 0) for (int i = 0; i < 3; i++) q[i] = p[i];

            p += 4;
            q += 3;
        }
    }
}

详细说明,我正在使用相同尺寸的BRGA张图片的字节。

好吧,使用graphedt它就像一个魅力! 相反,选择此过滤器作为Skype源有时会呈现完全黑色,有时它会弄乱一切 - 图像不可读。

在任何情况下,几秒钟后它都会因写入访问冲突而崩溃。 您是否在我的代码中看到任何错误的证据,该图表可能会忽略?

0 个答案:

没有答案