[em2]  各位大哥大姐,能帮帮我吗?具体是这样子的:
  以下是WMFSDK95\samples\wmvcopy\wmvcopy.cpp的部分代码,OnTime和OnStreamSample是两个回调函数;我的问题是有没有办法将调用OnStreamSample时的参数实时写入内存,即相同的数据写入到内存的速度和播放这段数据所需要的时间相等,时间要精确,以下是我实现的代码,目的是将播放1秒的数据写入到内存的总时间是1秒,不知道对不对?有没有更好的方法?

{wmvcopy本来是读取一个WMV文件,经过处理后写入到另一个文件,我把她修改了一下,让她实时写入到一个指定的内存中}


struct DATA{
WORD wStreamNum;
QWORD SampleTime;
DWORD dwFlags;
DWORD pdwLength;
};定义数据头
BYTE *BUFF = new BYTE[10000000];  //指定的内存
DWORD BuffSeek = 0;               //内存写偏移
DWORD systemtime = 0;             //储存上一次调用OnTime的时间
 
//----------------------------------------------------------------------------
HRESULT CWMVCopy::OnTime( /* [in] */ QWORD qwCurrentTime,
                          /* [in] */ void __RPC_FAR * pvContext)
{
   
      if( !m_fEOF )
    {
        m_qwReaderTime += 10000000;

        HRESULT hr = m_pReaderAdvanced->DeliverTime( m_qwReaderTime );
        
        if( FAILED( hr ) )
        {
                m_hr = hr;
            SetEvent( m_hEvent );
        }
    }
  if(systemtime!= 0)
  {
                 while(1)
         {
                Sleep(1);
        if(1000 <= timeGetTime() - systemtime)break;
         }

  systemtime = timeGetTime();

  }
   else
  {

   systemtime = timeGetTime();

   }

    return( S_OK );
}
//-------------------------------------------------------------------------
HRESULT CWMVCopy::OnStreamSample( /* [in] */ WORD wStreamNum,
                                  /* [in] */ QWORD cnsSampleTime,  
                                  /* [in] */ QWORD cnsSampleDuration,
                                  /* [in] */ DWORD dwFlags,
                                  /* [in] */ INSSBuffer __RPC_FAR * pSample,
                                  /* [in] */ void __RPC_FAR * pvContext)
{
   
    HRESULT     hr = S_OK;
    BYTE *ppdwBuffer = NULL;
    DWORD pdwLength = 0;
  pSample->GetBufferAndLength(&ppdwBuffer,&pdwLength);

DATA *data = new DATA;
data->dwFlags = dwFlags;
data->pdwLength = pdwLength;
data->SampleTime = cnsSampleTime;
data->wStreamNum = wStreamNum;
memcpy(BUFF+BuffSeek,data,sizeof(DATA));//写入数据头

BuffSeek+=sizeof(DATA);
memcpy(BUFF+BuffSeek,ppdwBuffer,pdwLength); //写入数据
BuffSeek+=pdwLength;

delete data;

    if( FAILED( hr ) )
    {
        m_hr = hr;
        SetEvent( m_hEvent );
    }
      return( S_OK );
}