LTDVDWriter Namespace > ILTDvdWriter Interface : AddMenuTitle Method |
S_OK if the function was successful.
<>S_OK if an error occurred. Refer to the Error Codes or the HRESULT error codes in the DirectShow documentation.
'Declaration <DispIdAttribute(7)> Sub AddMenuTitle( _ ByVal Title As String, _ ByVal Index As Integer _ )
'Usage Dim instance As ILTDvdWriter Dim Title As String Dim Index As Integer instance.AddMenuTitle(Title, Index)
[DispIdAttribute(7)] void AddMenuTitle( string Title, int Index )
[DispIdAttribute(7)] void AddMenuTitle( String^ Title, int Index )
S_OK if the function was successful.
<>S_OK if an error occurred. Refer to the Error Codes or the HRESULT error codes in the DirectShow documentation.
Adds a new title to the menu. The title list can be modified at any time before writing the menu. A maximum of 36 titles can be added. Calling the LTDvdWriter.AddMenuTitle method with an existing index will not make an update: it will insert a new title at the specified index and shift the list down.
Menu writing should be the last step in a DVD image authoring process. Writing the menu first will cause an error and if a new title is written after the menu has been written, then the menu will be destroyed.
Any multimedia file can be used as the menu background, including a single page image, a multi-page image, or a video. All menus require a background video. To add menus to the DVD image, perform the following steps:
Imports Leadtools Imports Leadtools.Multimedia Imports LeadtoolsMultimediaExamples.Fixtures Public _result As Boolean = False Public _form As ConvertCtrlForm = New ConvertCtrlForm() Private _convertCtrl As ConvertCtrl = Nothing Private _dvdWriter As LTDvdWriter = Nothing Public Sub DvdWriterExample() ' reference the convert control _convertCtrl = _form.ConvertCtrl ' source files for DVD content Dim inFile1 As String = "mediafiles\input\DVDWriter_Source1.avi" Dim inFile2 As String = "mediafiles\input\DVDWriter_Source2.avi" Dim inFile3 As String = "mediafiles\input\DVDWriter_Source3.avi" Dim inFile4 As String = "mediafiles\input\DVDWriter_Source4.avi" Dim backgroundImageFile As String = "mediafiles\input\DVDWriter_Background.jpg" Dim outFile As String = "mediafiles\output\ConvertCtrl_DvdWriterExample_DVD" Try _dvdWriter = Nothing _convertCtrl.Preview = True _convertCtrl.PreviewVisible = True ' setup the converter _convertCtrl.TargetFormat = TargetFormatType.DVD _convertCtrl.VideoCompressors.Mpeg2.Selected = True _convertCtrl.AudioCompressors.MpegAudio.Selected = True ' Create a DVD image with 2 titles, each contains 2 chapters: ' Source video _convertCtrl.SourceFile = inFile1 ' Destination image folder _convertCtrl.TargetFile = outFile ' Retrieve the DVD Writer interface _dvdWriter = TryCast(_convertCtrl.GetSubObject(ConvertObject.Sink), LTDvdWriter) _dvdWriter.RemoveAllMenuTitles() _dvdWriter.MenulessTitlePlay = False ' Set the TitleBreak property to false. ' This will prevent the title from being written immediately after the conversion _dvdWriter.TitleBreak = False _dvdWriter.AddMenuTitle("Title 1", -1) ' Write the first chapter in the first title _convertCtrl.StartConvert() Do While _convertCtrl.State <> ConvertState.Stopped Application.DoEvents() Loop _convertCtrl.ResetSource() Dim highPart As Integer = 0 Dim lowPart As Integer = _dvdWriter.GetBytesWritten(highPart) Dim written As Int64 = highPart << 32 Or lowPart _convertCtrl.SourceFile = inFile2 _convertCtrl.StartConvert() Do While _convertCtrl.State <> ConvertState.Stopped Application.DoEvents() Loop _convertCtrl.ResetSource() ' Prepare for the second title ' Set the TitleBreak property to TRUE, so the the current title can be flushed _dvdWriter.TitleBreak = True ' Disable Overwrite so the title will be appended to an existing dvd image _dvdWriter.Overwrite = False _dvdWriter.MenulessTitlePlay = False ' Set the TitleBreak property to FALSE. ' This will prevent the title from being written immediately after the conversion _dvdWriter.TitleBreak = False _dvdWriter.AddMenuTitle("Title 2", -1) ' Write the first chapter in the second title _convertCtrl.SourceFile = inFile3 _convertCtrl.StartConvert() Do While _convertCtrl.State <> ConvertState.Stopped Application.DoEvents() Loop _convertCtrl.ResetSource() ' Write the second chapter in the second title _convertCtrl.SourceFile = inFile4 _convertCtrl.StartConvert() Do While _convertCtrl.State <> ConvertState.Stopped Application.DoEvents() Loop _convertCtrl.ResetSource() ' Close the second title _dvdWriter.TitleBreak = True _dvdWriter.TitleMenu = True _dvdWriter.MenuLoop = True _dvdWriter.MenulessTitlePlay = False ' Write the second chapter in the second title _convertCtrl.SourceFile = backgroundImageFile ChangeStillImageDuration(1.0) _convertCtrl.StartConvert() Do While _convertCtrl.State <> ConvertState.Stopped Application.DoEvents() Loop _convertCtrl.ResetSource() _dvdWriter.TitleMenu = False _dvdWriter.Overwrite = False _convertCtrl.ResetTarget() _convertCtrl.ResetSource() ' done, free COM object Marshal.ReleaseComObject(_dvdWriter) _dvdWriter = Nothing ' set the result _result = True Catch ex As Exception _result = False End Try End Sub Private Sub ChangeStillImageDuration(ByVal duration As Double) Dim pStlImgRd As ILTStlImgRd Try pStlImgRd = TryCast(_convertCtrl.GetSubObject(ConvertObject.SourceFilter), ILTStlImgRd) If Not pStlImgRd Is Nothing Then ' get the current menu duration Dim currentDuration As Double currentDuration = _convertCtrl.Duration If currentDuration * 2 <= duration Then pStlImgRd.Loop = CInt(duration / currentDuration + 0.5) End If End If Catch End Try End Sub
using Leadtools; using Leadtools.Multimedia; using LeadtoolsMultimediaExamples.Fixtures; public bool _result = false; public ConvertCtrlForm _form = new ConvertCtrlForm(); private ConvertCtrl _convertCtrl = null; private LTDvdWriter _dvdWriter = null; public void DvdWriterExample() { // reference the convert control _convertCtrl = _form.ConvertCtrl; // source files for DVD content string inFile1 = Path.Combine(LEAD_VARS.MediaDir,"DVDWriter_Source1.avi"); string inFile2 = Path.Combine(LEAD_VARS.MediaDir,"DVDWriter_Source2.avi"); string inFile3 = Path.Combine(LEAD_VARS.MediaDir,"DVDWriter_Source3.avi"); string inFile4 = Path.Combine(LEAD_VARS.MediaDir,"DVDWriter_Source4.avi"); string backgroundImageFile = Path.Combine(LEAD_VARS.MediaDir,"DVDWriter_Background.jpg"); string outFile = Path.Combine(LEAD_VARS.MediaDir,"ConvertCtrl_DvdWriterExample_DVD"); try { _dvdWriter = null; _convertCtrl.Preview = true; _convertCtrl.PreviewVisible = true; // setup the converter _convertCtrl.TargetFormat = TargetFormatType.DVD; _convertCtrl.VideoCompressors.Mpeg2.Selected = true; _convertCtrl.AudioCompressors.MpegAudio.Selected = true; // Create a DVD image with 2 titles, each contains 2 chapters: // Source video _convertCtrl.SourceFile = inFile1; // Destination image folder _convertCtrl.TargetFile = outFile; // Retrieve the DVD Writer interface _dvdWriter = _convertCtrl.GetSubObject(ConvertObject.Sink) as LTDvdWriter; _dvdWriter.RemoveAllMenuTitles(); _dvdWriter.MenulessTitlePlay = false; // Set the TitleBreak property to false. // This will prevent the title from being written immediately after the conversion _dvdWriter.TitleBreak = false; _dvdWriter.AddMenuTitle("Title 1", -1); // Write the first chapter in the first title _convertCtrl.StartConvert(); while (_convertCtrl.State != ConvertState.Stopped) Application.DoEvents(); _convertCtrl.ResetSource(); int highPart = 0; int lowPart = _dvdWriter.GetBytesWritten(out highPart); Int64 written = highPart << 32 | lowPart; _convertCtrl.SourceFile = inFile2; _convertCtrl.StartConvert(); while (_convertCtrl.State != ConvertState.Stopped) Application.DoEvents(); _convertCtrl.ResetSource(); // Prepare for the second title // Set the TitleBreak property to TRUE, so the the current title can be flushed _dvdWriter.TitleBreak = true; // Disable Overwrite so the title will be appended to an existing dvd image _dvdWriter.Overwrite = false; _dvdWriter.MenulessTitlePlay = false; // Set the TitleBreak property to FALSE. // This will prevent the title from being written immediately after the conversion _dvdWriter.TitleBreak = false; _dvdWriter.AddMenuTitle("Title 2", -1); // Write the first chapter in the second title _convertCtrl.SourceFile = inFile3; _convertCtrl.StartConvert(); while (_convertCtrl.State != ConvertState.Stopped) Application.DoEvents(); _convertCtrl.ResetSource(); // Write the second chapter in the second title _convertCtrl.SourceFile = inFile4; _convertCtrl.StartConvert(); while (_convertCtrl.State != ConvertState.Stopped) Application.DoEvents(); _convertCtrl.ResetSource(); // Close the second title _dvdWriter.TitleBreak = true; _dvdWriter.TitleMenu = true; _dvdWriter.MenuLoop = true; _dvdWriter.MenulessTitlePlay = false; // Write the second chapter in the second title _convertCtrl.SourceFile = backgroundImageFile; ChangeStillImageDuration(1.0); _convertCtrl.StartConvert(); while (_convertCtrl.State != ConvertState.Stopped) Application.DoEvents(); _convertCtrl.ResetSource(); _dvdWriter.TitleMenu = false; _dvdWriter.Overwrite = false; _convertCtrl.ResetTarget(); _convertCtrl.ResetSource(); // done, free COM object Marshal.ReleaseComObject(_dvdWriter); _dvdWriter = null; // set the result _result = true; } catch (Exception ex) { _result = false; } } private void ChangeStillImageDuration(double duration) { ILTStlImgRd pStlImgRd; try { pStlImgRd = _convertCtrl.GetSubObject(ConvertObject.SourceFilter) as ILTStlImgRd; if (pStlImgRd != null) { // get the current menu duration double currentDuration; currentDuration = _convertCtrl.Duration; if (currentDuration * 2 <= duration) pStlImgRd.Loop = (int)(duration / currentDuration + 0.5); } } catch { } } static class LEAD_VARS { public const string MediaDir = @"C:\Program Files (x86)\LEAD Technologies\LEADTOOLS 18\Media"; }