This example shows how to convert only one chapter in a DVD title and how to enable DVD subtitles during conversion when you use the DVD Source object
// include the LEAD Multimedia TOOLKIT header#include "ltmm.h"// This function will select one chapter in a certain titlevoid SelectChapter(IltmmDVDTitle *pTitle, int nChapterIndex){long nCount;pTitle->get_ChapterCount(&nCount);for(int i = 0; i < nCount; i++){IltmmDVDChapter *pChapter;if(pTitle->GetChapter(i, &pChapter) == S_OK){pChapter->put_Selected(i == nChapterIndex ? VARIANT_TRUE : VARIANT_FALSE);pChapter->Release();}}}//This function will select the main title for conversion.//Within the main title, it will select only the second chapter.//It will also select the first subtitle stream.void SelectOneChapterAndSubtitles(IltmmConvert *pConvert){IUnknown *punk;IltmmDVDSource* pDVDSource;// Get the DVD source interfacepConvert->GetSubObject(ltmmConvert_Object_SourceFilter, &punk);if (punk){punk->QueryInterface(IID_IltmmDVDSource, (void**)&pDVDSource);if (pDVDSource){IltmmDVDTitle *pTitle;long lCount;long lVal;// Select the main titlepDVDSource->put_Selected(ltmmDVDSource_Main_Selected);// We now need to select one chapter and enable subtitles for this title// For that, we will loop through the titles and find out which one was selected above// Get the title count in the discpDVDSource->get_TitleCount(&lCount);for (int i = 0; i < lCount; i++){// Get the title interfacepDVDSource->GetTitle(i, &pTitle);if (pTitle){long bSelected;pTitle->get_Selected(&bSelected);if(bSelected){// we found the main title// (Optional step). We will convert only one chapter to speed up the conversion.// We will select the 2nd chapte, because the first chapter will sometimes have movie credits and little dialogue// Chapters are 0-based, so the second chapter has index 1SelectChapter(pTitle, 1);// Get the subpicture stream countpTitle->get_SubpictureStreamCount(&lVal);if(lVal > 0)// Select the first subpicture streampTitle->put_SelectedSubpictureStream(0);}pTitle->Release();}}pDVDSource->Release();}punk->Release();}}#define LEAD_MPEG2_ENCODER L"@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG2 Encoder (3.0)"#define LEAD_MPEG_AUDIO_ENCODER L"@device:sw:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\LEAD MPEG Audio Encoder (2.0)"// select a certain encodervoid SelectCompressor(IltmmCompressors *pCompressors, LPCWSTR pszCompressorName){long index;BSTR bstrCompressorName = SysAllocString(pszCompressorName);pCompressors->Find(bstrCompressorName, &index);pCompressors->put_Selection(index);SysFreeString(bstrCompressorName);}// helper function to wait for conversion to completevoid 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);}}// convert one chapter with subtitles (close captioning)HRESULT ConvertOneChapterWithSubtitles(){IltmmConvert *pConvert;HRESULT hr = CoCreateInstance(CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, IID_IltmmConvert, (void**) &pConvert);if(FAILED(hr))return hr;// use the DVD source for greater control over the DVD conversion processpConvert->put_UseDVDSource(VARIANT_TRUE);// set the source, compressors and target formatBSTR bstr = ::SysAllocString(MAKE_MEDIA_PATH("video_ts.ifo"));pConvert->put_SourceFile(bstr);SysFreeString(bstr);pConvert->put_TargetFormat(ltmmConvert_TargetFormat_MPEG2_PROGRAM);IltmmCompressors *pCompressors;// select mpeg2 encoderpConvert->get_VideoCompressors(&pCompressors);SelectCompressor(pCompressors, LEAD_MPEG2_ENCODER);pCompressors->Release();// select mpeg audio encoderpConvert->get_AudioCompressors(&pCompressors);SelectCompressor(pCompressors, LEAD_MPEG_AUDIO_ENCODER);pCompressors->Release();bstr = ::SysAllocString(MAKE_MEDIA_PATH("1.mpg"));pConvert->put_TargetFile(bstr);SysFreeString(bstr);// this function is the interesting part of the exampleSelectOneChapterAndSubtitles(pConvert);hr = pConvert->StartConvert();// wait for conversion to finishWaitForCompletion(pConvert);pConvert->Release();return hr;}
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
