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.
// 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 = pSource->get_FormatSize(&cbData);
if(FAILED(hr))
return hr;
// any format data
if(cbData)
{
// yes, then copy away
hr = pSource->GetFormatData (cbData, &var);
if(FAILED(hr))
return hr;
hr = pDest->SetFormatData (cbData, var);
VariantClear(&var);
if(FAILED(hr))
return hr;
}
else
{
// no, just set the dest to zero
hr = pDest->put_FormatSize (0);
if(FAILED(hr))
return hr;
}
// copy type
bstr = NULL;
pSource->get_Type (&bstr);
pDest->put_Type (bstr);
::SysFreeString(bstr);
// copy subtype
bstr = NULL;
pSource->get_Subtype (&bstr);
pDest->put_Subtype (bstr);
::SysFreeString(bstr);
// copy formattype
bstr = NULL;
pSource->get_FormatType(&bstr);
pDest->put_FormatType (bstr);
::SysFreeString(bstr);
// copy fixedsizesamples
f = VARIANT_FALSE;
pSource->get_FixedSizeSamples (&f);
pDest->put_FixedSizeSamples (f);
// copy temporalcompression
f = VARIANT_FALSE;
pSource->get_TemporalCompression (&f);
pDest->put_TemporalCompression (f);
// copy samplesize
l = 0;
pSource->get_SampleSize (&l);
pDest->put_SampleSize (l);
return S_OK;
}