The following code demonstrates how to create DVD images using LEAD Multimedia toolkit.
// include the LEAD Multimedia TOOLKIT header
#include "ltmm.h"
#include "ILTDVDWriter2.h"
void WaitForCompletion(IltmmConvert *pConvert);
int main()
{
IltmmConvert *pConvert = NULL;
IUnknown *pDvdWriter = NULL;
ILTDvdWriter *pIDvdWriter = NULL;
BSTR szFileName = NULL;
IltmmCompressors *pCompressors;
long lIndex = 0;
CoInitialize(NULL);
// create a converter object
HRESULT hr = CoCreateInstance(CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, IID_IltmmConvert, (void**) &pConvert);
// setup the converter:
hr = pConvert->put_TargetFormat(ltmmConvert_TargetFormat_DVD);
hr = pConvert->get_VideoCompressors(&pCompressors);
hr = pCompressors->Find(L"@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG2 Encoder (2.0)", &lIndex);
hr = pCompressors->put_Selection(lIndex);
pCompressors->Release();
hr = pConvert->get_AudioCompressors(&pCompressors);
hr = pCompressors->Find(L"@device:sw:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG Audio Encoder (2.0)", &lIndex);
hr = pCompressors->put_Selection(lIndex);
pCompressors->Release();
// 1- Create a DVD image with 1 title that contains 1 chapter:
szFileName = ::SysAllocString(MAKE_MEDIA_PATH("DaDa_CMP.avi"));
// Source video
hr = pConvert->put_SourceFile(szFileName);
SysFreeString(szFileName);
szFileName = ::SysAllocString(MAKE_MEDIA_PATH(""));
// Destination image folder
hr = pConvert->put_TargetFile(szFileName);
SysFreeString(szFileName);
hr = pConvert->StartConvert();
// Wait for the conversion to finish. You can use a window to receive notifications
WaitForCompletion(pConvert);
// Done
pConvert->ResetTarget();
pConvert->ResetSource();
// 2- Create a DVD image with 1 title that contains 2 chapters:
szFileName = ::SysAllocString(MAKE_MEDIA_PATH("DaDa_CMP.avi"));
// Source video
hr = pConvert->put_SourceFile(szFileName);
SysFreeString(szFileName);
szFileName = ::SysAllocString(MAKE_MEDIA_PATH(""));
// Destination image folder
hr = pConvert->put_TargetFile(szFileName);
SysFreeString(szFileName);
// Retrieve the DVD Writer interface
hr = pConvert->GetSubObject(ltmmConvert_Object_Sink, &pDvdWriter);
pDvdWriter->QueryInterface(IID_ILTDvdWriter, (void**)&pIDvdWriter);
// Set the DVD temporary files folder
szFileName = ::SysAllocString(MAKE_MEDIA_PATH(""));
// Destination image folder
pIDvdWriter->put_TempPath(szFileName);
SysFreeString(szFileName);
// Set the TitleBreak property to FALSE.
// This will prevent the title from being written immediately after the conversion
pIDvdWriter->put_TitleBreak(VARIANT_FALSE);
// write the first chapter
hr = pConvert->StartConvert();
// Wait for the conversion to finish. You can use a window to receive notifications
WaitForCompletion(pConvert);
// You can change the source file before this step.
// This demonstration code uses the same file for all chapters.
// Create chapter 2.
hr = pConvert->StartConvert();
WaitForCompletion(pConvert);
// Close the title
pIDvdWriter->put_TitleBreak(VARIANT_TRUE);
// Done
pDvdWriter->Release();
pDvdWriter = NULL;
pIDvdWriter->Release();
pIDvdWriter = NULL;
pConvert->ResetTarget();
pConvert->ResetSource();
// 3- Create a DVD image with 2 titles, each contains 2 chapters:
szFileName = ::SysAllocString(MAKE_MEDIA_PATH("DaDa_CMP.avi"));
// Source video
hr = pConvert->put_SourceFile(szFileName);
SysFreeString(szFileName);
szFileName = ::SysAllocString(MAKE_MEDIA_PATH(""));
// Destination image folder
hr = pConvert->put_TargetFile(szFileName);
SysFreeString(szFileName);
// Retrieve the DVD Writer interface
hr = pConvert->GetSubObject(ltmmConvert_Object_Sink, &pDvdWriter);
pDvdWriter->QueryInterface(IID_ILTDvdWriter, (void**)&pIDvdWriter);
// Set the TitleBreak property to FALSE.
// This will prevent the title from being written immediately after the conversion
pIDvdWriter->put_TitleBreak(VARIANT_FALSE);
// Write the first chapter in the first title
hr = pConvert->StartConvert();
// Wait for the conversion to finish. You can use a window to receive notifications
WaitForCompletion(pConvert);
// Write the second chapter in the first title
// You can change the source file before this step, this demonstration code uses the same file for all chapters.
hr = pConvert->StartConvert();
WaitForCompletion(pConvert);
// Prepare for the second title
// Set the TitleBreak property to TRUE, so the current title can be flushed
pIDvdWriter->put_TitleBreak(VARIANT_TRUE);
// Set the TitleBreak property to FALSE.
// This will prevent the title from being written immediately after the conversion
pIDvdWriter->put_TitleBreak(VARIANT_FALSE);
// Disable Overwrite so the title will be appended to an existing dvd image
pIDvdWriter->put_Overwrite(VARIANT_FALSE);
// Write the first chapter in the second title
hr = pConvert->StartConvert();
// Wait for the conversion to finish. You can use a window to receive notifications
WaitForCompletion(pConvert);
// Write the second chapter in the second title
hr = pConvert->StartConvert();
WaitForCompletion(pConvert);
// Close the second title
pIDvdWriter->put_TitleBreak(VARIANT_TRUE);
// restore the overwrite property
pIDvdWriter->put_Overwrite(VARIANT_TRUE);
// Done
pDvdWriter->Release();
pDvdWriter = NULL;
pIDvdWriter->Release();
pIDvdWriter = NULL;
pConvert->ResetTarget();
pConvert->ResetSource();
pConvert->Release();
CoUninitialize();
return 0;
}
void WaitForCompletion(IltmmConvert *pConvert)
{
long lState = ltmmConvert_State_Running;
MSG msg;
pConvert->get_State(&lState);
while(lState != ltmmConvert_State_Stopped)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
pConvert->get_State(&lState);
}
}
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
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.