This repository has been archived by the owner on Feb 17, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfilter.h
883 lines (867 loc) · 44.4 KB
/
filter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
//----------------------------------------------------------------------------------
// フィルタプラグイン ヘッダーファイル for AviUtl version 0.99k 以降
// By KENくん
//----------------------------------------------------------------------------------
// YC構造体
typedef struct {
short y; // 画素(輝度 )データ ( 0 ~ 4096 )
short cb; // 画素(色差(青))データ ( -2048 ~ 2048 )
short cr; // 画素(色差(赤))データ ( -2048 ~ 2048 )
// 画素データは範囲外に出ていることがあります
// また範囲内に収めなくてもかまいません
} PIXEL_YC;
// PIXEL構造体
typedef struct {
unsigned char b,g,r; // 画素(RGB)データ (0~255)
} PIXEL;
// フィルタPROC用構造体
typedef struct {
int flag; // フィルタのフラグ
// FILTER_PROC_INFO_FLAG_INVERT_FIELD_ORDER : フィールドオーダーを標準と逆に扱う ( 標準はボトム->トップになっています )
// FILTER_PROC_INFO_FLAG_INVERT_INTERLACE : 解除方法を反転する ( インターレース解除フィルタのみ )
PIXEL_YC *ycp_edit; // 画像データへのポインタ ( ycp_editとycp_tempは入れ替えれます )
PIXEL_YC *ycp_temp; // テンポラリ領域へのポインタ
int w,h; // 現在の画像のサイズ ( 画像サイズは変更出来ます )
int max_w,max_h; // 画像領域のサイズ
int frame; // 現在のフレーム番号( 番号は0から )
int frame_n; // 総フレーム数
int org_w,org_h; // 元の画像のサイズ
short *audiop; // オーディオデータへのポインタ ( オーディオフィルタの時のみ )
// オーディオ形式はPCM16bitです ( 1サンプルは mono = 2byte , stereo = 4byte )
int audio_n; // オーディオサンプルの総数
int audio_ch; // オーディオチャンネル数
PIXEL *pixelp; // 現在は使用されていません
void *editp; // エディットハンドル
int yc_size; // 画像領域の画素のバイトサイズ
int line_size; // 画像領域の幅のバイトサイズ
int reserve[8]; // 拡張用に予約されてます
} FILTER_PROC_INFO;
#define FILTER_PROC_INFO_FLAG_INVERT_FIELD_ORDER 0x00010000
#define FILTER_PROC_INFO_FLAG_INVERT_INTERLACE 0x00020000
// ※インターレース解除フィルタ時はycp_editに初期画像データが入っていません。
// ※インターレース解除フィルタ時はycp_edit,ycp_temp,w,hを変更できません。
// フレームステータス構造体
typedef struct {
int video; // 実際の映像データ番号
int audio; // 実際の音声データ番号
int inter; // フレームのインターレース
// FRAME_STATUS_INTER_NORMAL : 標準
// FRAME_STATUS_INTER_REVERSE : 反転
// FRAME_STATUS_INTER_ODD : 奇数
// FRAME_STATUS_INTER_EVEN : 偶数
// FRAME_STATUS_INTER_MIX : 二重化
// FRAME_STATUS_INTER_AUTO : 自動
int index24fps; // 現在は使用されていません
int config; // フレームのプロファイル環境の番号
int vcm; // フレームの圧縮設定の番号
int edit_flag; // 編集フラグ
// EDIT_FRAME_EDIT_FLAG_KEYFRAME : キーフレーム
// EDIT_FRAME_EDIT_FLAG_MARKFRAME : マークフレーム
// EDIT_FRAME_EDIT_FLAG_DELFRAME : 優先間引きフレーム
// EDIT_FRAME_EDIT_FLAG_NULLFRAME : コピーフレーム
int reserve[9]; // 拡張用に予約されてます
} FRAME_STATUS;
#define FRAME_STATUS_INTER_NORMAL 0
#define FRAME_STATUS_INTER_REVERSE 1
#define FRAME_STATUS_INTER_ODD 2
#define FRAME_STATUS_INTER_EVEN 3
#define FRAME_STATUS_INTER_MIX 4
#define FRAME_STATUS_INTER_AUTO 5
#define EDIT_FRAME_EDIT_FLAG_KEYFRAME 1
#define EDIT_FRAME_EDIT_FLAG_MARKFRAME 2
#define EDIT_FRAME_EDIT_FLAG_DELFRAME 4
#define EDIT_FRAME_EDIT_FLAG_NULLFRAME 8
// ファイルインフォメーション構造体
typedef struct {
int flag; // ファイルのフラグ
// FILE_INFO_FLAG_VIDEO : 映像が存在する
// FILE_INFO_FLAG_AUDIO : 音声が存在する
LPSTR name; // ファイル名 ( avi_file_open()ではNULLになります )
int w,h; // 元のサイズ
int video_rate,video_scale; // フレームレート
int audio_rate; // 音声サンプリングレート
int audio_ch; // 音声チャンネル数
int frame_n; // 総フレーム数
DWORD video_decode_format; // ビデオ展開形式
int video_decode_bit; // ビデオ展開形式のビット数
int audio_n; // 音声の総サンプル数 ( avi_file_open()の時のみ設定されます )
int reserve[4]; // 拡張用に予約されてます
} FILE_INFO;
#define FILE_INFO_FLAG_VIDEO 1
#define FILE_INFO_FLAG_AUDIO 2
// システムインフォメーション構造体
typedef struct {
int flag; // システムフラグ
// SYS_INFO_FLAG_EDIT : 編集中
// SYS_INFO_FLAG_VFAPI : VFAPI動作時
// SYS_INFO_FLAG_USE_SSE : SSE使用
// SYS_INFO_FLAG_USE_SSE2 : SSE2使用
LPSTR info; // バージョン情報
int filter_n; // 登録されてるフィルタの数
int min_w,min_h; // 編集出来る最小画像サイズ
int max_w,max_h; // 編集出来る最大画像サイズ
int max_frame; // 編集出来る最大フレーム数
LPSTR edit_name; // 編集ファイル名 (ファイル名が決まっていない時は何も入っていません)
LPSTR project_name; // プロジェクトファイル名 (ファイル名が決まっていない時は何も入っていません)
LPSTR output_name; // 出力ファイル名 (ファイル名が決まっていない時は何も入っていません)
int vram_w,vram_h; // 編集用画像領域のサイズ
int vram_yc_size; // 編集用画像領域の画素のバイト数
int vram_line_size; // 編集用画像領域の幅のバイト数
HFONT hfont; // フィルタ設定ウィンドウで使用しているフォントのハンドル
int build; // ビルド番号 (新しいバージョンになるほど大きな値になります)
int reserve[2]; // 拡張用に予約されてます
} SYS_INFO;
#define SYS_INFO_FLAG_EDIT 1
#define SYS_INFO_FLAG_VFAPI 2
#define SYS_INFO_FLAG_USE_SSE 4
#define SYS_INFO_FLAG_USE_SSE2 8
// マルチスレッド関数用の定義
typedef void (*MULTI_THREAD_FUNC)( int thread_id,int thread_num,void *param1,void *param2 );
// thread_id : スレッド番号 ( 0 ~ thread_num-1 )
// thread_num : スレッド数 ( 1 ~ )
// param1 : 汎用パラメータ
// param2 : 汎用パラメータ
// AVI入力ファイルハンドル
typedef void* AVI_FILE_HANDLE;
// 外部関数構造体
typedef struct {
void (*get_ycp_ofs)( void *editp,int n,int ofs );
// ※出来るだけget_ycp_source_cache()の方を使用するようにしてください
// 指定したフレームのAVIファイル上でのオフセット分移動した
// フレームの画像データのポインタを取得します
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// ofs : フレームからのオフセット
// 戻り値 : 画像データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
void *(*get_ycp)( void *editp,int n );
// ※出来るだけget_ycp_source_cache()の方を使用するようにしてください
// 指定したフレームの画像データのポインタを取得します
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : 画像データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
void *(*get_pixelp)( void *editp,int n );
// 指定したフレームのDIB形式(RGB24bit)の画像データのポインタを取得します
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : DIB形式データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
int (*get_audio)( void *editp,int n,void *buf );
// 指定したフレームのオーディオデータを読み込みます
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// buf : 格納するバッファ (NULLならサンプル数の取得のみ)
// 戻り値 : 読み込んだサンプル数
BOOL (*is_editing)( void *editp );
// 現在編集中か調べます
// editp : エディットハンドル
// 戻り値 : TRUEなら編集中
BOOL (*is_saving)( void *editp );
// 現在保存中か調べます
// editp : エディットハンドル
// 戻り値 : TRUEなら保存中
int (*get_frame)( void *editp );
// 現在の表示フレームを取得します
// editp : エディットハンドル
// 戻り値 : 現在のフレーム番号
int (*get_frame_n)( void *editp );
// 総フレーム数を取得します
// editp : エディットハンドル
// 戻り値 : 現在の総フレーム数
BOOL (*get_frame_size)( void *editp,int *w,int *h );
// フィルタ前のフレームのサイズを取得します
// editp : エディットハンドル
// w,h : 画像サイズの格納ポインタ
// 戻り値 : TRUEなら成功
int (*set_frame)( void *editp,int n );
// 現在の表示フレームを変更します
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : 設定されたフレーム番号
int (*set_frame_n)( void *editp,int n );
// 総フレーム数を変更します
// editp : エディットハンドル
// n : フレーム数
// 戻り値 : 設定された総フレーム数
BOOL (*copy_frame)( void *editp,int d,int s );
// フレームを他のフレームにコピーします
// editp : エディットハンドル
// d : コピー先フレーム番号
// s : コピー元フレーム番号
// 戻り値 : TRUEなら成功
BOOL (*copy_video)( void *editp,int d,int s );
// フレームの映像だけを他のフレームにコピーします
// editp : エディットハンドル
// d : コピー先フレーム番号
// s : コピー元フレーム番号
// 戻り値 : TRUEなら成功
BOOL (*copy_audio)( void *editp,int d,int s );
// フレームの音声だけを他のフレームにコピーします
// editp : エディットハンドル
// d : コピー先フレーム番号
// s : コピー元フレーム番号
// 戻り値 : TRUEなら成功
BOOL (*copy_clip)( HWND hwnd,void *pixelp,int w,int h );
// クリップボードにDIB形式(RGB24bit)の画像をコピーします
// hwnd : ウィンドウハンドル
// pixelp : DIB形式データへのポインタ
// w,h : 画像サイズ
// 戻り値 : TRUEなら成功
BOOL (*paste_clip)( HWND hwnd,void *editp,int n );
// クリップボードから画像を張りつけます
// hwnd : ウィンドウハンドル
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : TRUEなら成功
BOOL (*get_frame_status)( void *editp,int n,FRAME_STATUS *fsp );
// フレームのステータスを取得します
// editp : エディットハンドル
// n : フレーム番号
// fps : フレームステータスへのポインタ
// 戻り値 : TRUEなら成功
BOOL (*set_frame_status)( void *editp,int n,FRAME_STATUS *fsp );
// フレームのステータスを変更します
// editp : エディットハンドル
// n : フレーム番号
// fps : フレームステータスへのポインタ
// 戻り値 : TRUEなら成功
BOOL (*is_saveframe)( void *editp,int n );
// 実際に保存されるフレームか調べます
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : TRUEなら保存されます
BOOL (*is_keyframe)( void *editp,int n );
// キーフレームかどうか調べます
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : TRUEならキーフレーム
BOOL (*is_recompress)( void *editp,int n );
// 再圧縮が必要か調べます
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : TRUEなら再圧縮が必要
BOOL (*filter_window_update)( void *fp );
// 設定ウィンドウのトラックバーとチェックボックスを再描画します
// fp : フィルタ構造体のポインタ
// 戻り値 : TRUEなら成功
BOOL (*is_filter_window_disp)( void *fp );
// 設定ウィンドウが表示されているか調べます
// fp : フィルタ構造体のポインタ
// 戻り値 : TRUEなら表示されている
BOOL (*get_file_info)( void *editp,FILE_INFO *fip );
// 編集ファイルの情報を取得します
// editp : エディットハンドル
// fip : ファイルインフォメーション構造体へのポインタ
// 戻り値 : TRUEなら成功
LPSTR (*get_config_name)( void *editp,int n );
// 現在のプロファイルの名前を取得します
// editp : エディットハンドル
// n : プロファイル環境の番号
// 戻り値 : プロファイルの名前へのポインタ (NULLなら失敗)
BOOL (*is_filter_active)( void *fp );
// フィルタが有効になっているか調べます
// fp : フィルタ構造体のポインタ
// 戻り値 : TRUEならフィルタ有効
BOOL (*get_pixel_filtered)( void *editp,int n,void *pixelp,int *w,int *h );
// 指定したフレームのDIB形式(RGB24bit)の画像データを読み込みます
// データはフィルタ後のものです
// editp : エディットハンドル
// n : フレーム番号
// pixelp : DIB形式データを格納するポインタ (NULLなら画像サイズだけを返します)
// w,h : 画像のサイズ (NULLならDIB形式データだけを返します)
// 戻り値 : TRUEなら成功
int (*get_audio_filtered)( void *editp,int n,void *buf );
// 指定したフレームのオーディオデータを読み込みます
// データはフィルタ後のものです
// editp* : エディットハンドル
// n : フレーム番号
// buf : 格納するバッファ (NULLならサンプル数の取得のみ)
// 戻り値 : 読み込んだサンプル数
BOOL (*get_select_frame)( void *editp,int *s,int *e );
// 選択開始終了フレームを取得します
// editp : エディットハンドル
// s : 選択開始フレーム
// e : 選択終了フレーム
// 戻り値 : TRUEなら成功
BOOL (*set_select_frame)( void *editp,int s,int e );
// 選択開始終了フレームを設定します
// editp : エディットハンドル
// s : 選択開始フレーム
// e : 選択終了フレーム
// 戻り値 : TRUEなら成功
BOOL (*rgb2yc)( PIXEL_YC *ycp,PIXEL *pixelp,int w );
// PIXELからPIXEL_YCに変換します
// ycp : PIXEL_YC構造体へのポインタ
// pixelp : PIXEL構造体へのポインタ
// w : 構造体の数
// 戻り値 : TRUEなら成功
BOOL (*yc2rgb)( PIXEL *pixelp,PIXEL_YC *ycp,int w );
// PIXEL_YCからPIXELに変換します
// pixelp : PIXEL構造体へのポインタ
// ycp : PIXEL_YC構造体へのポインタ
// w : 構造体の数
// 戻り値 : TRUEなら成功
BOOL (*dlg_get_load_name)( LPSTR name,LPSTR filter,LPSTR def );
// ファイルダイアログを使って読み込むファイル名を取得します
// name : ファイル名を格納するポインタ
// filter : ファイルフィルタ
// def : デフォルトのファイル名
// 戻り値 : TRUEなら成功 FALSEならキャンセル
BOOL (*dlg_get_save_name)( LPSTR name,LPSTR filter,LPSTR def );
// ファイルダイアログを使って書き込むファイル名を取得します
// name : ファイル名を格納するポインタ
// filter : ファイルフィルタ
// def : デフォルトのファイル名
// 戻り値 : TRUEなら成功 FALSEならキャンセル
int (*ini_load_int)( void *fp,LPSTR key,int n );
// INIファイルから数値を読み込む
// fp : フィルタ構造体のポインタ
// key : アクセス用のキーの名前
// n : デフォルトの数値
// 戻り値 : 読み込んだ数値
int (*ini_save_int)( void *fp,LPSTR key,int n );
// INIファイルに数値を書き込む
// fp : フィルタ構造体のポインタ
// key : アクセス用のキーの名前
// n : 書き込む数値
// 戻り値 : 書き込んだ数値
BOOL (*ini_load_str)( void *fp,LPSTR key,LPSTR str,LPSTR def );
// INIファイルから文字列を読み込む
// fp : フィルタ構造体のポインタ
// key : アクセス用のキーの名前
// str : 文字列を読み込むバッファ
// def : デフォルトの文字列
// 戻り値 : TRUEなら成功
BOOL (*ini_save_str)( void *fp,LPSTR key,LPSTR str );
// INIファイルに文字列を書き込む
// fp : フィルタ構造体のポインタ
// key : アクセス用のキーの名前
// n : 書き込む文字列
// 戻り値 : TRUEなら成功
BOOL (*get_source_file_info)( void *editp,FILE_INFO *fip,int source_file_id );
// 指定したファイルIDのファイルの情報を取得します
// editp : エディットハンドル
// fip : ファイルインフォメーション構造体へのポインタ
// souce_file_id
// : ファイルID
// 戻り値 : TRUEなら成功
BOOL (*get_source_video_number)( void *editp,int n,int *source_file_id,int *source_video_number );
// 指定したフレームのソースのファイルIDとフレーム番号を取得します
// editp : エディットハンドル
// n : フレーム番号
// souce_file_id
// : ファイルIDを格納するポインタ
// souce_video_number
// : フレーム番号を格納するポインタ
// 戻り値 : TRUEなら成功
BOOL (*get_sys_info)( void *editp,SYS_INFO *sip );
// システムの情報を取得します
// editp : エディットハンドル (NULLならsipの編集中のフラグとすべてのファイル名が無効になります)
// sip : システムインフォメーション構造体へのポインタ
// 戻り値 : TRUEなら成功
void *(*get_filterp)( int filter_id );
// 指定のフィルタIDのフィルタ構造体へのポインタを取得します
// filter_id
// : フィルタID (0~登録されてるフィルタの数-1までの値)
// 戻り値 : フィルタ構造体へのポインタ (NULLなら失敗)
void *(*get_ycp_filtering)( void *fp,void *editp,int n,void *reserve );
// ※出来るだけget_ycp_filtering_cache_ex()の方を使用するようにしてください
// 指定したフレームの画像データのポインタを取得します
// データは自分のフィルタの直前までフィルタしたものです
// fp : フィルタ構造体のポインタ
// editp : エディットハンドル
// n : フレーム番号
// reserve : NULLを指定してください
// 戻り値 : 画像データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
int (*get_audio_filtering)( void *fp,void *editp,int n,void *buf );
// 指定したフレームのオーディオデータを読み込みます
// データは自分のフィルタの直前までフィルタしたものです
// fp : フィルタ構造体のポインタ
// editp : エディットハンドル
// n : フレーム番号
// buf : 格納するバッファ (NULLならサンプル数の取得のみ)
// 戻り値 : 読み込んだサンプル数
BOOL (*set_ycp_filtering_cache_size)( void *fp,int w,int h,int d,int flag );
// get_ycp_filtering_cache_ex()のキャッシュの設定をします
// 設定値が変わった時のみキャッシュ領域を再確保します
// キャッシュ領域はフィルタがアクティブの時のみ確保されます
// fp : フィルタ構造体のポインタ
// w : キャッシュ領域の幅
// h : キャッシュ領域の高さ
// d : キャッシュするフレーム数
// flag : NULLを指定してください
// 戻り値 : TRUEなら成功
void *(*get_ycp_filtering_cache)( void *fp,void *editp,int n );
// ※出来るだけget_ycp_filtering_cache_ex()の方を使用するようにしてください
// 指定したフレームの画像データのキャッシュポインタを取得します
// set_ycp_filtering_cache_size()の設定にしたがってキャッシュされます
// データは自分のフィルタの直前までフィルタしたものです
// fp : フィルタ構造体のポインタ
// editp : エディットハンドル
// n : フレーム番号
// 戻り値 : 画像データへのキャッシュポインタ (NULLなら失敗)
// 画像データポインタの内容はキャッシュから破棄されるまで有効
void *(*get_ycp_source_cache)( void *editp,int n,int ofs );
// 指定したフレームの画像データのポインタを取得します
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// ofs : 元のAVI上でのフレームのオフセット
// 戻り値 : 画像データへのポインタ (NULLなら失敗)
// 画像データポインタの内容はキャッシュから破棄されるまで有効
void *(*get_disp_pixelp)( void *editp,DWORD format );
// 表示されているフレームの画像データのポインタを取得します
// データはフィルタ後のものです
// 表示フィルタのみ使用可能です。
// editp : エディットハンドル
// format : 画像フォーマット( NULL = RGB24bit / 'Y''U''Y''2' = YUY2 )
// 戻り値 : 画像データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
BOOL (*get_pixel_source)( void *editp,int n,void *pixelp,DWORD format );
// 指定したフレームの画像データを読み込みます
// データはフィルタ前のものです
// editp : エディットハンドル
// n : フレーム番号
// pixelp : DIB形式データを格納するポインタ
// format : 画像フォーマット( NULL = RGB24bit / 'Y''U''Y''2' = YUY2 )
// 戻り値 : TRUEなら成功
BOOL (*get_pixel_filtered_ex)( void *editp,int n,void *pixelp,int *w,int *h,DWORD format );
// 指定したフレームの画像データを読み込みます
// データはフィルタ後のものです
// editp : エディットハンドル
// n : フレーム番号
// pixelp : DIB形式データを格納するポインタ (NULLなら画像サイズだけを返します)
// w,h : 画像のサイズ (NULLならDIB形式データだけを返します)
// format : 画像フォーマット( NULL = RGB24bit / 'Y''U''Y''2' = YUY2 )
// 戻り値 : TRUEなら成功
PIXEL_YC *(*get_ycp_filtering_cache_ex)( void *fp,void *editp,int n,int *w,int *h );
// 指定したフレームの画像データのキャッシュポインタを取得します
// set_ycp_filtering_cache_size()の設定にしたがってキャッシュされます
// データは自分のフィルタの直前までフィルタしたものです
// fp : フィルタ構造体のポインタ
// editp : エディットハンドル
// n : フレーム番号
// w,h : 取得した画像のサイズ (NULLなら無視されます)
// 戻り値 : 画像データへのキャッシュポインタ (NULLなら失敗)
// 画像データポインタの内容はキャッシュから破棄されるまで有効
BOOL (*exec_multi_thread_func)( MULTI_THREAD_FUNC func,void *param1,void *param2 );
// 指定した関数をシステムの設定値に応じたスレッド数で呼び出します
// 呼び出された関数内からWin32APIや外部関数(rgb2yc,yc2rgbは除く)を使用しないでください
// func : マルチスレッドで呼び出す関数
// param1 : 呼び出す関数に渡す汎用パラメータ
// param2 : 呼び出す関数に渡す汎用パラメータ
// 戻り値 : TRUEなら成功
PIXEL_YC *(*create_yc)( void );
// 空のフレーム画像データ領域を作成します
// ycp_editと同様に外部関数で使用できますが
// FILTER_PROC_INFOのycp_edit,ycp_tempと入れ替えることは出来ません
// 戻り値 : 作成したフレーム画像データへのポインタ (NULLなら失敗)
void (*delete_yc)( PIXEL_YC *ycp );
// create_ycで作成した領域を削除します
BOOL (*load_image)( PIXEL_YC *ycp,LPSTR file,int *w,int *h,int flag );
// フレーム画像データにBMPファイルから画像を読み込みます
// ycp : 画像を読み込むフレーム画像へのポインタ (NULLなら描画をせずにサイズを返します)
// file : 読み込むBMPファイル名
// w,h : 読み込んだ画像のサイズ (NULLを指定できます)
// flag : NULLを指定してください
// 戻り値 : TRUEなら成功
void (*resize_yc)( PIXEL_YC *ycp,int w,int h,PIXEL_YC *ycp_src,int sx,int sy,int sw,int sh );
// フレーム画像データをリサイズします
// 元画像の任意の画像領域をリサイズすることも出来ます
// ycp : リサイズ後のフレーム画像を格納するポインタ
// w,h : リサイズの解像度
// ycp_src : 元画像のフレーム画像へのポインタ(NULLならycpと同じ)
// sx,sy : 元画像のリサイズ対象領域の左上の座標
// sw,sh : 元画像のリサイズ対象領域のサイズ
void (*copy_yc)( PIXEL_YC *ycp,int x,int y,PIXEL_YC *ycp_src,int sx,int sy,int sw,int sh,int tr );
// フレーム画像データの任意の領域をコピーします
// 描画の際は最大画像サイズの領域に収まるようにクリッピングをします
// コピー元とコピー先の領域は重ならないようにしてください
// ycp : コピー先のフレーム画像へのポインタ
// x,y : コピー先の左上の座標
// ycp_src : コピー元のフレーム画像へのポインタ
// sx,sy : コピー元の左上の座標
// sw,sh : コピー元のサイズ
// tr : コピー元の透明度 (0~4096)
void (*draw_text)( PIXEL_YC *ycp,int x,int y,LPSTR text,int r,int g,int b,int tr,HFONT hfont,int *w,int *h );
// フレーム画像データにテキストを描画します
// 描画の際は最大画像サイズの領域に収まるようにクリッピングをします
// ycp : 描画するフレーム画像データへのポインタ (NULLなら描画をせずにサイズを返します)
// x,y : 描画する左上の座標
// text : 描画するテキストの内容
// r,g,b : 描画色 (0~255)
// tr : 透明度 (0~4096)
// hfont : 描画で使用するフォント (NULLならデフォルトのフォント)
// w,h : 描画したテキスト領域のサイズ (NULLを指定できます)
AVI_FILE_HANDLE (*avi_file_open)( LPSTR file,FILE_INFO *fip,int flag );
// AVIファイルをオープンしてavi_file_read_video(),avi_file_read_audio()で
// データを読み込む為のハンドルを取得します。
// ※編集中のファイルとフォーマット(fpsやサンプリングレート等)が異なる場合があるので注意してください。
// file : 読み込むAVIファイル名 (入力プラグインで読み込めるファイルも指定できます)
// fip : ファイルインフォメーション構造体へのポインタ (読み込んだファイルの情報が入ります)
// flag : 読み込みフラグ
// AVI_FILE_OPEN_FLAG_ONLY_YUY2 : YUY2 で展開するようにします
// AVI_FILE_OPEN_FLAG_ONLY_RGB24 : RGB24で展開するようにします
// AVI_FILE_OPEN_FLAG_ONLY_RGB32 : RGB32で展開するようにします
// AVI_FILE_OPEN_FLAG_VIDEO_ONLY : ビデオのみ読み込むようにします
// AVI_FILE_OPEN_FLAG_AUDIO_ONLY : オーディオのみ読み込むようにします
// 戻り値 : AVIファイルハンドル (NULLなら失敗)
void (*avi_file_close)( AVI_FILE_HANDLE afh );
// AVIファイルをクローズします
// afh : AVIファイルハンドル
BOOL (*avi_file_read_video)( AVI_FILE_HANDLE afh,PIXEL_YC *ycp,int n );
// フレーム画像データにAVIファイルから画像データを読み込みます
// afh : AVIファイルハンドル
// ycp : 画像データを読み込むフレーム画像へのポインタ
// n : フレーム番号
// 戻り値 : TRUEなら成功
int (*avi_file_read_audio)( AVI_FILE_HANDLE afh,void *buf,int n );
// AVIファイルから音声データを読み込みます
// afh : AVIファイルハンドル
// buf : 音声を読み込むバッファへのポインタ
// n : フレーム番号
// 戻り値 : 読み込んだサンプル数
void *(*avi_file_get_video_pixelp)( AVI_FILE_HANDLE afh,int n );
// AVIファイルから読み込んだDIB形式の画像データのポインタを取得します
// 取得できる画像データのフォーマットはavi_file_open()で取得した
// FILE_INFOのビデオ展開形式になります。
// afh : AVIファイルハンドル
// n : フレーム番号
// 戻り値 : DIB形式データへのポインタ (NULLなら失敗)
// 画像データポインタの内容は次に外部関数を使うかメインに処理を戻すまで有効
LPSTR (*get_avi_file_filter)( int type );
// avi_file_open()で読み込めるファイルのファイルフィルタを取得します
// type : ファイルの種類
// GET_AVI_FILE_FILTER_TYPE_VIDEO : ビデオル
// GET_AVI_FILE_FILTER_TYPE_AUDIO : オーディオ
// 戻り値 : ファイルフィルタへのポインタ
int (*avi_file_read_audio_sample)( AVI_FILE_HANDLE afh,int start,int length,void *buf );
// AVIファイルから音声データを読み込みます
// afh : AVIファイルハンドル
// start : 読み込み開始サンプル番号
// length : 読み込むサンプル数
// buf : データを読み込むバッファへのポインタ
// 戻り値 : 読み込んだサンプル数
int (*avi_file_set_audio_sample_rate)( AVI_FILE_HANDLE afh,int audio_rate,int audio_ch );
// avi_file_read_audio_sample()で読み込む音声のサンプリングレート等を変更します
// afh : AVIファイルハンドル
// audio_rate : 音声サンプリングレート
// audio_ch : 音声チャンネル数
// 戻り値 : 変更したサンプリングレートでの総サンプル数
BYTE *(*get_frame_status_table)( void *editp,int type );
// フレームのステータスが格納されているバッファへのポインタを取得します
// editp : エディットハンドル
// type : ステータスの種類
// FARME_STATUS_TYPE_EDIT_FLAG : 編集フラグ
// FARME_STATUS_TYPE_INTER : インターレース
// 戻り値 : バッファへのポインタ
// バッファへのポインタの内容は編集ファイルがクローズされるまで有効
BOOL (*set_undo)( void *editp );
// 現在の編集状況をアンドゥバッファに設定します
// editp : エディットハンドル
// 戻り値 : TRUEなら成功
BOOL (*add_menu_item)( void *fp,LPSTR name,HWND hwnd,int id,int def_key,int flag );
// メインウィンドウの設定メニュー項目を追加します
// メニューが選択された時にhwndで指定したウィンドウに
// WM_FILTER_COMMANDのメッセージを送ります
// ※必ずfunc_init()かWM_FILTER_INITから呼び出すようにしてください。
// fp : フィルタ構造体のポインタ
// name : メニューの名前
// hwnd : WM_FILTER_COMMANDを送るウィンドウハンドル
// id : WM_FILTER_COMMANDのWPARAM
// def_key : 標準のショートカットキーの仮想キーコード (NULLなら無し)
// flag : フラグ
// ADD_MENU_ITEM_FLAG_KEY_SHIFT : 標準のショートカットキーをSHIFT+キーにする
// ADD_MENU_ITEM_FLAG_KEY_CTRL : 標準のショートカットキーをCTRL+キーにする
// ADD_MENU_ITEM_FLAG_KEY_ALT : 標準のショートカットキーをALT+キーにする
// 戻り値 : TRUEなら成功
BOOL (*edit_open)( void *editp,LPSTR file,int flag );
// 編集ファイルを開きます
// editp : エディットハンドル
// file : ファイル名
// flag : フラグ
// EDIT_OPEN_FLAG_ADD : 追加読み込みをします
// EDIT_OPEN_FLAG_AUDIO : 音声読み込みをします
// EDIT_OPEN_FLAG_PROJECT : プロジェクトファイルを開きます
// EDIT_OPEN_FLAG_DIALOG : 読み込みダイアログを表示します
// 戻り値 : TRUEなら成功
BOOL (*edit_close)( void *editp );
// 編集ファイルを閉じます
// editp : エディットハンドル
// 戻り値 : TRUEなら成功
BOOL (*edit_output)( void *editp,LPSTR file,int flag,LPSTR type );
// 編集データをAVI出力します
// WAV出力やプラグイン出力も出来ます
// editp : エディットハンドル
// file : 出力ファイル名
// flag : フラグ
// EDIT_OUTPUT_FLAG_NO_DIALOG : 出力ダイアログを表示しません
// EDIT_OUTPUT_FLAG_WAV : WAV出力をします
// type : 出力プラグインの名前 (NULLならAVI/WAV出力)
// 戻り値 : TRUEなら成功
BOOL (*set_config)( void *editp,int n,LPSTR name );
// プロファイルを設定します
// editp : エディットハンドル
// n : プロファイル環境の番号
// name : プロファイルの名前
// 戻り値 : TRUEなら成功
int reserve[7];
} EXFUNC;
#define AVI_FILE_OPEN_FLAG_VIDEO_ONLY 16
#define AVI_FILE_OPEN_FLAG_AUDIO_ONLY 32
#define AVI_FILE_OPEN_FLAG_ONLY_YUY2 0x10000
#define AVI_FILE_OPEN_FLAG_ONLY_RGB24 0x20000
#define AVI_FILE_OPEN_FLAG_ONLY_RGB32 0x40000
#define GET_AVI_FILE_FILTER_TYPE_VIDEO 0
#define GET_AVI_FILE_FILTER_TYPE_AUDIO 1
#define FARME_STATUS_TYPE_EDIT_FLAG 0
#define FARME_STATUS_TYPE_INTER 1
#define ADD_MENU_ITEM_FLAG_KEY_SHIFT 1
#define ADD_MENU_ITEM_FLAG_KEY_CTRL 2
#define ADD_MENU_ITEM_FLAG_KEY_ALT 4
#define EDIT_OPEN_FLAG_ADD 2
#define EDIT_OPEN_FLAG_AUDIO 16
#define EDIT_OPEN_FLAG_PROJECT 512
#define EDIT_OPEN_FLAG_DIALOG 65536
#define EDIT_OUTPUT_FLAG_NO_DIALOG 2
#define EDIT_OUTPUT_FLAG_WAV 4
// フィルタ構造体
typedef struct {
int flag; // フィルタのフラグ
// FILTER_FLAG_ALWAYS_ACTIVE : フィルタを常にアクティブにします
// FILTER_FLAG_CONFIG_POPUP : 設定をポップアップメニューにします
// FILTER_FLAG_CONFIG_CHECK : 設定をチェックボックスメニューにします
// FILTER_FLAG_CONFIG_RADIO : 設定をラジオボタンメニューにします
// FILTER_FLAG_EX_DATA : 拡張データを保存出来るようにします
// FILTER_FLAG_PRIORITY_HIGHEST : フィルタのプライオリティを常に最上位にします
// FILTER_FLAG_PRIORITY_LOWEST : フィルタのプライオリティを常に最下位にします
// FILTER_FLAG_WINDOW_THICKFRAME : サイズ変更可能なウィンドウを作ります
// FILTER_FLAG_WINDOW_SIZE : 設定ウィンドウのサイズを指定出来るようにします
// FILTER_FLAG_DISP_FILTER : 表示フィルタにします
// FILTER_FLAG_REDRAW : 再描画をplugin側で処理するようにします
// FILTER_FLAG_EX_INFORMATION : フィルタの拡張情報を設定できるようにします
// FILTER_FLAG_INFORMATION : FILTER_FLAG_EX_INFORMATION を使うようにして下さい
// FILTER_FLAG_NO_CONFIG : 設定ウィンドウを表示しないようにします
// FILTER_FLAG_AUDIO_FILTER : オーディオフィルタにします
// FILTER_FLAG_RADIO_BUTTON : チェックボックスをラジオボタンにします
// FILTER_FLAG_WINDOW_HSCROLL : 水平スクロールバーを持つウィンドウを作ります
// FILTER_FLAG_WINDOW_VSCROLL : 垂直スクロールバーを持つウィンドウを作ります
// FILTER_FLAG_INTERLACE_FILTER : インターレース解除フィルタにします
// FILTER_FLAG_NO_INIT_DATA : func_proc()の画像の初期データを作成しないようにします
// FILTER_FLAG_IMPORT : インポートメニューを作ります
// FILTER_FLAG_EXPORT : エクスポートメニューを作ります
// FILTER_FLAG_MAIN_MESSAGE : func_WndProc()にWM_FILTER_MAIN_???のメッセージを送るようにします
int x,y; // 設定ウインドウのサイズ (FILTER_FLAG_WINDOW_SIZEが立っている時に有効)
// 設定値に FILTER_WINDOW_SIZE_CLIENT をORして設定するとクライアント領域でのサイズ指定になります。
// 設定値に FILTER_WINDOW_SIZE_ADD をORして設定すると標準のサイズからの追加分の指定になります。
TCHAR *name; // フィルタの名前
int track_n; // トラックバーの数
TCHAR **track_name; // トラックバーの名前郡へのポインタ(トラックバー数が0ならNULLでよい)
int *track_default; // トラックバーの初期値郡へのポインタ(トラックバー数が0ならNULLでよい)
int *track_s,*track_e; // トラックバーの数値の下限上限 (NULLなら全て0~256)
int check_n; // チェックボックスの数
TCHAR **check_name; // チェックボックスの名前郡へのポインタ(チェックボックス数が0ならNULLでよい)
int *check_default; // チェックボックスの初期値郡へのポインタ(チェックボックス数が0ならNULLでよい)
// 初期値がマイナス値の場合はボタンになります。ボタンを押したときにWM_COMMAND( WPARAM = MID_FILTER_BUTTON + n )のウィンドウメッセージが送られます
BOOL (*func_proc)( void *fp,FILTER_PROC_INFO *fpip );
// フィルタ処理関数へのポインタ (NULLなら呼ばれません)
BOOL (*func_init)( void *fp );
// 開始時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
BOOL (*func_exit)( void *fp );
// 終了時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
BOOL (*func_update)( void *fp,int status );
// 自分の設定が変更されたときに呼ばれる関数へのポインタ (NULLなら呼ばれません)
// FILTER_UPDATE_STATUS_ALL : 全項目が変更された
// FILTER_UPDATE_STATUS_TRACK + n : n番目のトラックバーが変更された
// FILTER_UPDATE_STATUS_CHECK + n : n番目のチェックボックスが変更された
BOOL (*func_WndProc)( HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam,void *editp,void *fp );
// 設定ウィンドウにウィンドウメッセージが来た時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// VFAPI動作時には呼ばれません
// 通常のメッセージ以外に以下の拡張メッセージが送られます
// WM_FILTER_UPDATE : 各フィルタ設定や編集内容が変更された直後に送られます
// WM_FILTER_FILE_OPEN : 編集ファイルがオープンされた直後に送られます
// WM_FILTER_FILE_UPDATE : 編集ファイルの更新(追加や音声読み込み等)があった直後に送られます
// WM_FILTER_FILE_CLOSE : 編集ファイルがクローズされる直前に送られます
// WM_FILTER_INIT : 開始直後に送られます
// WM_FILTER_EXIT : 終了直前に送られます
// WM_FILTER_SAVE_START : セーブが開始される直前に送られます
// WM_FILTER_SAVE_END : セーブが終了された直後に送られます
// WM_FILTER_IMPORT : インポートが選択された直後に送られます
// WM_FILTER_EXPORT : エクスポートが選択された直後に送られます
// WM_FILTER_CHANGE_ACTIVE : フィルタの有効/無効が変更された直後に送られます
// WM_FILTER_CHANGE_WINDOW : フィルタウィンドウの表示/非表示が変更された直後に送られます
// WM_FILTER_CHANGE_PARAM : 自分のフィルタの設定が変更された直後に送られます
// WM_FILTER_CHANGE_EDIT : 編集中/非編集中が変更された直後に送られます
// これ以降のメッセージはFILTER_FLAG_MAIN_MESSAGE設定時のみ送られます
// WM_FILTER_MAIN_MOUSE_DOWN : メインウィンドウでマウスの左ボタンが押された時に送られます
// WM_FILTER_MAIN_MOUSE_UP : メインウィンドウでマウスが移動した時に送られます
// WM_FILTER_MAIN_MOUSE_MOVE : メインウィンドウでマウスの左ボタンが離された時に送られます
// WM_FILTER_MAIN_MOUSE_DBLCLK : メインウィンドウでマウスの左ボタンがダブルクリックされた時に送られます
// WM_FILTER_MAIN_MOUSE_R_DOWN : メインウィンドウでマウスの右ボタンが押された時に送られます
// WM_FILTER_MAIN_MOUSE_R_UP : メインウィンドウでマウスの右ボタンが離された時に送られます
// WM_FILTER_MAIN_MOUSE_WHEEL : メインウィンドウでマウスのホイールが回転した時に送られます
// WM_FILTER_MAIN_KEY_DOWN : メインウィンドウでキーが押された時に送られます
// WM_FILTER_MAIN_KEY_UP : メインウィンドウでキーが離された時に送られます
// WM_FILTER_MAIN_MOVESIZE : メインウィンドウの位置やサイズが変更された時に送られます
// WM_FILTER_MAIN_CONTEXTMENU : メインウィンドウでコンテキストメニューが表示される時に送られます
// WM_FILTER_MAIN_MOUSE_???のlparamには編集画像上での座標が入ります(編集中以外は0になります)
// WM_FILTER_MAIN_MOUSE_WHEELのwparamの上位ワードにホイールの回転量が入ります
// WM_FILTER_MAIN_KEY_???のwparamには仮想キーコードが入ります
// WM_FILTER_MAIN_MOVESIZEのlparamにはメインウィンドウのウィンドウハンドルが入ります
// WM_FILTER_MAIN_CONTEXTMENUのlparamにはスクリーン座標が入ります
// WM_FILTER_MAIN_CONTEXTMENUでメニューを表示した時は戻り値をTRUEにしてください(再描画はされません)
// 戻り値をTRUEにすると編集内容が更新されたとして全体が再描画されます
int *track; // トラックバーの設定値郡へのポインタ (AviUtl側で設定されます)
int *check; // チェックボックスの設定値郡へのポインタ (AviUtl側で設定されます)
void *ex_data_ptr; // 拡張データ領域へのポインタ (FILTER_FLAG_EX_DATAが立っている時に有効)
int ex_data_size; // 拡張データサイズ (FILTER_FLAG_EX_DATAが立っている時に有効)
TCHAR *information; // フィルタ情報へのポインタ (FILTER_FLAG_EX_INFORMATIONが立っている時に有効)
BOOL (*func_save_start)( void *fp,int s,int e,void *editp );
// セーブが開始される直前に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// s : セーブする先頭フレーム
// e : セーブする最終フレーム
// 戻り値 : 成功ならTRUE
BOOL (*func_save_end)( void *fp,void *editp );
// セーブが終了した直前に呼ばれる関数へのポインタ (NULLなら呼ばれません)
EXFUNC *exfunc; // 外部関数テーブルへのポインタ (AviUtl側で設定されます)
HWND hwnd; // ウィンドウハンドル (AviUtl側で設定されます)
HINSTANCE dll_hinst; // DLLのインスタンスハンドル (AviUtl側で設定されます)
void *ex_data_def; // 拡張データの初期値データ領域へのポインタ (NULLなら初期化されません)
BOOL (*func_is_saveframe)( void *fp,void *editp,int saveno,int frame,int fps,int edit_flag,int inter );
// インターレース解除フィルタで保存するフレームを決める時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// saveno : セーブする範囲の先頭からのフレーム番号
// frame : 編集フレーム番号
// fps : フレームレートの変更の設定値 (30,24,20,15,10)
// edit_flag : 編集フラグ
// inter : フレームのインターレース
// 戻り値 : TRUEを返すと保存フレーム、FALSEを返すと間引きフレームになります。
BOOL (*func_project_load)( void *fp,void *editp,void *data,int size );
// プロジェクトファイルからデータを読み込んだ時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// プロジェクトファイルに保存したデータが無い場合は呼ばれません
// data : プロジェクトから読み込んだデータへのポインタ
// size : プロジェクトから読み込んだデータのバイト数
// 戻り値 : 成功ならTRUE
BOOL (*func_project_save)( void *fp,void *editp,void *data,int *size );
// プロジェクトファイルをセーブしている時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// プロジェクトファイルにフィルタのデータを保存します
// ※AviUtlからは始めに保存サイズ取得の為にdataがNULLで呼び出され、続けて実際のデータを取得する為に呼び出されます。
// data : プロジェクトに書き込むデータを格納するバッファへのポインタ (NULLの場合はデータのバイト数のみ返す)
// size : プロジェクトに書き込むデータのバイト数を返すポインタ
// 戻り値 : 保存するデータがあるならTRUE
BOOL (*func_modify_title)( void *fp,void *editp,int frame,LPSTR title,int max_title );
// メインウィンドウのタイトルバーを表示する時に呼ばれる関数へのポインタ (NULLなら呼ばれません)
// タイトルバーの文字列を変更できます (未編集時、出力時は呼ばれません)
// frame : 編集フレーム番号
// title : 表示するタイトルバーの文字列
// max_title : titleのバッファサイズ
// 戻り値 : 成功ならTRUE
TCHAR *dll_path; // PluginsディレクトリのサブディレクトリにDLLがある時のみ、サブディレクトリ名が入ります。
int reserve[2]; // 拡張用に予約されてます。NULLにしてください。
} FILTER;
#define FILTER_FLAG_ACTIVE 1
#define FILTER_FLAG_ALWAYS_ACTIVE 4
#define FILTER_FLAG_CONFIG_POPUP 8
#define FILTER_FLAG_CONFIG_CHECK 16
#define FILTER_FLAG_CONFIG_RADIO 32
#define FILTER_FLAG_EX_DATA 1024
#define FILTER_FLAG_PRIORITY_HIGHEST 2048
#define FILTER_FLAG_PRIORITY_LOWEST 4096
#define FILTER_FLAG_WINDOW_THICKFRAME 8192
#define FILTER_FLAG_WINDOW_SIZE 16384
#define FILTER_FLAG_DISP_FILTER 32768
#define FILTER_FLAG_REDRAW 0x20000
#define FILTER_FLAG_EX_INFORMATION 0x40000
#define FILTER_FLAG_INFORMATION 0x80000
#define FILTER_FLAG_NO_CONFIG 0x100000
#define FILTER_FLAG_AUDIO_FILTER 0x200000
#define FILTER_FLAG_RADIO_BUTTON 0x400000
#define FILTER_FLAG_WINDOW_HSCROLL 0x800000
#define FILTER_FLAG_WINDOW_VSCROLL 0x1000000
#define FILTER_FLAG_INTERLACE_FILTER 0x4000000
#define FILTER_FLAG_NO_INIT_DATA 0x8000000
#define FILTER_FLAG_IMPORT 0x10000000
#define FILTER_FLAG_EXPORT 0x20000000
#define FILTER_FLAG_MAIN_MESSAGE 0x40000000
#define WM_FILTER_UPDATE (WM_USER+100)
#define WM_FILTER_FILE_OPEN (WM_USER+101)
#define WM_FILTER_FILE_CLOSE (WM_USER+102)
#define WM_FILTER_INIT (WM_USER+103)
#define WM_FILTER_EXIT (WM_USER+104)
#define WM_FILTER_SAVE_START (WM_USER+105)
#define WM_FILTER_SAVE_END (WM_USER+106)
#define WM_FILTER_IMPORT (WM_USER+107)
#define WM_FILTER_EXPORT (WM_USER+108)
#define WM_FILTER_CHANGE_ACTIVE (WM_USER+109)
#define WM_FILTER_CHANGE_WINDOW (WM_USER+110)
#define WM_FILTER_CHANGE_PARAM (WM_USER+111)
#define WM_FILTER_CHANGE_EDIT (WM_USER+112)
#define WM_FILTER_COMMAND (WM_USER+113)
#define WM_FILTER_FILE_UPDATE (WM_USER+114)
#define WM_FILTER_MAIN_MOUSE_DOWN (WM_USER+120)
#define WM_FILTER_MAIN_MOUSE_UP (WM_USER+121)
#define WM_FILTER_MAIN_MOUSE_MOVE (WM_USER+122)
#define WM_FILTER_MAIN_KEY_DOWN (WM_USER+123)
#define WM_FILTER_MAIN_KEY_UP (WM_USER+124)
#define WM_FILTER_MAIN_MOVESIZE (WM_USER+125)
#define WM_FILTER_MAIN_MOUSE_DBLCLK (WM_USER+126)
#define WM_FILTER_MAIN_MOUSE_R_DOWN (WM_USER+127)
#define WM_FILTER_MAIN_MOUSE_R_UP (WM_USER+128)
#define WM_FILTER_MAIN_MOUSE_WHEEL (WM_USER+129)
#define WM_FILTER_MAIN_CONTEXTMENU (WM_USER+130)
#define FILTER_UPDATE_STATUS_ALL 0
#define FILTER_UPDATE_STATUS_TRACK 0x10000
#define FILTER_UPDATE_STATUS_CHECK 0x20000
#define FILTER_WINDOW_SIZE_CLIENT 0x10000000
#define FILTER_WINDOW_SIZE_ADD 0x30000000
// フィルタDLL用構造体
typedef struct {
int flag;
int x,y;
TCHAR *name;
int track_n;
TCHAR **track_name;
int *track_default;
int *track_s,*track_e;
int check_n;
TCHAR **check_name;
int *check_default;
BOOL (*func_proc)( FILTER *fp,FILTER_PROC_INFO *fpip );
BOOL (*func_init)( FILTER *fp );
BOOL (*func_exit)( FILTER *fp );
BOOL (*func_update)( FILTER *fp,int status );
BOOL (*func_WndProc)( HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam,void *editp,FILTER *fp );
int *track,*check;
void *ex_data_ptr;
int ex_data_size;
TCHAR *information;
BOOL (*func_save_start)( FILTER *fp,int s,int e,void *editp );
BOOL (*func_save_end)( FILTER *fp,void *editp );
EXFUNC *exfunc;
HWND hwnd;
HINSTANCE dll_hinst;
void *ex_data_def;
BOOL (*func_is_saveframe)( FILTER *fp,void *editp,int saveno,int frame,int fps,int edit_flag,int inter );
BOOL (*func_project_load)( FILTER *fp,void *editp,void *data,int size );
BOOL (*func_project_save)( FILTER *fp,void *editp,void *data,int *size );
BOOL (*func_modify_title)( FILTER *fp,void *editp,int frame,LPSTR title,int max_title );
TCHAR *dll_path;
int reserve[2];
} FILTER_DLL;
#define MID_FILTER_BUTTON 12004
BOOL func_proc( FILTER *fp,FILTER_PROC_INFO *fpip );
BOOL func_init( FILTER *fp );
BOOL func_exit( FILTER *fp );
BOOL func_update( FILTER *fp,int status );
BOOL func_WndProc( HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam,void *editp,FILTER *fp );
BOOL func_save_start( FILTER *fp,int s,int e,void *editp );
BOOL func_save_end( FILTER *fp,void *editp );
BOOL func_is_saveframe( FILTER *fp,void *editp,int saveno,int frame,int fps,int edit_flag,int inter );
BOOL func_project_load( FILTER *fp,void *editp,void *data,int size );
BOOL func_project_save( FILTER *fp,void *editp,void *data,int *size );
BOOL func_modify_title( FILTER *fp,void *editp,int frame,LPSTR title,int max_title );