Recompressing an AVI File to a DV Device for C

The following code demonstrates how to recompress an AVI file to a DV device:

#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\Program Files (x86)\\LEAD Technologies\\LEADTOOLS 19\\Media\\")TEXT(pFileName)) 
// define helper macros for using interfaces under C 
#ifndef COBJMACROS 
#define COBJMACROS 
#endif 
// include the LEAD Multimedia TOOLKIT header 
#include "ltmm.h" 
#include "resource.h" 
#include <tchar.h> 
#include <stdio.h> 
#include <assert.h> 
IltmmConvert* g_pConvert;      // convert object's interface pointer 
// user defined message id used for conversion events 
#define WM_CONVERTNOTIFY (WM_USER + 1000) 
// 
// ConvertDlgProc 
// starts the conversion process and provides status feedback 
// 
// controls: 
// IDC_CONVERTSTATUS - static control used for status messages 
// IDC_CONVERTPROGRESS - static control used for conversion progress 
// IDC_USERABORT - button control used to abort the conversion or exit the dialog 
BOOL CALLBACK ConvertDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
   TCHAR sz[256]; 
   BSTR bstr1 = NULL; 
   BSTR bstr2 = NULL; 
   HRESULT hr; 
   long state; 
   long type; 
   long streams; 
   IltmmVCRControl* pVCR; 
   switch (msg) 
   { 
   case WM_INITDIALOG: 
      // assign the notification window 
      IltmmConvert_SetNotifyWindow (g_pConvert, (long) hwnd, WM_CONVERTNOTIFY); 
      // set the abort button text 
      SetDlgItemText(hwnd, IDC_USERABORT, _T("Abort")); 
      // uncomment the following line to view the the graph in DirectShow GraphEdit 
      // IltmmConvert_EditGraph(g_pConvert); 
      IltmmConvert_get_UnrenderedStreams(g_pConvert, &streams); 
      if(streams != 0) 
         MessageBox(hwnd, _T("Not all the streams could be rendered."), _T("Convert"), MB_ICONEXCLAMATION | MB_OK); 
      IltmmConvert_get_TargetVCRControl(g_pConvert, &pVCR); 
      hr = IltmmVCRControl_Record(pVCR); 
      IUnknown_Release(pVCR); 
      if(SUCCEEDED(hr)) 
         Sleep(2000); 
      // start the conversion 
      hr = IltmmConvert_StartConvert (g_pConvert); 
      if(FAILED(hr)) 
      { 
         _stprintf(sz, _T("conversion error 0x%.8X"), lParam); 
         SetDlgItemText(hwnd, IDC_CONVERTSTATUS, sz); 
         UpdateWindow(GetDlgItem(hwnd, IDC_CONVERTSTATUS)); 
         SetDlgItemText(hwnd, IDC_USERABORT, _T("Exit")); 
         MessageBeep(0); 
         // stop, if VCR 
         IltmmConvert_get_TargetVCRControl(g_pConvert, &pVCR); 
         IltmmVCRControl_Stop (pVCR); 
         IUnknown_Release(pVCR); 
      } 
      return TRUE; 
      break; 
   case WM_DESTROY: 
      // reset the notification window 
      IltmmConvert_SetNotifyWindow (g_pConvert, (long) NULL, 0); 
#ifdef _DEBUG 
      { 
         long state, err, pc; 
         double start, end, dur; 
         TCHAR sz[1024]; 
         // get the current state 
         IltmmConvert_get_State (g_pConvert, &state); 
         // get the current state 
         IltmmConvert_get_ConvertError(g_pConvert, &err); 
         // get the amount converted 
         IltmmConvert_get_PercentComplete(g_pConvert, &pc); 
         // get the start 
         IltmmConvert_get_SelectionStart (g_pConvert, &start); 
         // get the end 
         IltmmConvert_get_SelectionEnd(g_pConvert, &end); 
         // get the duration 
         IltmmConvert_get_Duration(g_pConvert, &dur); 
         _stprintf(sz, _T("state = %d, error = 0x%.8X, complete = %d complete"), lParam); 
         SetDlgItemText(hwnd, IDC_CONVERTPROGRESS, sz); 
         UpdateWindow(GetDlgItem(hwnd, IDC_CONVERTPROGRESS)); 
         break; 
      } 
      return TRUE; 
      break; 
   } 
   return FALSE; 
} 
// 
// RecompressFileToDVDevice 
// recompresses file to DV device 
// 
// pszSource = source file path 
// 
HRESULT RecompressFileToDVDevice(LPCTSTR pszSource, HINSTANCE hInstance) 
{ 
   HRESULT hr; 
   BSTR bstr; 
#ifndef _UNICODE 
   WCHAR wsz[MAX_PATH]; 
#endif 
   IltmmTargetDevices* pDevices; 
   IltmmCompressors* pCompressors; 
   // set source file 
#ifdef _UNICODE 
   bstr = SysAllocString(pszSource); 
#else 
   swprintf(wsz, L"%hs", pszSource); 
   bstr = SysAllocString(wsz); 
#endif 
   hr = IltmmConvert_put_SourceFile(g_pConvert, bstr); 
   SysFreeString(bstr); 
   if(FAILED(hr)) 
      return hr; 
   // set target device 
   hr = IltmmConvert_put_TargetFormat(g_pConvert, ltmmConvert_TargetFormat_dvsd); 
   if(FAILED(hr)) 
      return hr; 
   IltmmConvert_get_AudioCompressors(g_pConvert, &pCompressors); 
   hr = IltmmCompressors_put_Selection(pCompressors, -1); 
   IUnknown_Release(pCompressors); 
   if(FAILED(hr)) 
      return hr; 
   IltmmConvert_get_VideoCompressors(g_pConvert,&pCompressors); 
   hr = IltmmCompressors_put_Selection(pCompressors, -1); 
   IUnknown_Release(pCompressors); 
   if(FAILED(hr)) 
      return hr; 
   IltmmConvert_get_TargetDevices(g_pConvert, &pDevices); 
   hr = IltmmTargetDevices_put_Selection(pDevices, 0); 
   IUnknown_Release(pDevices); 
   if(FAILED(hr)) 
      return hr; 
   // do conversion 
   hr = (HRESULT) DialogBox(hInstance, (LPCTSTR)IDD_CONVERTDLG, NULL, ConvertDlgProc); 
   return hr; 
} 
void RecompressingAVIFileToDVDevice_Example ( HINSTANCE hInstance /*application instance handle*/ ) 
{ 
   HRESULT hr; 
   // initialize COM library 
   hr = CoInitialize(NULL); 
   if(FAILED(hr)) 
      goto error; 
   // create the convert object 
   hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &g_pConvert); 
   if(FAILED(hr)) 
      goto error; 
   hr = RecompressFileToDVDevice(MAKE_MEDIA_PATH("source.avi"), hInstance); 
   if(FAILED(hr)) 
      goto error; 
error: 
   // cleanup 
   if(g_pConvert) 
      IUnknown_Release(g_pConvert); 
   CoUninitialize(); 
} 

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS Multimedia C API Help