rendered paste body<span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">/* * VFW Compressor Settings Tool * * Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version.</span>/*vfwå缩æºè®¾ç½®å·¥å
·*çæææ(C)2006詹路æåtiesi<sherpya@netfarm.it>*è¿ä¸ªèç®æ¯å
费软件;æ¨å¯ä»¥éæ°åé
å/æ*ä¿®æ¹å®çæ¡ä»¶ä¸GNUçåºä¸è¬å
¬ä¼æ§ç
§*å
容åºççèªç±è½¯ä½åºéä¼;either*version2ofthelicense,or(atyouroption)anylaterversion. </span><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">* * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span>*æ¬å¾ä¹¦åè¡,叿å®å°æ¯æçç,*使²¡æä»»ä½ä¿ä¿®;çè³éå«ä¿ä¿®*ééæéåç¹å®ç¨é. </span><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">See the GNU * Library General Public License for more details.</span>çå°gnu*å¾ä¹¦é¦å
¬ä¼æ§ç
§æ´å¤ç»è. </span><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">* * You should have received a copy of the GNU Library General Public * License along with this software; if not, write to the * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* On mingw compile with: gcc getopt.c vfw2menc.c -o vfw2menc.exe -lwinmm */ /* Using wine: winegcc getopt.c vfw2menc.c -o vfw2menc -lwinmm */ #ifdef _MSC_VER #define _CRT_SECURE_NO_DEPRECATE #pragma warning(disable: 4996) #endif #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <getopt.h> #include <windows.h> #include <vfw.h> #define BAIL(msg) { printf("%s: %s\n", argv[0], msg); ret = -1; goto cleanup; } enum { MODE_NONE = 0, MODE_CHECK, MODE_SAVE, MODE_VIEW }; int save_settings(HDRVR hDriver, const char *filename) { FILE *fd = NULL; DWORD cb = (DWORD) SendDriverMessage(hDriver, ICM_GETSTATE, 0, 0); char *pv = NULL; if (!cb) { printf("ICM_GETSTATE returned 0 size\n"); return -1; } pv = (char *) malloc(cb); if (SendDriverMessage(hDriver, ICM_GETSTATE, (LPARAM) pv, (LPARAM) &cb) != ICERR_OK) { printf("ICM_GETSTATE failed\n"); free(pv); return -1; } fd = fopen(filename, "wb") ; if (!fd) { printf("Cannot open file %s for writing\n", filename); free(pv); return -1; } if (fwrite(pv, cb, 1, fd) ! = 1) { printf("fwrite() failed on %s\n", filename); free(pv); fclose(fd); return -1; } fclose(fd); free(pv); return 0; } int load_settings(HDRVR hDriver, const char *filename) { struct stat info; FILE *fd = NULL; char *pv; if (stat(filename, &info) < 0) { printf("stat() on %s failed\n", filename); return -1; } pv = (char *) malloc(info.st_size); fd = fopen(filename, "rb"); if (!fd) { printf("Cannot open file %s for reading\n", filename); free(pv); return -1; } if (fread(pv, info.st_size, 1, fd) != 1) { printf("fread() failed on %s\n", filename); free(pv); fclose(fd); return -1; } fc lose(fd); if (!SendDriverMessage(hDriver, ICM_SETSTATE, (LPARAM) pv, (LPARAM) info.st_size)) { printf("ICM_SETSTATE failed\n"); free(pv); return -1; } free(pv); return 0; } static s truct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "driver", required_argument, NULL, 'd' }, { "fourcc ", required_argument, NULL, 'f' }, { "save", required_argument, NULL, 's' }, { "check", required_argument, NULL, 'c' }, { "view", no_argument, NULL, 'v' }, { 0, 0, 0, 0 } }; void help(cons t char *progname) { printf("VFW to mencoder - Copyright 2006 - Gianluigi Tiesi <sherpya@netfarm.it>\n"); printf("This program is Free Software\n\n"); printf("Usage: %s\n", progname); printf(" -h|--help - displays this help\n"); printf(" -d|--driver filename - dll or drv to load\n"); printf(" -f|--fourcc fourcc - fourcc of selected driver (look at codecs.conf)\n"); printf(" -s|--save filename - save settings to file\n"); printf(" -c|--check filename - load and show setting in filename\n"); printf(" -v|--view - displays the config dialog and do nothing\n"); printf("\nExamples:\n"); printf(" %s -f VP62 -d vp6vfw.dll -s firstpass.mcf\n", progname); pri ntf(" %s -f VP62 -d vp6vfw.dll -c firstpass.mcf\n", progname); printf(" %s -f VP62 -d vp6vfw.dll -v\n", progname); printf("\nIf t he driver dialog doesn't work, you can try without specifing a fourcc,\n"); printf("but th e compdata file will not work with mencoder.\n"); printf("Driver option is required and you must specify at least -s, -c -o -v\n"); printf("Usage w ith mencoder -ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=settings.mcf\n"); } int main(int argc, char *argv[]) { char *driver = NULL; char *fourcc = NULL; char *filename = NULL; unsigned char mode = 0; wchar_t drvfile[MAX_PATH]; HDRVR hDriver = NULL; int ret = 0; int c = -1, long_options_index = -1; if (argc < 2) { help(argv[0]); ret = -1; goto cleanup; } while ((c = getopt_long(argc, argv, "hd:f:s:c:v", long_options, &long_options_index)) != -1) { switch (c) { case 'h': help(argv[0]); ret = 0; goto cleanup; case 'd': driver = strdup(o ptarg); break; case 'f': fourcc = strdup(optarg); if (strlen(optarg) != 4) BAIL("Fourcc must be exactly 4 chars"); break; case 's': if (mode != MODE_NONE) BAIL("Incompatible arguments"); filename = strdup(optarg); mode = MODE_SAVE; break; case 'c': if (mode != MODE_NON E) BAIL("Incompatible arguments"); filename = strdup(optarg); mode = MODE_CHECK; break; case 'v': if (mode != MODE_NON E) BAIL("Incompatible arguments"); mode = MODE_VIEW; break; default: printf("Wrong arguments!\n"); } } if (!(argc == optind) && (mode != MODE_NONE) && driver && (filename || (mode == MODE_VIEW))) { help(argv[0]); goto cleanup; } i f (!MultiByteToWideChar(CP_ACP, 0, driver, -1, drvfile, MAX_PATH)) BAIL("MultiByteToWideChar() failed\n"); if (!(hDriver = OpenDriver(drvfile, 0, (fourcc) ? ((LPARAM) fourcc) : 0))) BAIL("OpenDriver() failed\n"); if (SendDriverMessage(hDriver, ICM_CONFIGURE, -1, 0) != ICERR_OK) BAIL("The driver doe sn't provide a configure dialog"); switch(mode) { case MODE_CHECK: if (load_settings(hDriver, filename)) BAIL("Cannot load settings from file"); if (SendDriverMessage(hDriver, ICM_CONFIGURE, 0, 0) != ICERR_OK) BAIL("ICM_CONFIGURE failed"); break; case MODE_SAVE: if (SendDriverMessage(hDriver, IC M_CONFIGURE, 0, 0) != ICERR_OK) BAIL("ICM_CONFIGURE failed"); if (save_settings(hDriver, filename)) BAIL("Cannot save settings to file"); break; case MODE_VIEW: if (Send DriverMessage(hDriver, ICM_CONFIGURE, 0, 0) != ICERR_OK) BAIL("ICM_CONFIGURE failed"); break; default: BAIL("This should not happen :)"); } cleanup: if (driver) free(drive r); if (fourcc) free(fourcc); if (filename) free(filename); if (hDriver) CloseDriver(hDriver, 0, 0); return ret; }</span>**ä½ åºè¯¥å·²ç»æ¶å°ä¸ä»½GNUçåºä¸è¬å
¬ä¼æ§ç
§*éçè¿ä¸è½¯ä»¶;å¦ææ²¡æ,åä¿¡ç»*åºéä¼,51å¯å
°å
æè¡äºæ¥¼æ³¢å£«é¡¿é©¬02110-1301ç¾å½*//*mingwç¼è¯:gccgetopt.cvfw2menc.c-æ¾³vfw2menc.exe-lwinmm*//*ç¨é
:winegccgetopt.cvfw2menc.c-æ¾³vfw2menc-lwinmm*/#11:35_msc_ver#define_crt_secure_no_deprecate#pragmawarning(disable:4996)#endif#å
æ¬<stdio.h>#å
æ¬<stdlib.h>#å
æ¬<sys/stat.h>#å
æ¬<getopt.h>#å
æ¬<windows.h>#å
æ¬<vfw.h>#defineä¿é(msg)(printf("%s:%s\n",argv[0],msg);ret=-1;gotocleanup;enum(mode_none=0,mode_check,mode_save,mode_view).intsave_settings(hdrvrhdriver,constchar*filename)(file*fd=null;dwordcb=(dword)senddrivermessage(hdriver,icm_getstate,0,0);char*pv=null;妿(!cb)(printf("icm_getstateè¿å0大å°\n");è¿å-1;pv=(char*)malloc(cb);妿(senddrivermessage(hdriver,icm_getstate,(lparam)å
çµ(lparam)åCB)!=icerr_ok)(printf("icm_getstatefailed\n");free(pv);è¿å-1;fd=fopen(filename,"wb");妿(!199)(printf("ä¸è½æå¼æä»¶%såä½\n",filename);free(pv);è¿å-1;if(fwrite(pv,cb,1,199)!=1)(printf("fwrite()失败%s\n",filename);free(pv);fclose(fd);è¿å-1;fclose(fd);free(pv);è¿å0;intload_settings(hdrvrhdriver,constchar*filename)(structstatinfo;æ¡£æ¡*fd=null;char*é;if(stat(filename,&info)"0)(printf("stat()%sfailed\n",filename);è¿å-1;pv=(char*)malloc(info.st_size);fd=fopen(filename,"rb");妿(!199)(printf("ä¸è½æå¼æä»¶%sç书\n",filename);free(pv);è¿å-1;if(fread(pv,info.st_size,1,199)!=1)(printf("fread()失败%s\n",filename);free(pv);fclose(fd);è¿å-1;财失å»(199);妿(!senddrivermessage(hdriver,icm_setstate,(lparam)å
çµ(lparam)info.st_size))(printf("icm_setstatefailed\n");free(pv);è¿å-1;free(pv);è¿å0;ésè§£æoptionlong_options[]={("帮å©",no_argument,null,'h'),("驱å¨",required_argument,null,'d'),("fourcc"required_argument,null,'f'),("ä¿å",required_argument,null,'s'),("æ£æ¥",required_argument,null,'c'),("è§ç¹"no_argument,null,'v'),{0,0,0,0);voidhelp(constchar*progname)(printf("vfw以mencoder-çæ-2006詹路æåtiesi<sherpya@netfarm.it>\n");printf("ç¨å¼æ¯èªç±è½¯ä½\n\n");printf("usage:%s\n",progname);printf("-h|--help-æ¾ç¤ºå¸®å©\n");printf("-d|--叿ºfilename-dllædrvè´è·\n");printf("-f|--fourccfourcc-fourccéå®å¸æº(ççcodecs.conf)\n");printf("-s|--æ¯æfilename-å¨åè®¾å®æ¡£æ¡\n");printf("-ä¸|--checkfilenameè´è·æ¾ç¤ºè®¾ç½®filename\n");printf("-v|--æ¥çæ¾ç¤ºconfigdialog,æ æä½ä¸º\n");printf("\nexamples:\n");printf("%s-fvp62-dvp6vfw.dll-sfirstpass.mcf\n",progname);printf("%s-fvp62-dvp6vfw.dll-ä¸firstpass.mcf\n",progname);printf("%s-fvp62-dvp6vfw.dll-v\n",progname);printf("\tnifä»ç叿ºå¯¹è¯ä¸å·¥ä½çè¯,ä½ å¯ä»¥å°è¯æ ä¸specifingfourcc,\n");printf("ä½thecompdataæä»¶å°ä¸è½ç¨mencoder.\n");printf("叿ºåæ³è§å®,æ¨å¿
é¡»æå®è³å°-s,-c-o-v\n");printf("usagewithmencoder-ovcvfw-xvfwoptscodec=vp6vfw.dll:compdata=settings.mcf\n");intmain(intargc,char*argv[])(char*driver=null;char*fourcc=null;char*filename=null;unsignedcharmode=0;wchar_tdrvfile[max_pathã;hdrvrhdriver=null;intret=0;intc=-1,long_options_index=-1;if(argc"2)(help(argv[0]);ret=-1;gotocleanup;while((c=getopt_long(argc,argv,"髿¸
:f:s:c:Vå",long_options,&long_options_index))!=-1)(switch(c)(case'h':help(argv[0]);ret=0;gotocleanup;case'd':驾驶å=strdup(optarg);break;case'f':fourcc=strdup(optarg);if(strlen(optarg)!=4)ä¿é("fourccå¿
é¡»å好4chars");break;case's':if(模å¼!=mode_none)ä¿é("ä¸äºè®º");filename=strdup(optarg);mode=mode_save;break;case'c':if(模å¼!=mode_none)ä¿é("ä¸äºè®º");filename=strdup(optarg);mode=mode_check;break;case'v':if(模å¼!=mode_none)ä¿é("ä¸äºè®º");mode=mode_view;break;default:printf("é误论è°!\n");妿(!(argc==optind)&&(模å¼!=mode_none)&&叿º&&(filename|(mode==mode_view)))(help(argv[0]);gotocleanup;æf(!multibytetowidechar(cp_acp,0,驾驶å,-1,drvfile,max_path))ä¿é("multibytetowidechar()failed\n");妿(!(hdriver=opendriver(drvfile,0,(fourcc)?((lparam)fourcc):0)))ä¿é("opendriver()failed\n");妿(senddrivermessage(hdriver,icm_configure,-1,0)!=icerr_ok)ä¿é("叿ºè½æºé¨sn'tæä¾ä¸ä¸ªé
ç½®å¯¹è¯æ¡");switch(mode)(casemode_check:妿(load_settings(hdriver,filename))ä¿é("ä¸è½è´è·è®¾ç½®æä»¶");妿(senddrivermessage(hdriver,icm_configure,0,0)!=icerr_ok)ä¿é("icm_configure失败");break;æ¡ä¾mode_save:妿(senddrivermessage(hdriver,icm_configure,0,0)!=icerr_ok)ä¿é("icm_configure失败");妿(save_settings(hdriver,filename))ä¿é("æä¸äºè®¾å®æä»¶");break;æ¡ä¾mode_view:妿(æ´¾åºdrivermessage(hdriver,icm_configure,0,0)!=icerr_ok)ä¿é("icm_configure失败");break;é»è®¤:ä¿é("è¿æ¯ä¸åºè¯¥åçç:)");)cleanup:妿(叿º)èªç±(驱å¨r);妿(fourcc)èªç±(fourcc);if(filename)free(filename);妿(hdriver)closedriver(hdriver,0,0);returnret; </span>