Copying ltmmMediaType Attributes and Data for C
The following code demonstrates how to copy a media type's attributes and data to another media type.
// define helper macros for using interfaces under C
#define COBJMACROS
// include the LEAD Multimedia TOOLKIT header
#include "ltmm.h"
/////////////////////////////////////////////////////////////////
// CopyMediaTypeAttributes
// copies data and attributes from one media type to another
// pDest - destination media type interface
// pSource - source media type interface
//
HRESULT CopyMediaTypeAttributes(IltmmMediaTypeDisp* pDest, IltmmMediaTypeDisp* pSource)
{
HRESULT hr;
VARIANT_BOOL f;
long l;
BSTR bstr;
long cbData;
VARIANT var;
// return error if NULL
if(!pSource || !pDest)
return E_POINTER;
// get the format data size
hr = IltmmMediaTypeDisp_get_FormatSize (pSource, &cbData);
if(FAILED(hr))
return hr;
// any format data
if(cbData)
{
// yes, then copy away
hr = IltmmMediaTypeDisp_GetFormatData (pSource, cbData, &var);
if(FAILED(hr))
return hr;
hr = IltmmMediaTypeDisp_SetFormatData (pDest, cbData, var);
VariantClear(&var);
if(FAILED(hr))
return hr;
}
else
{
// no, just set the dest to zero
hr = IltmmMediaTypeDisp_put_FormatSize (pDest, 0);
if(FAILED(hr))
return hr;
}
// copy type
bstr = NULL;
IltmmMediaTypeDisp_get_Type(pSource, &bstr);
IltmmMediaTypeDisp_put_Type (pDest, bstr);
SysFreeString(bstr);
// copy subtype
bstr = NULL;
IltmmMediaTypeDisp_get_Subtype (pSource, &bstr);
IltmmMediaTypeDisp_put_Subtype (pDest, bstr);
SysFreeString(bstr);
// copy formattype
bstr = NULL;
IltmmMediaTypeDisp_get_FormatType(pSource, &bstr);
IltmmMediaTypeDisp_put_FormatType (pDest, bstr);
SysFreeString(bstr);
// copy fixedsizesamples
f = VARIANT_FALSE;
IltmmMediaTypeDisp_get_FixedSizeSamples (pSource, &f);
IltmmMediaTypeDisp_put_FixedSizeSamples(pDest, f);
// copy temporalcompression
f = VARIANT_FALSE;
IltmmMediaTypeDisp_get_TemporalCompression (pSource, &f);
IltmmMediaTypeDisp_put_TemporalCompression (pDest, f);
// copy samplesize
l = 0;
IltmmMediaTypeDisp_get_SampleSize (pSource, &l);
IltmmMediaTypeDisp_put_SampleSize (pDest, l);
return S_OK;
}
The following code demonstrates how to copy a media type's attributes and data to another media type.
// define helper macros for using interfaces under C #ifndef COBJMACROS #define COBJMACROS #endif // include the LEAD Multimedia TOOLKIT header #include "ltmm.h" ///////////////////////////////////////////////////////////////// // CopyMediaTypeAttributes // copies data and attributes from one media type to another // pDest - destination media type interface // pSource - source media type interface // L_MULTIMEDIATEX_API HRESULT CopyMediaTypeAttributesExample (IltmmMediaTypeDisp* pDest, IltmmMediaTypeDisp* pSource) { HRESULT hr; VARIANT_BOOL f; long l; BSTR bstr; long cbData; VARIANT var; // return error if NULL if(!pSource || !pDest) return E_POINTER; // get the format data size hr = IltmmMediaTypeDisp_get_FormatSize (pSource, &cbData); if(FAILED(hr)) return hr; // any format data if(cbData) { // yes, then copy away hr = IltmmMediaTypeDisp_GetFormatData (pSource, cbData, &var); if(FAILED(hr)) return hr; hr = IltmmMediaTypeDisp_SetFormatData (pDest, cbData, var); VariantClear(&var); if(FAILED(hr)) return hr; } else { // no, just set the dest to zero hr = IltmmMediaTypeDisp_put_FormatSize (pDest, 0); if(FAILED(hr)) return hr; } // copy type bstr = NULL; IltmmMediaTypeDisp_get_Type(pSource, &bstr); IltmmMediaTypeDisp_put_Type (pDest, bstr); SysFreeString(bstr); // copy subtype bstr = NULL; IltmmMediaTypeDisp_get_Subtype (pSource, &bstr); IltmmMediaTypeDisp_put_Subtype (pDest, bstr); SysFreeString(bstr); // copy formattype bstr = NULL; IltmmMediaTypeDisp_get_FormatType(pSource, &bstr); IltmmMediaTypeDisp_put_FormatType (pDest, bstr); SysFreeString(bstr); // copy fixedsizesamples f = VARIANT_FALSE; IltmmMediaTypeDisp_get_FixedSizeSamples (pSource, &f); IltmmMediaTypeDisp_put_FixedSizeSamples(pDest, f); // copy temporalcompression f = VARIANT_FALSE; IltmmMediaTypeDisp_get_TemporalCompression (pSource, &f); IltmmMediaTypeDisp_put_TemporalCompression (pDest, f); // copy samplesize l = 0; IltmmMediaTypeDisp_get_SampleSize (pSource, &l); IltmmMediaTypeDisp_put_SampleSize (pDest, l); return S_OK; }