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 title
void 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 interface
pConvert->GetSubObject(ltmmConvert_Object_SourceFilter, &punk);
if (punk)
{
punk->QueryInterface(IID_IltmmDVDSource, (void**)&pDVDSource);
if (pDVDSource)
{
IltmmDVDTitle *pTitle;
long lCount;
long lVal;
// Select the main title
pDVDSource->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 disc
pDVDSource->get_TitleCount(&lCount);
for (int i = 0; i < lCount; i++)
{
// Get the title interface
pDVDSource->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 1
SelectChapter(pTitle, 1);
// Get the subpicture stream count
pTitle->get_SubpictureStreamCount(&lVal);
if(lVal > 0)
// Select the first subpicture stream
pTitle->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 encoder
void 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 complete
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);
}
}
// 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 process
pConvert->put_UseDVDSource(VARIANT_TRUE);
// set the source, compressors and target format
BSTR 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 encoder
pConvert->get_VideoCompressors(&pCompressors);
SelectCompressor(pCompressors, LEAD_MPEG2_ENCODER);
pCompressors->Release();
// select mpeg audio encoder
pConvert->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 example
SelectOneChapterAndSubtitles(pConvert);
hr = pConvert->StartConvert();
// wait for conversion to finish
WaitForCompletion(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
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.