当前位置: 代码迷 >> 多媒体/流媒体开发 >> Filter(Source Filter)怎么读取 一个外部 buffer 中的数据
  详细解决方案

Filter(Source Filter)怎么读取 一个外部 buffer 中的数据

热度:4513   发布时间:2013-02-26 00:00:00.0
Filter(Source Filter)如何读取 一个外部 buffer 中的数据?
Filter(Source Filter)如何读取 一个外部 buffer 中的数据?


 要播放buffer里的数据(从网络中收到的一包一包的), 自已写了一个Filter(Source Filter), 注册进了操作系统.

 自已写的Filter中如何取buffer中的数据呢?


 应用软件(CMedia包装类)按如下方式调用该Filter:

 hr = CoCreateInstance( CLSID_BouncingBall, NULL, 
CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pBall);
 hr = pGB->AddFilter(pBall, L"Bouncing Ball");

 请给一个思路,谢谢.


------解决方案--------------------------------------------------------
BUFFER放到FillBuffer里面处理 这个把数据送到下一级
------解决方案--------------------------------------------------------
怎么似曾相识呢,在哪见过这个帖子

是不是在transformer函数里面修改阿
------解决方案--------------------------------------------------------
用过 共享memory

不知道有什么更好的可以推荐
------解决方案--------------------------------------------------------
directshow最大特点是COM化,而COM的最大特点是接口化,怎么不用接口呢?接口函数,可用回调函数的方法取数据。
------解决方案--------------------------------------------------------
探讨
引用:
BUFFER放到FillBuffer里面处理  这个把数据送到下一级


我的意思是:

原来ball(Filter)的数据buffer是自己生成的。

FillBuffer函数是Filter的函数。已经注册到系统了,不能改变了.
HRESULT CBallStream::FillBuffer(IMediaSample *pms)
{
    BYTE *pData;
    long lDataLen;

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

    FillMemory(pData,0x80,lDataLen);//就这一句就可以
    ...........

    pms->SetSyncPoint(TRUE);
    return NOERROR;
} // FillBuffer


Filter已经注册进了系统。外部的程序调用Filter. 外部的程序获得的数据buffer, 如何给Filter?

是要另外写接口还是有其它什么方法?


------解决方案--------------------------------------------------------
探讨

Filter 中是不是也可以把 对虚拟串口,对网络等的操作封装进去?

  相关解决方案