diff --git a/delogo.rc b/delogo.rc index 2c0bc91..dd733c3 100644 --- a/delogo.rc +++ b/delogo.rc @@ -115,8 +115,8 @@ FONT 9, " // VERSION INFO // VS_VIRSION_INFO VERSIONINFO - FILEVERSION 0,0,9,1 - PRODUCTVERSION 0,0,9 + FILEVERSION 0,1,1,0 + PRODUCTVERSION 0,1,1 FILEFLAGSMASK 0x3FL FILEFLAGS 0x0L FILEOS VOS__WINDOWS32 @@ -129,12 +129,12 @@ VS_VIRSION_INFO VERSIONINFO { // VALUE "Comments", "ロゴサンプル提供者募集中\0" VALUE "FileDescription", "透過性ロゴ フィルタ Plugin for AviUtl 0.98以降\0" - VALUE "FileVersion", "0.0.9.1\0" + VALUE "FileVersion", "0.1.1.0\0" VALUE "InternalName", "deLogo\0" VALUE "LegalCopyright", "(C) MakKi\0" VALUE "OriginalFilename", "delogo.aup\0" VALUE "ProductName", "透過性ロゴ フィルタ\0" - VALUE "ProductVersion", "0.09a\0" + VALUE "ProductVersion", "0.11\0" } } BLOCK "VarFileInfo" diff --git a/filter.c b/filter.c index 780e90e..9a224db 100644 --- a/filter.c +++ b/filter.c @@ -1,6 +1,6 @@ /********************************************************************* * 透過性ロゴ(BSマークとか)除去フィルタ -* ver 0.10 +* ver 0.11 * * 2003 * 02/01: 製作開始 @@ -66,6 +66,10 @@ * 04/18: フィルタ名、パラメタ名を変更できるようにした。(0.09a) * 2007 * 11/07: プロファイルの境界をフェードの基点にできるようにした。(0.10) +* 2008 +* 01/07: ロゴのサイズ制限を撤廃 +* 開始・終了パラメタの範囲変更(負の値も許可) +* ロゴファイルのデータ数を拡張(1byte -> 4byte) * *********************************************************************/ @@ -141,6 +145,9 @@ FILTER_DIALOG dialog; LOGO_HEADER** logodata = NULL; unsigned int logodata_n = 0; +void *adjdata = NULL; // 位置調節後ロゴデータ用バッファ +unsigned int adjdata_size = 0; + char ex_data[LOGO_MAX_NAME]; // 拡張データ領域 static UINT WM_SEND_LOGO_DATA =0; // ロゴ受信メッセージ @@ -173,15 +180,21 @@ BOOL func_proc_add_logo(FILTER *fp,FILTER_PROC_INFO *fpip,LOGO_HEADER *lgh,int); // FILTER_DLL構造体 //---------------------------- char filter_name[] = LOGO_FILTER_NAME; -char filter_info[] = LOGO_FILTER_NAME" ver 0.10 by MakKi"; +char filter_info[] = LOGO_FILTER_NAME" ver 0.11 by MakKi"; #define track_N 10 #if track_N TCHAR *track_name[] = { "位置 X", "位置 Y", "深度", "Y", "Cb", "Cr", "開始", "FadeIn", "FadeOut", "終了" }; // トラックバーの名前 -int track_default[] = { 0, 0, 128, 0, 0, 0, 0, 0, 0, 0 }; // トラックバーの初期値 -int track_s[] = { LOGO_XY_MIN, LOGO_XY_MIN, 0, -100, -100, -100, 0, 0, 0, 0 }; // トラックバーの下限値 -int track_e[] = { LOGO_XY_MAX, LOGO_XY_MAX, 256, 100, 100, 100, LOGO_STED_MAX, LOGO_FADE_MAX, LOGO_FADE_MAX, LOGO_STED_MAX }; // トラックバーの上限値 +int track_default[] = { 0, 0, + 128, 0, 0, 0, + 0, 0, 0, 0, 0 }; // トラックバーの初期値 +int track_s[] = { LOGO_XY_MIN, LOGO_XY_MIN, + 0, -100, -100, -100, + LOGO_STED_MIN, 0, 0, LOGO_STED_MIN }; // トラックバーの下限値 +int track_e[] = { LOGO_XY_MAX, LOGO_XY_MAX, + 256, 100, 100, 100, + LOGO_STED_MAX, LOGO_FADE_MAX, LOGO_FADE_MAX, LOGO_STED_MAX }; // トラックバーの上限値 #endif #define check_N 3 #if check_N @@ -321,6 +334,10 @@ BOOL func_exit( FILTER *fp ) logodata = NULL; } + free(adjdata); + adjdata = NULL; + adjdata_size = 0; + return TRUE; } @@ -329,7 +346,7 @@ BOOL func_exit( FILTER *fp ) *===================================================================*/ BOOL func_proc(FILTER *fp,FILTER_PROC_INFO *fpip) { - static char adjdata[LOGO_MAXSIZE]; + unsigned int size; int num; int fade; @@ -337,6 +354,17 @@ BOOL func_proc(FILTER *fp,FILTER_PROC_INFO *fpip) num = find_logo(fp->ex_data_ptr); if(num<0) return FALSE; + size = sizeof(LOGO_HEADER) + + (logodata[num]->h+1) * (logodata[num]->w+1) * sizeof(LOGO_PIXEL); + if(size > adjdata_size){ + adjdata = realloc(adjdata,size); + adjdata_size = size; + } + if(adjdata==NULL){ //確保失敗 + adjdata_size = 0; + return FALSE; + } + fade = calc_fade(fp,fpip); if(fp->track[LOGO_X]%4 || fp->track[LOGO_Y]%4){ @@ -344,9 +372,9 @@ BOOL func_proc(FILTER *fp,FILTER_PROC_INFO *fpip) if(!create_adj_exdata(fp,(void *)adjdata,logodata[num])) return FALSE; } - else { + else{ // 4の倍数のときはx,yのみ書き換え - memcpy(adjdata,logodata[num],LOGO_DATASIZE(logodata[num])); + memcpy(adjdata,logodata[num],size); ((LOGO_HEADER *)adjdata)->x += fp->track[LOGO_X] / 4; ((LOGO_HEADER *)adjdata)->y += fp->track[LOGO_Y] / 4; } @@ -708,7 +736,7 @@ static void on_wm_filter_exit(FILTER* fp) n++; } - lfh.logonum = n; + lfh.logonum.l = SWAP_ENDIAN(n); SetFilePointer(hFile,0, 0, FILE_BEGIN); // 先頭へ dw = 0; WriteFile(hFile,&lfh,sizeof(lfh),&dw,NULL); @@ -1044,7 +1072,7 @@ static void read_logo_pack(char *fname,FILTER *fp) void* data; int i; int same; -// char message[255]; + int logonum; // ファイルオープン hFile = CreateFile(fname,GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); @@ -1064,8 +1092,9 @@ static void read_logo_pack(char *fname,FILTER *fp) logodata_n = 0; // 書き込みデータカウンタ logodata = NULL; + logonum = SWAP_ENDIAN(lfh.logonum.l); - for(i=0;i" // ファイルヘッダ文字列:バージョン情報(28byte) * +---- -* | ファイルに含まれるロゴデータの数(1byte) +* | ファイルに含まれるロゴデータの数(4byte, BigEndian) * +---- * | LOGO_HEADER // データヘッダ * +---- @@ -25,25 +23,24 @@ #ifndef ___LOGO_H #define ___LOGO_H -/* ロゴファイルヘッダ -* 31BYTEの文字列 -* データ数 1BYTE -*/ -#define LOGO_FILE_HEADER_STR "\0\0\0\0\0\0\0\0\0\0\0" -#define LOGO_FILE_HEADER_STR_SIZE 31 +/* ロゴヘッダ文字列 */ +#define LOGO_FILE_HEADER_STR "\0\0\0\0\0" +#define LOGO_FILE_HEADER_STR_SIZE 28 +/*-------------------------------------------------------------------- +* LOGO_FILE_HEADER 構造体 +* ファイルヘッダ. +* バージョン情報と含まれるデータ数 +*-------------------------------------------------------------------*/ typedef struct { - char str[LOGO_FILE_HEADER_STR_SIZE]; - unsigned char logonum; + char str[LOGO_FILE_HEADER_STR_SIZE]; + union{ + unsigned long l; + unsigned char c[4]; + } logonum; } LOGO_FILE_HEADER; - -/* ロゴデータ最大サイズ: -* ロゴデータをプロファイルに保存しないようにしたため、 -* サイズ制限は実質なくなった -*/ -#define LOGO_MAXPIXEL (21840) -#define LOGO_MAXSIZE (0x40000) +#define SWAP_ENDIAN(x) (((x&0xff)<<24)|((x&0xff00)<<8)|((x&0xff0000)>>8)|((x&0xff000000)>>24)) /* 不透明度最大値 */ #define LOGO_MAX_DP 1000 diff --git a/logodef.h b/logodef.h index 3291151..b79ba7a 100644 --- a/logodef.h +++ b/logodef.h @@ -7,6 +7,7 @@ #define LOGO_FADE_MAX 256 #define LOGO_XY_MAX 500 #define LOGO_XY_MIN -500 -#define LOGO_STED_MAX 4096 +#define LOGO_STED_MAX 256 +#define LOGO_STED_MIN -256 #endif diff --git a/logoscan/filter.cpp b/logoscan/filter.cpp index 6bb0278..c02099b 100644 --- a/logoscan/filter.cpp +++ b/logoscan/filter.cpp @@ -1,5 +1,5 @@ /********************************************************************* -* ロゴ解析プラグイン ver 0.06b +* ロゴ解析プラグイン ver 0.07 * * 2003 * 04/06: とりあえず完成。 @@ -44,10 +44,15 @@ * ログファイルのデフォルト名をソースファイル名からつくるようにした。(0.06a) * 10/23: 有効フレームリスト保存ダイアログでキャンセルすると落ちるバグ修正。 * 妙な記述があったのを修正。(何で動いてたんだろ… +* 2008 +* 01/07: ロゴサイズ制限撤廃 +* ロゴファイルのデータ数拡張に伴う修正 * *********************************************************************/ /* TODO: * ・拡大ツール機能(気まぐれバロンさんのアイディア) +* ・セーブ中は何もしないようにする +* ・結果ダイアログで開始・終了・フェードを書き込めるようにする * * MEMO: * ・背景値計算改善策@:メディアン化してから平均とか @@ -99,7 +104,7 @@ void SetScanPixel(FILTER*,ScanPixel*&,int,int,int,int,void*,char*); // FILTER_DLL構造体 //---------------------------- char filter_name[] = "ロゴ解析"; -char filter_info[] = "ロゴ解析プラグイン ver 0.06b by MakKi"; +char filter_info[] = "ロゴ解析プラグイン ver 0.07 by MakKi"; #define track_N 5 #if track_N @@ -436,9 +441,9 @@ void ScanLogoData(FILTER* fp,void* editp) fp->exfunc->get_select_frame(editp,&start,&end); if(end-start<1) throw "画像の枚数が足りません"; - if((fp->track[tLOGOW]+1)*(fp->track[tLOGOH]+1) > LOGO_MAXPIXEL) - // h*wがロゴデータ上限より大きい時 - throw "ロゴ領域が広すぎます"; +// if((fp->track[tLOGOW]+1)*(fp->track[tLOGOH]+1) > LOGO_MAXPIXEL) +// // h*wがロゴデータ上限より大きい時 +// throw "ロゴ領域が広すぎます"; // 画像サイズ if(!fp->exfunc->get_frame_size(editp,&w,&h)) diff --git a/logoscan/logoscan.rc b/logoscan/logoscan.rc index 4787058..37c5137 100644 --- a/logoscan/logoscan.rc +++ b/logoscan/logoscan.rc @@ -77,8 +77,8 @@ FONT 9, " // VERSION INFO // VS_VIRSION_INFO VERSIONINFO - FILEVERSION 0,0,6,2 - PRODUCTVERSION 0,0,6 + FILEVERSION 0,0,7,0 + PRODUCTVERSION 0,0,7 FILEFLAGSMASK 0x3FL FILEFLAGS 0x0L FILEOS VOS__WINDOWS32 @@ -89,14 +89,13 @@ VS_VIRSION_INFO VERSIONINFO { BLOCK "041103A4" { -// VALUE "Comments", "beta version\0" VALUE "FileDescription", "ロゴ解析 Plugin for AviUtl 0.98d\0" - VALUE "FileVersion", "0.06b\0" + VALUE "FileVersion", "0.07\0" VALUE "InternalName", "LogoScan\0" VALUE "LegalCopyright", "(C) MakKi\0" VALUE "OriginalFilename", "logoscan.aup\0" VALUE "ProductName", "ロゴ解析 プラグイン\0" - VALUE "ProductVersion", "0.06b\0" + VALUE "ProductVersion", "0.07\0" } } BLOCK "VarFileInfo" diff --git a/logoscan/readme.txt b/logoscan/readme.txt index 5ca0099..d4d1db5 100644 --- a/logoscan/readme.txt +++ b/logoscan/readme.txt @@ -1,5 +1,5 @@ ----------------------------------------------------------------------- - ロゴ解析 プラグイン ver 0.06b by MakKi + ロゴ解析 プラグイン ver 0.07 by MakKi ----------------------------------------------------------------------- 【機能】 @@ -52,7 +52,8 @@ http://mksoft.hp.infoseek.co.jp/ 【更新履歴】 - + 2008/01/07 ver 0.07 ・ロゴサイズの制限を撤廃 + ・ロゴファイルの最大データ数拡張に対応 2003/10/26 ver 0.06b ・フレームリスト保存ダイアログでキャンセルすると落ちるバグ修正。 2003/10/21 ver 0.06a ・自前でRGB->YCbCrするようにした。(SSE2での不具合対策) ・有効フレームリストを保存のチェックが入っていない時動かないバグ修正。 diff --git a/logoscan/resultdlg.c b/logoscan/resultdlg.c index 3a83880..48788b5 100644 --- a/logoscan/resultdlg.c +++ b/logoscan/resultdlg.c @@ -257,8 +257,8 @@ static void ExportLogoData(char *fname,void *data,HWND hdlg) HANDLE hFile; DWORD dw; DWORD size; - char c =1; int s =0; + LOGO_FILE_HEADER lfh; // ファイルを開く hFile = CreateFile(fname,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); @@ -267,31 +267,26 @@ static void ExportLogoData(char *fname,void *data,HWND hdlg) } SetFilePointer(hFile,0, 0, FILE_BEGIN); // 先頭へ + ZeroMemory(&lfh,sizeof(LOGO_FILE_HEADER)); + strcpy(lfh.str,LOGO_FILE_HEADER_STR); + lfh.logonum.l = SWAP_ENDIAN(1); + // ヘッダ書き込み dw = 0; - WriteFile(hFile,LOGO_FILE_HEADER,31,&dw,NULL); - if(dw!=31){ // 書き込み失敗 + WriteFile(hFile,&lfh,sizeof(LOGO_FILE_HEADER),&dw,NULL); + if(dw!=sizeof(LOGO_FILE_HEADER)){ // 書き込み失敗 MessageBox(hdlg,"ロゴデータ保存に失敗しました(1)",filter_name,MB_OK|MB_ICONERROR); s=1; } else{ // 成功 - // データ数書き込み(必ず1) + // データ書き込み + size = LOGO_DATASIZE(data); // データサイズ取得 dw = 0; - WriteFile(hFile,&c,1,&dw,NULL); - if(dw!=1){ // 書き込み失敗 + WriteFile(hFile,data,size,&dw,NULL); + if(dw!=size){ MessageBox(hdlg,"ロゴデータ保存に失敗しました(2)",filter_name,MB_OK|MB_ICONERROR); s=1; } - else{ // 成功 - // データ書き込み - size = LOGO_DATASIZE(data); // データサイズ取得 - dw = 0; - WriteFile(hFile,data,size,&dw,NULL); - if(dw!=size){ - MessageBox(hdlg,"ロゴデータ保存に失敗しました(3)",filter_name,MB_OK|MB_ICONERROR); - s=1; - } - } } CloseHandle(hFile); diff --git a/optdlg.c b/optdlg.c index 96fb9cd..616cf73 100644 --- a/optdlg.c +++ b/optdlg.c @@ -383,6 +383,7 @@ static void on_IDC_DOWN(HWND hdlg) static int ReadLogoData(char *fname,HWND hdlg) { HANDLE hFile; + LOGO_FILE_HEADER lfh; LOGO_HEADER lgh; DWORD readed = 0; ULONG ptr; @@ -406,10 +407,17 @@ static int ReadLogoData(char *fname,HWND hdlg) return 0; } - SetFilePointer(hFile,31, 0, FILE_BEGIN); // 先頭から31byteへ - ReadFile(hFile,&num,1,&readed,NULL); // データ数取得 +// SetFilePointer(hFile,31, 0, FILE_BEGIN); // 先頭から31byteへ +// ReadFile(hFile,&num,1,&readed,NULL); // データ数取得 + ReadFile(hFile,&lfh,sizeof(LOGO_FILE_HEADER),&readed,NULL); + if(readed!=sizeof(LOGO_FILE_HEADER)){ + CloseHandle(hFile); + MessageBox(hdlg,"ロゴデータファイルの読み込みに失敗しました",filter_name,MB_OK|MB_ICONERROR); + return 0; + } n = 0; // 読み込みデータカウンタ + num = SWAP_ENDIAN(lfh.logonum.l); for(i=0;i