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 API
    IltmmPlay* pPlay;   // play object interface (initialized elsewhere)    
    HGLOBAL hGlobal;   // allocated and filled elsewhere   
    IltmmPlay_put_SourceHGlobal (pPlay, (long) hGlobal); 
    C++
    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 API
    IltmmPlay_ResetSource (pPlay); 
    C++
    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 API
    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++
    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.

Help Version 22.0.2023.1.26
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Multimedia C API Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.