IltmmPlay::get_SourceStream Example for C++

// This method will fill the source stream with data from a buffer
void FillSourceFromMemory(UCHAR *pData, long lSize, IltmmPlay *pPlay)
{
   IltmmMemory *pMemSource = NULL;
   
   // try to get the play source stream object
   HRESULT hr = pPlay->get_SourceStream((IUnknown**)&pMemSource);
   if(FAILED(hr) || pMemSource == NULL)
      return;

   // set our desired buffer size
   pMemSource->put_BufferSize(lSize);
   SAFEARRAY sa;
   VARIANT var;

   // setup the safe array
   memset(&sa, 0, sizeof(sa));
   sa.cbElements = sizeof(unsigned char);
   sa.cDims = 1;
   sa.fFeatures = (FADF_AUTO | FADF_FIXEDSIZE);
   sa.pvData = pData;
   sa.rgsabound[0].cElements = lSize;

   // associate the safe array with our variant
   VariantInit(&var);
   V_VT(&var) = (VT_ARRAY | VT_UI1);
   V_ARRAY(&var) = &sa;

   // set the source data to the variant safe array data
   pMemSource->SetData(0, lSize, var);

   // release the source object
   pMemSource->Release();
}