LEADTOOLS Multimedia API Help > Programming with LEADTOOLS Multimedia > C++ Code > Creating DVD Images for C++ |
The following code demonstrates how to create DVD images using LEAD Multimedia toolkit.
#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS 18\\Media\\")TEXT(pFileName)) // 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 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); } }