DVD Source for C

#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS 17.5\\Media\\")TEXT(pFileName))


void SetDVDSettingsExample (void)
{
   // Create the converter object
   IltmmConvert* pConvert; 
   IUnknown* punk; 
   IltmmDVDSource* pDVDSource; 
   HRESULT hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &pConvert); 
   if(FAILED(hr)) 
   {
      return; 
   }
   // Force the DVD source to be used
   IltmmConvert_put_UseDVDSource(pConvert, VARIANT_TRUE); 
   // Set the source DVD image
   IltmmConvert_put_SourceFile(pConvert, MAKE_MEDIA_PATH("VIDEO_TS.IFO"));
   IltmmConvert_put_TargetFile(pConvert, MAKE_MEDIA_PATH("DVDImage.avi"));
   // Get the DVD source interface
   IltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_SourceFilter, &punk); 
   if (punk) 
   {   
      IUnknown_QueryInterface(punk, &IID_IltmmDVDSource, (void**)&pDVDSource); 
      if (pDVDSource) 
      {
         IltmmDVDTitle *pTitle; 
         long lCount; 
         long lVal; 
         VARIANT_BOOL vbVal; 
         double dVal; 
         BSTR strPlayList;
         int i;
         // Select the mian title in the dics
         IltmmDVDSource_get_Selected (pDVDSource, &lVal);
         if (lVal != ltmmDVDSource_Main_Selected)
            IltmmDVDSource_put_Selected(pDVDSource, ltmmDVDSource_Main_Selected);
         // Get the disc duration
         IltmmDVDSource_get_TotalDuration(pDVDSource, &dVal);
         // Do something with the value
         // Get the selected title duration
         IltmmDVDSource_get_SelectedDuration(pDVDSource, &dVal);
         // Do something with the value
         // Get the play list settings
         IltmmDVDSource_get_PlayList(pDVDSource, &strPlayList);
         // You can save this to a file and restore the settings later
         // Restore the playlist settings
         IltmmDVDSource_put_PlayList(pDVDSource, strPlayList);
         // Free the string
         SysFreeString(strPlayList);
         // Get the title count in the disc
         IltmmDVDSource_get_TitleCount(pDVDSource, &lCount);
         for (i = 0; i < lCount; i++)
         {
            // Get the title interface
            IltmmDVDSource_GetTitle(pDVDSource, i, &pTitle);
            if (pTitle)
            {              
               // Get the X aspect
               IltmmDVDTitle_get_AspectX(pTitle, &lVal);
               // Do something with the value
               // Get the Y aspect
               IltmmDVDTitle_get_AspectY(pTitle, &lVal);
               // Do something with the value
               // Get if the title is a film mode or camera mode
               IltmmDVDTitle_get_IsFilmMode(pTitle, &vbVal);
               // Do something with the value
               // Get if there is user data in line 21, field 1
               IltmmDVDTitle_get_Line21Field1InGOP(pTitle, &vbVal);
               // Do something with the value
               // Get if there is user data in line 21, field 2
               IltmmDVDTitle_get_Line21Field2InGOP(pTitle, &vbVal);
               // Do something with the value
               // Get the compression 
               IltmmDVDTitle_get_Compression(pTitle, &lVal);
               // Do something with the value
               // Get the X source resolution
               IltmmDVDTitle_get_SourceResolutionX(pTitle, &lVal);
               // Do something with the value
               // Get the Y source resolution
               IltmmDVDTitle_get_SourceResolutionY(pTitle, &lVal);
               // Do something with the value
               // Get the Frame Height
               IltmmDVDTitle_get_FrameHeight(pTitle, &lVal);
               // Do something with the value
               // Get the Frame Rate
               IltmmDVDTitle_get_FrameRate(pTitle, &lVal);
               // Do something with the value
               // Get if the source is letter boxed
               IltmmDVDTitle_get_IsSourceLetterboxed(pTitle, &vbVal);
               // Do something with the value
               // Get if the picture can be shown as letterbox 
               IltmmDVDTitle_get_LetterboxPermitted(pTitle, &vbVal);
               // Do something with the value
               // Get if the picture can be shown as pan-scan
               IltmmDVDTitle_get_PanscanPermitted(pTitle, &vbVal);
               // Do something with the value
               // Get the title duration
               IltmmDVDTitle_get_TotalDuration(pTitle, &dVal);
               // Do something with the value
               // Select all title chapters
               IltmmDVDTitle_get_Selected(pTitle, &lVal);
               if (lVal != ltmmDVDSource_Selected)
                  IltmmDVDTitle_put_Selected(pTitle, ltmmDVDSource_Selected);
               // Get the selected chapter duration
               IltmmDVDTitle_get_SelectedDuration(pTitle, &dVal);
               // Do something with the value
               // Get the audio stream count in the title
               IltmmDVDTitle_get_AudioStreamCount(pTitle, &lVal);
               if (lVal > 0)
               {
                  IltmmDVDAudioStream* pAudioStream;
                  // Select the first audio stream
                  IltmmDVDTitle_get_SelectedAudioStream(pTitle, &lVal);
                  if (lVal == -1)
                     IltmmDVDTitle_put_SelectedAudioStream(pTitle, 0);
                  // Get the first audio stream
                  IltmmDVDTitle_GetAudioStream(pTitle, 0, &pAudioStream);
                  if (pAudioStream)
                  {
                     // Select the audio stream
                     IltmmDVDAudioStream_get_Selected(pAudioStream, &vbVal);
                     if (vbVal == VARIANT_FALSE)
                        IltmmDVDAudioStream_put_Selected(pAudioStream, VARIANT_TRUE);
                     // Get the application mode
                     IltmmDVDAudioStream_get_AppMode(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the application mode data
                     IltmmDVDAudioStream_get_AppModeData(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the auido format
                     IltmmDVDAudioStream_get_AudioFormat(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the number of channels
                     IltmmDVDAudioStream_get_Channels(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the frequency
                     IltmmDVDAudioStream_get_Frequency(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the language
                     IltmmDVDAudioStream_get_Language(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the language extension
                     IltmmDVDAudioStream_get_LanguageExtension(pAudioStream, &lVal);
                     // Do something with the value
                     // Get the quantization
                     IltmmDVDAudioStream_get_Quantization(pAudioStream, &lVal);
                     // Do something with the value
                     // Free the pointer
                     IltmmDVDAudioStream_Release(pAudioStream);
	        }
               }
               // Get the subpicture stream count
               IltmmDVDTitle_get_SubpictureStreamCount(pTitle, &lVal);
               if (lVal > 0)
               {
                  IltmmDVDSubpictureStream* pSubpictureStream;
                  // Select the first subpicture stream
                  IltmmDVDTitle_get_SelectedSubpictureStream(pTitle, &lVal);
                  if (lVal == -1)
                     IltmmDVDTitle_put_SelectedSubpictureStream(pTitle, 0);
                  // Get the first subpicture stream
                  IltmmDVDTitle_GetSubpictureStream(pTitle, 0, &pSubpictureStream);
                  if (pSubpictureStream)
                  {
                     // Select the subpicture stream
                     IltmmDVDSubpictureStream_get_Selected(pSubpictureStream, &vbVal);
                     if (vbVal == VARIANT_FALSE)
                        IltmmDVDSubpictureStream_put_Selected(pSubpictureStream, VARIANT_TRUE);
                     // Get the coding mode
                     IltmmDVDSubpictureStream_get_CodingMode(pSubpictureStream, &lVal);
                     // Do something with the value
                     // Get the langauge
                     IltmmDVDSubpictureStream_get_Language(pSubpictureStream, &lVal);
                     // Do something with the value
                     // Get the language extension
                     IltmmDVDSubpictureStream_get_LanguageExtension(pSubpictureStream, &lVal);
                     // Do something with the value
                     // Get the type
                     IltmmDVDSubpictureStream_get_Type(pSubpictureStream, &lVal);
                     // Do something with the value
                     // Free the pointer
                     IltmmDVDSubpictureStream_Release(pSubpictureStream);
                  }
               }
               // Get the chapter count
               IltmmDVDTitle_get_ChapterCount(pTitle, &lVal);
               if (lVal > 0)
               {
                  // Get the first chapter
                  IltmmDVDChapter* pChapter;
                  IltmmDVDTitle_GetChapter(pTitle, 0, &pChapter);
                  // Get the chapter duration
                  IltmmDVDChapter_get_Duration(pChapter, &dVal);
                  // Get if the chapter is selected
                  IltmmDVDChapter_get_Selected(pChapter, &vbVal);
                  if (vbVal == VARIANT_FALSE)
                     IltmmDVDChapter_put_Selected(pChapter, VARIANT_TRUE);
                  // Free the pointer
                  IltmmDVDChapter_Release(pChapter);
               }
               IltmmDVDTitle_Release(pTitle);
            }
         }
         IltmmDVDSource_Release(pDVDSource);
      }
      IUnknown_Release(punk);
   }
   IltmmConvert_Release(pConvert);
}