Use Memory Sources

The ltmmConvert and ltmmPlay objects allow the user to supply media data through memory instead of a file. The source can be defined by a global memory handle or by an array.

1.

Define the source using a global memory handle you should allocate global memory, fill it with complete media file data, and assign the handle to the ltmmConvert or ltmmPlay objects. The assignment is performed as follows:

C Source

IltmmPlay* pPlay;   // play object interface (initialized elsewhere) 
HGLOBAL hGlobal;   // allocated and filled elsewhere

IltmmPlay_put_SourceHGlobal (pPlay, (long) hGlobal);

C++ Source

IltmmPlay* pPlay;   // play object interface (initialized elsewhere) 
HGLOBAL hGlobal;   // allocated and filled elsewhere

pPlay->put_SourceHGlobal ((long) hGlobal);

2.

Reset the source by calling the ResetSource function. As long as the global memory handle is assigned to the object, the user must not free the memory.

C Source

IltmmPlay_ResetSource (pPlay);

C++ Source

pPlay->ResetSource ();

 

Once the source has been reset, the user may free the memory.

3.

Another means of supplying memory data to the ltmmConvert and ltmmPlay objects is through a SAFEARRAY as follows:

C Source

ULONG cbData;      // size of the media data (initialized elsewhere) 
BYTE* pData;      // pointer to the media data (initialized elsewhere) 

SAFEARRAY sa;   // array descriptor
VARIANT var; 

// setup the SAFEARRAY to reference the data buffer
sa.cbElements = sizeof(unsigned char); 
sa.cDims = 1; 
sa.cLocks = 0; 
sa.fFeatures = (FADF_STATIC | FADF_FIXEDSIZE); 
sa.pvData = pData; 
sa.rgsabound[0].cElements = cbData; 
sa.rgsabound[0].lLbound = 0; 

// the array must be passed in a VARIANT
VariantInit(&var); 
V_VT(&var) = (VT_ARRAY | VT_UI1); 
V_ARRAY(&var) = &sa; 

// assign the array
IltmmPlay_put_SourceArray (pPlay, var);

C++ Source

ULONG cbData;      // size of the media data (initialized elsewhere) 
BYTE* pData;      // pointer to the media data (initialized elsewhere) 

SAFEARRAY sa;   // array descriptor
VARIANT var; 

// setup the SAFEARRAY to reference the data buffer
sa.cbElements = sizeof(unsigned char); 
sa.cDims = 1; 
sa.cLocks = 0; 
sa.fFeatures = (FADF_STATIC | FADF_FIXEDSIZE); 
sa.pvData = pData; 
sa.rgsabound[0].cElements = cbData; 
sa.rgsabound[0].lLbound = 0; 

// the array must be passed in a VARIANT
VariantInit(&var); 
V_VT(&var) = (VT_ARRAY | VT_UI1); 
V_ARRAY(&var) = &sa; 

// assign the array
pPlay->put_SourceArray (var);

4.

Once again, the memory should be allocated and filled by the user. As long as the array is assigned to the object, the user must not free the data buffer or the array descriptor. The user can unassign the source by calling the ResetSource function as described above.