IltmmConvert::get_SourceStream Example for C

// This method will fill the source stream with
// data from a buffer
void FillSourceFromMemory(UCHAR *pData, long lSize, IltmmConvert *pConvert) 
{
   IltmmMemory *pMemSource = NULL; 
   SAFEARRAY sa; 
   VARIANT var; 

   HRESULT hr = IltmmConvert__get_SourceStream(pConvert, (IUnknown**)&pMemSource); 

   if(FAILED(hr) || pMemSource == NULL) 
      return; 

   IltmmMemory__put_BufferSize(pMemSource, lSize); 
   
   // pass data
   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; 
   VariantInit(&var); 
   V_VT(&var) = (VT_ARRAY | VT_UI1); 
   V_ARRAY(&var) = &sa; 

   IltmmMemory_SetData(pMemSource, 0, lSize, var); 

   IltmmMemory_Release(pMemSource); 
}

This method will fill the source stream with data from a buffer.

L_MULTIMEDIATEX_API void IltmmConvert_get_SourceStream_Example (UCHAR *pData, long lSize, IltmmConvert *pConvert) 
{
   IltmmMemory *pMemSource = NULL; 
   SAFEARRAY sa; 
   VARIANT var; 

   HRESULT hr = IltmmConvert_get_SourceStream(pConvert, (IUnknown**)&pMemSource); 

   if(FAILED(hr) || pMemSource == NULL) 
      return; 

   IltmmMemory_put_BufferSize(pMemSource, lSize); 

   // pass data
   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; 
   VariantInit(&var); 
   V_VT(&var) = (VT_ARRAY | VT_UI1); 
   V_ARRAY(&var) = &sa; 

   IltmmMemory_SetData(pMemSource, 0, lSize, var); 

   IltmmMemory_Release(pMemSource); 
}