1
1
/*********************************************************************
2
2
* 透過性ロゴ(BSマークとか)除去フィルタ
3
- * ver 0.09a
3
+ * ver 0.10
4
4
*
5
5
* 2003
6
6
* 02/01: 製作開始
64
64
* 開始・フェードイン・アウト・終了の初期値をロゴデータに保存できるようにした。(0.09)
65
65
* 2005
66
66
* 04/18: フィルタ名、パラメタ名を変更できるようにした。(0.09a)
67
+ * 2007
68
+ * 11/07: プロファイルの境界をフェードの基点にできるようにした。(0.10)
67
69
*
68
70
*********************************************************************/
69
71
70
72
/* ToDo:
71
73
* ・ロゴデータの作成・編集機能
72
- * ・ロゴデータに開始・終了・フェードの情報埋め込み
73
- * コンボボックスで変更された時だけそれらを反映させる(たくや氏よ、プロファイル使えば必要ないでしょうに
74
74
*
75
75
* MEMO:
76
76
* ・ロゴの拡大縮小ルーチン自装しないとだめかなぁ。
@@ -161,6 +161,7 @@ static void read_logo_pack(char *logodata_file,FILTER *fp);
161
161
static void set_sended_data (void * logodata ,FILTER * fp );
162
162
static BOOL create_adj_exdata (FILTER * fp ,LOGO_HEADER * adjdata ,const LOGO_HEADER * data );
163
163
static int find_logo (const char * logo_name );
164
+ static int calc_fade (FILTER * fp ,FILTER_PROC_INFO * fpip );
164
165
165
166
static BOOL on_option_button (FILTER * fp );
166
167
static BOOL on_avisynth_button (FILTER * fp ,void * editp );
@@ -172,7 +173,7 @@ BOOL func_proc_add_logo(FILTER *fp,FILTER_PROC_INFO *fpip,LOGO_HEADER *lgh,int);
172
173
// FILTER_DLL構造体
173
174
//----------------------------
174
175
char filter_name [] = LOGO_FILTER_NAME ;
175
- char filter_info [] = LOGO_FILTER_NAME " ver 0.09a by MakKi" ;
176
+ char filter_info [] = LOGO_FILTER_NAME " ver 0.10 by MakKi" ;
176
177
#define track_N 10
177
178
#if track_N
178
179
TCHAR * track_name [] = { "位置 X" , "位置 Y" ,
@@ -182,10 +183,10 @@ char filter_info[] = LOGO_FILTER_NAME" ver 0.09a by MakKi";
182
183
int track_s [] = { LOGO_XY_MIN , LOGO_XY_MIN , 0 , -100 , -100 , -100 , 0 , 0 , 0 , 0 }; // トラックバーの下限値
183
184
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 }; // トラックバーの上限値
184
185
#endif
185
- #define check_N 2
186
+ #define check_N 3
186
187
#if check_N
187
- TCHAR * check_name [] = { "ロゴ付加モード" ,"ロゴ除去モード" }; // チェックボックス
188
- int check_default [] = { 0 , 1 }; // デフォルト
188
+ TCHAR * check_name [] = { "ロゴ付加モード" ,"ロゴ除去モード" , "プロファイル境界をフェード基点にする" }; // チェックボックス
189
+ int check_default [] = { 0 , 1 , 0 }; // デフォルト
189
190
#endif
190
191
191
192
#define LOGO_X 0
@@ -201,13 +202,16 @@ char filter_info[] = LOGO_FILTER_NAME" ver 0.09a by MakKi";
201
202
#define LOGO_FOUT 8
202
203
#define LOGO_END 9
203
204
205
+ #define LOGO_ADDMODE 0
206
+ #define LOGO_DELMODE 1
207
+ #define LOGO_BASEPROFILE 2
208
+
204
209
// 設定ウィンドウの高さ
205
210
#define WND_Y (67+24*track_N+20*check_N)
206
211
207
212
208
213
FILTER_DLL filter = {
209
214
FILTER_FLAG_WINDOW_SIZE | // フィルタのフラグ
210
- FILTER_FLAG_RADIO_BUTTON |
211
215
FILTER_FLAG_EX_DATA |
212
216
FILTER_FLAG_EX_INFORMATION ,
213
217
320 ,WND_Y , // 設定ウインドウのサイズ
@@ -328,32 +332,12 @@ BOOL func_proc(FILTER *fp,FILTER_PROC_INFO *fpip)
328
332
static char adjdata [LOGO_MAXSIZE ];
329
333
int num ;
330
334
int fade ;
331
- int s ,e ;
332
335
333
336
// ロゴ検索
334
337
num = find_logo (fp -> ex_data_ptr );
335
338
if (num < 0 ) return FALSE;
336
339
337
- // 選択範囲取得
338
- if (!fp -> exfunc -> get_select_frame (fpip -> editp ,& s ,& e ))
339
- return FALSE;
340
-
341
- // フェード不透明度計算
342
- if (fpip -> frame < s + fp -> track [LOGO_STRT ]+ fp -> track [LOGO_FIN ]){
343
- if (fpip -> frame < s + fp -> track [LOGO_STRT ])
344
- return FALSE; // フェードイン前
345
- else // フェードイン
346
- fade = ((fpip -> frame - s - fp -> track [LOGO_STRT ])* 2 + 1 )* LOGO_FADE_MAX / (fp -> track [LOGO_FIN ]* 2 );
347
- }
348
- else if (fpip -> frame > e - fp -> track [LOGO_FOUT ]- fp -> track [LOGO_END ]){
349
- if (fpip -> frame > e - fp -> track [LOGO_END ])
350
- return FALSE; // フェードアウト後
351
- else // フェードアウト
352
- fade = ((e - fpip -> frame - fp -> track [LOGO_END ])* 2 + 1 )* LOGO_FADE_MAX / (fp -> track [LOGO_FOUT ]* 2 );
353
- }
354
- else
355
- fade = LOGO_FADE_MAX ; // 通常
356
-
340
+ fade = calc_fade (fp ,fpip );
357
341
358
342
if (fp -> track [LOGO_X ]%4 || fp -> track [LOGO_Y ]%4 ){
359
343
// 位置調整が4の倍数でないとき、1/4ピクセル単位調整
@@ -367,7 +351,7 @@ BOOL func_proc(FILTER *fp,FILTER_PROC_INFO *fpip)
367
351
((LOGO_HEADER * )adjdata )-> y += fp -> track [LOGO_Y ] / 4 ;
368
352
}
369
353
370
- if (fp -> check [1 ]) // 除去モードチェック
354
+ if (fp -> check [LOGO_DELMODE ]) // 除去モードチェック
371
355
return func_proc_eraze_logo (fp ,fpip ,(void * )adjdata ,fade ); // ロゴ除去モード
372
356
else
373
357
return func_proc_add_logo (fp ,fpip ,(void * )adjdata ,fade ); // ロゴ付加モード
@@ -502,7 +486,7 @@ BOOL func_proc_add_logo(FILTER *fp,FILTER_PROC_INFO *fpip,LOGO_HEADER *lgh,int f
502
486
/*--------------------------------------------------------------------
503
487
* find_logo() ロゴ名からロゴデータを検索
504
488
*-------------------------------------------------------------------*/
505
- static int find_logo (const char * logo_name )
489
+ static int find_logo (const char * logo_name )
506
490
{
507
491
unsigned int i ;
508
492
@@ -514,11 +498,71 @@ static int find_logo(const char *logo_name)
514
498
return -1 ;
515
499
}
516
500
501
+ /*--------------------------------------------------------------------
502
+ * calc_fade() フェード不透明度計算
503
+ *-------------------------------------------------------------------*/
504
+ static int calc_fade (FILTER * fp ,FILTER_PROC_INFO * fpip )
505
+ {
506
+ int fade ;
507
+ int s ,e ;
508
+
509
+ if (fp -> check [LOGO_BASEPROFILE ]){
510
+ FRAME_STATUS fs ;
511
+ int profile ;
512
+ int i ;
513
+
514
+ if (!fp -> exfunc -> get_frame_status (fpip -> editp ,fpip -> frame ,& fs ))
515
+ return LOGO_FADE_MAX ;
516
+ profile = fs .config ;
517
+
518
+ for (i = fpip -> frame ;i ;-- i ){
519
+ if (!fp -> exfunc -> get_frame_status (fpip -> editp ,i - 1 ,& fs ))
520
+ return LOGO_FADE_MAX ;
521
+ if (fs .config != profile )
522
+ break ;
523
+ }
524
+ s = i ;
525
+
526
+ for (i = fpip -> frame ;i < fpip -> frame_n - 1 ;++ i ){
527
+ if (!fp -> exfunc -> get_frame_status (fpip -> editp ,i + 1 ,& fs ))
528
+ return LOGO_FADE_MAX ;
529
+ if (fs .config != profile )
530
+ break ;
531
+ }
532
+ e = i ;
533
+ }
534
+ else {
535
+ // 選択範囲取得
536
+ if (!fp -> exfunc -> get_select_frame (fpip -> editp ,& s ,& e ))
537
+ return LOGO_FADE_MAX ;
538
+ }
539
+
540
+ // フェード不透明度計算
541
+ if (fpip -> frame < s + fp -> track [LOGO_STRT ]+ fp -> track [LOGO_FIN ]){
542
+ if (fpip -> frame < s + fp -> track [LOGO_STRT ])
543
+ return 0 ; // フェードイン前
544
+ else // フェードイン
545
+ fade = ((fpip -> frame - s - fp -> track [LOGO_STRT ])* 2 + 1 )* LOGO_FADE_MAX / (fp -> track [LOGO_FIN ]* 2 );
546
+ }
547
+ else if (fpip -> frame > e - fp -> track [LOGO_FOUT ]- fp -> track [LOGO_END ]){
548
+ if (fpip -> frame > e - fp -> track [LOGO_END ])
549
+ return 0 ; // フェードアウト後
550
+ else // フェードアウト
551
+ fade = ((e - fpip -> frame - fp -> track [LOGO_END ])* 2 + 1 )* LOGO_FADE_MAX / (fp -> track [LOGO_FOUT ]* 2 );
552
+ }
553
+ else
554
+ fade = LOGO_FADE_MAX ; // 通常
555
+
556
+ return fade ;
557
+ }
558
+
517
559
/*====================================================================
518
560
* 設定ウィンドウプロシージャ
519
561
*===================================================================*/
520
562
BOOL func_WndProc ( HWND hwnd , UINT message , WPARAM wParam , LPARAM lParam , void * editp , FILTER * fp )
521
563
{
564
+ static int mode = 1 ; // 0:addlogo; 1:delogo
565
+
522
566
if (message == WM_SEND_LOGO_DATA ){ // ロゴデータ受信
523
567
set_sended_data ((void * )wParam ,fp );
524
568
return TRUE;
@@ -539,6 +583,20 @@ BOOL func_WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, void *
539
583
update_cb_logo (ex_data );
540
584
break ;
541
585
586
+ case WM_FILTER_CHANGE_PARAM :
587
+ if (fp -> check [!mode ]){ // モードが変更された
588
+ fp -> check [mode ] = 0 ;
589
+ fp -> exfunc -> filter_window_update (fp );
590
+ mode = !mode ;
591
+ return TRUE;
592
+ }
593
+ else if (!fp -> check [mode ]){
594
+ fp -> check [mode ] = 1 ;
595
+ fp -> exfunc -> filter_window_update (fp );
596
+ return TRUE;
597
+ }
598
+ break ;
599
+
542
600
//---------------------------------------------ボタン動作
543
601
case WM_COMMAND :
544
602
switch (LOWORD (wParam )){
@@ -1258,4 +1316,5 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
1258
1316
}
1259
1317
return TRUE;
1260
1318
}
1319
+
1261
1320
//*/
0 commit comments