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.
// This function will select one chapter in a specified titlevoid SelectChapter(IltmmDVDTitle *pTitle, int nChapterIndex){long nCount, i;IltmmDVDTitle_get_ChapterCount(pTitle, &nCount);for(i = 0; i < nCount; i++){IltmmDVDChapter *pChapter;if(IltmmDVDTitle_GetChapter(pTitle, i, &pChapter) == S_OK){IltmmDVDChapter_put_Selected(pChapter, i == nChapterIndex ? VARIANT_TRUE : VARIANT_FALSE);IltmmDVDChapter_Release(pChapter);}}}/*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 interfaceIltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_SourceFilter, &punk);if (punk){IUnknown_QueryInterface(punk, &IID_IltmmDVDSource, (void**)&pDVDSource);if (pDVDSource){IltmmDVDTitle *pTitle;long lCount, i;long lVal;// Select the main titleIltmmDVDSource_put_Selected(pDVDSource, 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 disc.IltmmDVDSource_get_TitleCount(pDVDSource, &lCount);for (i = 0; i < lCount; i++){// Get the title interfaceIltmmDVDSource_GetTitle(pDVDSource, i, &pTitle);if (pTitle){long bSelected;IltmmDVDTitle_get_Selected(pTitle, &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 countIltmmDVDTitle_get_SubpictureStreamCount(pTitle, &lVal);if(lVal > 0)// Select the first subpicture streamIltmmDVDTitle_put_SelectedSubpictureStream(pTitle, 0);}IltmmDVDTitle_Release(pTitle);}}IltmmDVDSource_Release(pDVDSource);}IUnknown_Release(punk);}}#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);IltmmCompressors_Find(pCompressors, bstrCompressorName, &index);IltmmCompressors_put_Selection(pCompressors, index);SysFreeString(bstrCompressorName);}// convert one chapter with subtitles (close captioning)HRESULT ConvertOneChapterWithSubtitles(){IltmmConvert *pConvert;IltmmCompressors *pCompressors;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 processIltmmConvert_put_UseDVDSource(pConvert, VARIANT_TRUE);// set the source, compressors and target formatIltmmConvert_put_SourceFile(pConvert, L"e:\\video_ts\\video_ts.ifo");IltmmConvert_put_TargetFormat(pConvert, ltmmConvert_TargetFormat_MPEG2_PROGRAM);// select the mpeg2 encoderIltmmConvert_get_VideoCompressors(pConvert, &pCompressors);SelectCompressor(pCompressors, LEAD_MPEG2_ENCODER);IltmmCompressors_Release(pCompressors);// select the mpeg audio encoderIltmmConvert_get_AudioCompressors(pConvert, &pCompressors);SelectCompressor(pCompressors, LEAD_MPEG_AUDIO_ENCODER);IltmmCompressors_Release(pCompressors);IltmmConvert_put_TargetFile(pConvert, L"c:\\i\\1.mpg");// this function is the interesting part of the exampleSelectOneChapterAndSubtitles(pConvert);hr = IltmmConvert_StartConvert(pConvert);// wait for conversion to finish... Not very elegant, but we want to keep the example simpleMessageBox(NULL, TEXT("Wait to finish"), TEXT("wait"), MB_OK);IltmmConvert_Release(pConvert);return hr;}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
