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;
}