This example shows how to add and remove header scripts from a convert graph.
#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS 20\\Media\\")TEXT(pFileName))
void IltmmWMScript_HeaderScripts_Example(IltmmConvert* pConvert)
{
HRESULT hr = S_OK;
IUnknown *punk;
IltmmWMScript *pWMScript;
// source and target path names
BSTR bstrSource = SysAllocString(MAKE_MEDIA_PATH("source.avi"));
BSTR bstrTarget = SysAllocString(MAKE_MEDIA_PATH("source_script.wmv"));
// set the source, target and WMV target formats for our conversion
IltmmConvert_put_SourceFile(pConvert, bstrSource);
IltmmConvert_put_TargetFile(pConvert, bstrTarget);
IltmmConvert_put_TargetFormat(pConvert, ltmmConvert_TargetFormat_WMV_Mux);
// free the BSTRs
SysFreeString(bstrSource);
SysFreeString(bstrTarget);
// get the target object
IltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_TargetFilter, &punk);
if (punk)
{
// get the WMScript object
IUnknown_QueryInterface(punk, &IID_IltmmWMScript, (void**)&pWMScript);
if (pWMScript)
{
double duration;
long lScriptCnt;
WCHAR szTemp[128];
double scriptTime;
BSTR bstrScriptType, bstrScriptCmd;
// turn off stream scripts and remove any header scripts
IltmmWMScript_put_EnableScriptStream(pWMScript, VARIANT_FALSE);
IltmmWMScript_RemoveAllHeaderScripts(pWMScript);
// get the source duration
hr = IltmmConvert_get_Duration(pConvert, &duration);
if (FAILED(hr))
duration = 0.5 ;//assume a relatively small duration
// create a sample header script (type of caption) and set it to execute @ 0 secs
// we will delete this one later for demonstation purposes
scriptTime = 0.;
swprintf_s(szTemp, _countof(szTemp), L"Sample caption script at %g seconds", scriptTime);
bstrScriptCmd = SysAllocString(szTemp);
// add the header script
hr = IltmmWMScript_AddHeaderScript(pWMScript, L"caption", bstrScriptCmd, scriptTime);
// free the bstr
SysFreeString(bstrScriptCmd);
// create a sample header script (type of caption) and set it to execute @ duration / 2
scriptTime = duration/2.0;
swprintf_s(szTemp, _countof(szTemp), L"Sample caption script at %g seconds", scriptTime);
bstrScriptCmd = SysAllocString(szTemp);
// add the header script
hr = IltmmWMScript_AddHeaderScript(pWMScript, L"caption", bstrScriptCmd, scriptTime);
// free the bstr
SysFreeString(bstrScriptCmd);
// now get the header script count, should be 2 from above
hr = IltmmWMScript_get_HeaderScriptCount(pWMScript, &lScriptCnt);
if (SUCCEEDED(hr) && lScriptCnt>0)
{
long i;
// iterate through the script indexes
for (i=0; i<lScriptCnt; i++)
{
if (i==0) // if first one, delete it (demonstration purposes)
{
IltmmWMScript_RemoveHeaderScript(pWMScript, i);
}
else if (i==1) // if second one, just get it and display a msg box with properties
{
hr = IltmmWMScript_GetHeaderScript(pWMScript, i, &bstrScriptType, &bstrScriptCmd, &scriptTime);
if (SUCCEEDED(hr))
{
WCHAR szTemp[255];
swprintf_s(szTemp, _countof(szTemp), L"type: %s\ncmd: %s\ntime: %g", bstrScriptType, bstrScriptCmd, scriptTime);
MessageBox(NULL, szTemp, L"Script Properties", MB_OK);
// free the bstrs
SysFreeString(bstrScriptType);
SysFreeString(bstrScriptCmd);
}
}
}
}
IUnknown_Release(pWMScript);
}
// if all is well, run the convert now
if (SUCCEEDED(hr))
hr = IltmmConvert_StartConvert(pConvert);
IUnknown_Release(punk);
}
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document