LEADTOOLS Multimedia API Help > Programming with LEADTOOLS Multimedia > C Code > Creating DVD Images for C |
Also known as compressor, this is a module or algorithm to compress data. Playing that data back requires a decompressor, or decoder.compressor , this is a module or algorithm to compress data. Playing that data back requires a decompressor, or decoder .
Also known as an encoder, this is a module or algorithm to compress data. Playing that data back requires a decompressor, or decoder.
Also known as a decompressor, this is a module or algorithm to decompress data.
A set of files that contain all of the video and audio content for a DVD, organized with a table of contents (optional). See also: Title, Chapter, ISO Image .
An ISO image (.iso) is a disk image of a file system. It includes data files that are contained in the ISO image along with filesystem metadata. ISO images are an alternative to physical media for distribution of a "DVD" over the Internet. Most operating systems allow ISO images images to be "played" as if they were physical discs. See also: DVD Image.
The name for a group of related video files (called "Chapters") on your DVD. For example, for a DVD called "My Summer Vacation," you might have the titles "Water Skiing," "New Friends," and "Hiking." For each of those titles, you might have one or more different video files.
The name for each individual video file on a DVD. For example, under the title "Water Skiing", you might have the chapters "My first try," "My first wreck," and "My first jump."
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 "ltmm.h" #include "ILTDvdWriter2.h" #include <TChar.h> LPOLESTR T2OLE(LPCTSTR lpt) { static OLECHAR lpw[512]; if(!lpt) return NULL; lpw[0] = L'\0'; MultiByteToWideChar(CP_ACP, 0, lpt, -1, lpw, 512); return lpw; } LPTSTR OLE2T(LPCOLESTR lpw) { static TCHAR lpt[512]; if(!lpw) return NULL; lpt[0] = _T('\0'); WideCharToMultiByte(CP_ACP, 0, lpw, -1, lpt, 512, NULL, NULL); return lpt; } void WaitForCompletion(IltmmConvert *pConvert) { long lState = ltmmConvert_State_Running; MSG msg; IltmmConvert_get_State(pConvert, &lState); while( lState != ltmmConvert_State_Stopped ) { if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { TranslateMessage(&msg); DispatchMessage(&msg); } IltmmConvert_get_State(pConvert, &lState); } } void CreateDVDImageExample ( ) { IltmmConvert *pConvert = NULL; IUnknown *pDvdWriter = NULL; ILTDvdWriter *pIDvdWriter = NULL; BSTR szFileName = NULL; IltmmCompressors *pCompressors; long lIndex = 0; HRESULT hr; CoInitialize(NULL); // create a converter object hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &pConvert); // set up the converter: IltmmConvert_put_TargetFormat(pConvert, ltmmConvert_TargetFormat_DVD); IltmmConvert_get_VideoCompressors(pConvert, &pCompressors); hr = IltmmCompressors_Find(pCompressors, L"@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG2 Encoder (2.0)", &lIndex); hr = IltmmCompressors_put_Selection(pCompressors, lIndex); IltmmCompressors_Release(pCompressors); IltmmConvert_get_AudioCompressors(pConvert, &pCompressors); hr = IltmmCompressors_Find(pCompressors, L"@device:sw:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG Audio Encoder (2.0)", &lIndex); hr = IltmmCompressors_put_Selection(pCompressors, lIndex); IltmmCompressors_Release(pCompressors); // 1- Create a DVD image with 1 title that contains 1 chapter: szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH("DaDa_CMP.avi"))); // Source video IltmmConvert_put_SourceFile(pConvert, szFileName); SysFreeString(szFileName); szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH(""))); // Destination image folder IltmmConvert_put_TargetFile(pConvert, szFileName); SysFreeString(szFileName); IltmmConvert_StartConvert(pConvert); // Wait for the conversion to finish. You can use a window to receive notifications WaitForCompletion(pConvert); // Done IltmmConvert_ResetTarget(pConvert); IltmmConvert_ResetSource(pConvert); // 2- Create a DVD image with 1 title that contains 2 chapters: szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH("DaDa_CMP.avi"))); // Source video IltmmConvert_put_SourceFile(pConvert, szFileName); SysFreeString(szFileName); szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH(""))); // Destination image folder IltmmConvert_put_TargetFile(pConvert, szFileName); SysFreeString(szFileName); // Retrieve the DVD Writer interface IltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_Sink, &pDvdWriter); IUnknown_QueryInterface(pDvdWriter, &IID_ILTDvdWriter, (void**)&pIDvdWriter); // Set the DVD temporary files folder szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH(""))); // Destination image folder ILTDvdWriter_put_TempPath(pIDvdWriter, szFileName); SysFreeString(szFileName); // Set the TitleBreak property to FALSE. // This will prevent the title from being written immediately after the conversion ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_FALSE); // write the first chapter IltmmConvert_StartConvert(pConvert); // 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. IltmmConvert_StartConvert(pConvert); WaitForCompletion(pConvert); // Close the title ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_TRUE); // Done IUnknown_Release(pDvdWriter); pDvdWriter = NULL; ILTDvdWriter_Release(pIDvdWriter); pIDvdWriter = NULL; IltmmConvert_ResetTarget(pConvert); IltmmConvert_ResetSource(pConvert); // 3- Create a DVD image with 2 titles, each containing 2 chapters: szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH("DaDa_CMP.avi"))); // Source video IltmmConvert_put_SourceFile(pConvert, szFileName); SysFreeString(szFileName); szFileName = SysAllocString(T2OLE(MAKE_MEDIA_PATH(""))); // Destination image folder IltmmConvert_put_TargetFile(pConvert, szFileName); SysFreeString(szFileName); // Retrieve the DVD Writer interface IltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_Sink, &pDvdWriter); IUnknown_QueryInterface(pDvdWriter, &IID_ILTDvdWriter, (void**)&pIDvdWriter); // Set the TitleBreak property to FALSE. // This will prevent the title from being written immediately after the conversion ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_FALSE); // Write the first chapter in the first title IltmmConvert_StartConvert(pConvert); // 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. IltmmConvert_StartConvert(pConvert); WaitForCompletion(pConvert); // Prepare for the second title // Set the TitleBreak property to TRUE, so the the current title can be flushed ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_TRUE); // Set the TitleBreak property to FALSE. // This will prevent the title from being written immediately after the conversion ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_FALSE); // Disable Overwrite so the title will be appended to an existing dvd image ILTDvdWriter_put_Overwrite(pIDvdWriter, VARIANT_FALSE); // Write the first chapter in the second title IltmmConvert_StartConvert(pConvert); // Wait for the conversion to finish. You can use a window to receive notifications WaitForCompletion(pConvert); // Write the second chapter in the second title IltmmConvert_StartConvert(pConvert); WaitForCompletion(pConvert); // Close the second title ILTDvdWriter_put_TitleBreak(pIDvdWriter, VARIANT_TRUE); // restore the overwrite property ILTDvdWriter_put_Overwrite(pIDvdWriter, VARIANT_TRUE); // Done IUnknown_Release(pDvdWriter); pDvdWriter = NULL; ILTDvdWriter_Release(pIDvdWriter); pIDvdWriter = NULL; IltmmConvert_ResetTarget(pConvert); IltmmConvert_ResetSource(pConvert); IltmmConvert_Release(pConvert); CoUninitialize(); } int main() { CreateDVDImageExample ( ) ; return 0; }