Recompressing一个AVI文件为c++ DV设备

下面的代码演示了如何将一个AVI文件DV
设备:

/ /多媒体工具包包括铅头188宝金博怎么下载# include“ltmm.h”# include“resource.h”# include < tchar.h ># include < stdio . h ># include < assert.h >实例句柄g_hInstance;/ /应用程序实例句柄IltmmConvert * g_pConvert;/ /转换对象的接口指针/ /用户定义消息id用于转换事件#定义WM_CONVERTNOTIFY (WM_USER + 1000)/ // / ConvertDlgProc/ /开始转换过程,并提供了状态反馈/ // /控制:/ / IDC_CONVERTSTATUS -静态控制用于状态信息/ / IDC_CONVERTPROGRESS -静态控制用于转换的进展/ / IDC_USERABORT -按钮控件用来中止转换或退出对话框BOOL调ConvertDlgProc (HWND HWND,使用UINT味精,按钮按钮,LPARAM LPARAM){TCHAR sz [256];bstr1型;bstr2型;HRESULT人力资源;状态;类型;流;IltmmVCRControl * pVCR;开关(味精){情况下WM_INITDIALOG:/ /分配通知窗口g_pConvert - > SetNotifyWindow ((hwnd, WM_CONVERTNOTIFY);/ /设置中止按钮文本SetDlgItemText (hwnd, IDC_USERABORT _T (“中止”));/ /取消注释以下行DirectShow的GraphEdit查看图形/ / g_pConvert - > EditGraph ();g_pConvert - > get_UnrenderedStreams(流);如果(流! = 0)对话框(hwnd, _T (“并不是所有的流可能呈现。”),_T (“转换”),MB_ICONEXCLAMATION | MB_OK);g_pConvert - > get_TargetVCRControl (&pVCR);hr = pVCR - >记录();pVCR - >释放();如果(成功(人力资源)睡眠(2000);/ /启动转换hr = g_pConvert - > StartConvert ();如果(失败(人力资源){_stprintf(深圳_T (“转换错误0 x % .8X”),lParam);SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));MessageBeep (0);/ /停止,如果录像机g_pConvert - > get_TargetVCRControl (&pVCR);pVCR - >停止();pVCR - >释放();}返回真正的;打破;情况下WM_DESTROY:/ /重置通知窗口g_pConvert - > SetNotifyWindow (()空,0);# ifdef _DEBUG{状态,呃,电脑;开始、结束大调的;TCHAR sz [1024];/ /得到当前状态g_pConvert - > get_State(状态);/ /得到当前状态g_pConvert - > get_ConvertError(错);/ /得到转换g_pConvert - > get_PercentComplete (pc);/ /开始g_pConvert - > get_SelectionStart(开始);/ /结束g_pConvert - > get_SelectionEnd(与结束);/ /得到持续时间g_pConvert - > get_Duration(大调的);_stprintf(深圳_T (“国家= % d,错误= 0 x %。8 x,完成= % d % % = %克开始,结束= % g,时间= % g”),状态,呃,电脑,开始,结束,大调的);对话框(NULL,深圳,_T (“调试”),MB_OK);}# endif打破;情况下WM_COMMAND:开关(LOWORD(按钮){情况下IDC_USERABORT:/ /用户中止……停止转换g_pConvert - > get_State(状态);如果(国家= = ltmmConvert_State_Running)g_pConvert - > StopConvert ();其他的{g_pConvert - > get_ConvertError ((*)人力资源);EndDialog (hwnd, ()人力资源);}返回真正的;打破;}打破;情况下WM_CONVERTNOTIFY:开关(按钮){情况下ltmmConvert_Notify_Started:/ /显示转换已经开始g_pConvert - > get_SourceType(接线箱);开关(类型){情况下ltmmConvert_Source_File:g_pConvert - > get_SourceFile (&bstr1);打破;情况下ltmmConvert_Source_HGlobal:bstr1 = SysAllocString (L“[hglobal]”);打破;情况下ltmmConvert_Source_Array:bstr1 = SysAllocString (L“数组”);打破;情况下ltmmConvert_Source_Object:bstr1 = SysAllocString (L“对象”);打破;}g_pConvert - > get_TargetType(接线箱);开关(类型){情况下ltmmConvert_Target_File:g_pConvert - > get_TargetFile (&bstr2);打破;情况下ltmmConvert_Target_Array:bstr2 = SysAllocString (L“数组”);打破;情况下ltmmConvert_Target_Object:bstr2 = SysAllocString (L“对象”);打破;情况下ltmmConvert_Target_Device:bstr2 = SysAllocString (L“设备”);打破;}g_pConvert - > get_RenderedStreams(流);如果((流& ltmmConvert_Stream_Audio) & !(流& ltmmConvert_Stream_Video))_stprintf(深圳_T (“recompressing音频从‘% ls’% ls……”)、bstr1 bstr2);其他的如果(!(流& ltmmConvert_Stream_Audio) &(流& ltmmConvert_Stream_Video))_stprintf(深圳_T (“recompressing视频从‘% ls’% ls……”)、bstr1 bstr2);其他的_stprintf(深圳_T (“recompressing % ls’% ls……”)、bstr1 bstr2);SysFreeString (bstr1);SysFreeString (bstr2);SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));打破;情况下ltmmConvert_Notify_Complete:/ /显示一个转换完成_stprintf(深圳_T (“转换完成”));SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));/ /停止,如果录像机g_pConvert - > get_TargetVCRControl (&pVCR);pVCR - >停止();pVCR - >释放();打破;情况下ltmmConvert_Notify_ErrorAbort:/ /显示一个错误_stprintf(深圳_T (“转换错误0 x % .8X”),lParam);SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));MessageBeep (0);/ /停止,如果录像机g_pConvert - > get_TargetVCRControl (&pVCR);pVCR - >停止();pVCR - >释放();打破;情况下ltmmConvert_Notify_UserAbort:/ /显示用户中止_stprintf(深圳_T (“转换失败\ n”));SetDlgItemText (hwnd, IDC_CONVERTSTATUS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTSTATUS));SetDlgItemText (hwnd, IDC_USERABORT _T (“退出”));MessageBeep (0);/ /停止,如果录像机g_pConvert - > get_TargetVCRControl (&pVCR);pVCR - >停止();pVCR - >释放();打破;情况下ltmmConvert_Notify_Progress:/ /显示转换的进展_stprintf(深圳_T (“% 3 d % %完成”),lParam);SetDlgItemText (hwnd, IDC_CONVERTPROGRESS、深圳);UpdateWindow (GetDlgItem (hwnd, IDC_CONVERTPROGRESS));打破;}返回真正的;打破;}返回虚假的;}/ // / SetAVIRecompression/ /设置视频压缩,MP3音频压缩和AVI文件输出/ // / hwndParent =压缩机属性对话框的父窗口/ /HRESULT SetAVIRecompression (HWND hwndParent){IltmmCompressors * pCompressors;指数;VARIANT_BOOL f;型型;/ /选择视频压缩g_pConvert - > get_VideoCompressors (&pCompressors);型= SysAllocString (L“@device:西南:{33 d9a760 - 90 - c8 - 11 - d0 bd43 - 00 - a0c911ce86} \ \铅MCMP / MJPEG编码(2.0)”);pCompressors - >找到(型、和);SysFreeString(型);如果(指数< 0){/ /压缩机不是注册pCompressors - >释放();返回E_FAIL;}pCompressors - > put_Selection(指数);pCompressors - >释放();/ /选择MP3音频视频压缩g_pConvert - > get_AudioCompressors (&pCompressors);型= SysAllocString (L“@device:厘米:{33 d9a761 - 90 - c8 - 11 - d0 bd43 - 00 - a0c911ce86} \ \ 85 mpeg第三层”);pCompressors - >找到(型、和);SysFreeString(型);如果(指数< 0){/ /压缩机不是注册pCompressors - >释放();返回E_FAIL;}pCompressors - > put_Selection(指数);pCompressors - >释放();/ /输出格式设置为AVIg_pConvert - > put_TargetFormat (ltmmConvert_TargetFormat_Avi);# ifdef _DEBUG{v;g_pConvert - > get_TargetFormat(增加了);断言(v = = ltmmConvert_TargetFormat_Avi);}# endif/ /设置视频压缩属性g_pConvert - > HasDialog (ltmmConvert_Dlg_VideoCompressor, f);如果(f)g_pConvert - > ShowDialog (ltmmConvert_Dlg_VideoCompressor, ()hwndParent);/ /设置音频压缩属性g_pConvert - > HasDialog (ltmmConvert_Dlg_AudioCompressor, f);如果(f)g_pConvert - > ShowDialog (ltmmConvert_Dlg_AudioCompressor, ()hwndParent);返回S_OK;}/ / RecompressFileToDVDevice/ /最后将文件DV设备/ // / pszSource =源文件路径/ // /HRESULT RecompressFileToDVDevice (LPCTSTR pszSource){HRESULT人力资源;型型;的ifndef _UNICODEWCHAR wsz [MAX_PATH];# endifIltmmTargetDevices * pDevices;IltmmCompressors * pCompressors;/ /设置源文件# ifdef _UNICODE= SysAllocString型(pszSource);#其他的swprintf (wsz L“% h”,pszSource);= SysAllocString型(wsz);# endifhr = g_pConvert - > put_SourceFile(型);SysFreeString(型);如果(失败(人力资源)返回人力资源;/ /设置目标设备hr = g_pConvert - > put_TargetFormat (ltmmConvert_TargetFormat_dvsd);如果(失败(人力资源)返回人力资源;g_pConvert - > get_AudioCompressors (&pCompressors);hr = pCompressors - > put_Selection (1);pCompressors - >释放();如果(失败(人力资源)返回人力资源;g_pConvert - > get_VideoCompressors (&pCompressors);hr = pCompressors - > put_Selection (1);pCompressors - >释放();如果(失败(人力资源)返回人力资源;g_pConvert - > get_TargetDevices (&pDevices);hr = pDevices - > put_Selection (0);pDevices - >释放();如果(失败(人力资源)返回人力资源;/ /转换hr = (HRESULT)对话框(g_hInstance LPCTSTR IDD_CONVERTDLG, NULL, ConvertDlgProc);返回人力资源;}intAPIENTRY . WinMain(实例句柄实例句柄,实例句柄hPrevInstance,[lpCmdLine,intnCmdShow){HRESULT人力资源;g_hInstance =实例句柄;/ /初始化COM库hr = CoInitialize(空);如果(失败(人力资源)转到错误;/ /创建对象转换hr = CoCreateInstance (CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER IID_IltmmConvert (无效* *)&g_pConvert);如果(失败(人力资源)转到错误;hr = RecompressFileToDVDevice (MAKE_MEDIA_PATH (“source.avi”));如果(失败(人力资源)转到错误;错误:/ /清理如果(g_pConvert)g_pConvert - >释放();CoUninitialize ();返回0;}

LEADTOOLS多188宝金博怎么下载媒体C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。