如何在directshow的SampleCB中复制样本数据?

时间:2010-08-21 04:44:31

标签: c++ directshow

HRESULT GrabberCB::SampleCB(double SampleTime, IMediaSample *pSample)
{
    //how to copy the pSample to memory for late use?
}

实际上我需要先将它存储到内存中,然后通过管道将其与其他应用程序共享。

我对此很新,有谁知道?

2 个答案:

答案 0 :(得分:2)

您是否考虑使用BufferCB?这样您就可以立即访问缓冲区,而不必处理IMediaSample。

STDMETHODIMP BufferCB(double Time, BYTE *pBuffer, long BufferLen)
{
  //copy pBuffer here
}

答案 1 :(得分:0)

与任何其他COM接口一样,您可以简单地获取引用,并且在释放对象之前不会释放该对象:

pSave = pSample;
pSave->AddRef();

然后,您可以在任意位置使用pSave,然后在完成后调用pSave->Release()

更多地涉及与其他应用程序共享数据。您可以将数据仅发送到其他应用程序,或使用COM编组发送接口指针。