Support sub-pixel in drawing commands and more check
[xy_vsfilter.git] / include / virtualdub / Filter.h
blob16215034de1925d32c4427fa61737a4fcfff5efd
1 #ifndef f_FILTER_H
2 #define f_FILTER_H
4 #include <windows.h>
6 // This is really dumb, but necessary to support VTbls in C++.
8 struct FilterVTbls {
9 void *pvtblVBitmap;
12 #ifdef VDEXT_MAIN
13 struct FilterVTbls g_vtbls;
14 #elif defined(VDEXT_NOTMAIN)
15 extern struct FilterVTbls g_vtbls;
16 #endif
18 #define INITIALIZE_VTBLS ff->InitVTables(&g_vtbls)
20 #include "VBitmap.h"
22 //////////////////
24 struct CScriptObject;
26 //////////////////
28 enum {
29 FILTERPARAM_SWAP_BUFFERS = 0x00000001L,
30 FILTERPARAM_NEEDS_LAST = 0x00000002L,
33 ///////////////////
35 class VFBitmap;
36 class FilterActivation;
37 struct FilterFunctions;
39 typedef int (*FilterInitProc )(FilterActivation *fa, const FilterFunctions *ff);
40 typedef void (*FilterDeinitProc )(FilterActivation *fa, const FilterFunctions *ff);
41 typedef int (*FilterRunProc )(const FilterActivation *fa, const FilterFunctions *ff);
42 typedef long (*FilterParamProc )(FilterActivation *fa, const FilterFunctions *ff);
43 typedef int (*FilterConfigProc )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
44 typedef int (*FilterConfig2Proc )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
45 typedef void (*FilterStringProc )(const FilterActivation *fa, const FilterFunctions *ff, char *buf);
46 typedef int (*FilterStartProc )(FilterActivation *fa, const FilterFunctions *ff);
47 typedef int (*FilterEndProc )(FilterActivation *fa, const FilterFunctions *ff);
48 typedef bool (*FilterScriptStrProc)(FilterActivation *fa, const FilterFunctions *, char *, int);
50 typedef int (__cdecl *FilterModuleInitProc)(struct FilterModule *fm, const FilterFunctions *ff, int& vdfd_ver, int& vdfd_compat);
51 typedef void (__cdecl *FilterModuleDeinitProc)(struct FilterModule *fm, const FilterFunctions *ff);
53 //////////
55 typedef void (__cdecl *FilterPreviewButtonCallback)(bool fNewState, void *pData);
56 typedef void (__cdecl *FilterPreviewSampleCallback)(VFBitmap *, long lFrame, long lCount, void *pData);
58 class IFilterPreview {
59 public:
60 virtual void SetButtonCallback(FilterPreviewButtonCallback, void *)=0;
61 virtual void SetSampleCallback(FilterPreviewSampleCallback, void *)=0;
63 virtual bool isPreviewEnabled()=0;
64 virtual void Toggle(HWND)=0;
65 virtual void Display(HWND, bool)=0;
66 virtual void RedoFrame()=0;
67 virtual void RedoSystem()=0;
68 virtual void UndoSystem()=0;
69 virtual void InitButton(HWND)=0;
70 virtual void Close()=0;
71 virtual bool SampleCurrentFrame()=0;
72 virtual long SampleFrames()=0;
75 //////////
77 #define VIRTUALDUB_FILTERDEF_VERSION (4)
78 #define VIRTUALDUB_FILTERDEF_COMPATIBLE (4)
80 // v3: added lCurrentSourceFrame to FrameStateInfo
81 // v4: lots of additions (VirtualDub 1.2)
83 typedef struct FilterModule {
84 struct FilterModule *next, *prev;
85 HINSTANCE hInstModule;
86 FilterModuleInitProc initProc;
87 FilterModuleDeinitProc deinitProc;
88 } FilterModule;
90 typedef struct FilterDefinition {
92 struct FilterDefinition *next, *prev;
93 FilterModule *module;
95 char * name;
96 char * desc;
97 char * maker;
98 void * private_data;
99 int inst_data_size;
101 FilterInitProc initProc;
102 FilterDeinitProc deinitProc;
103 FilterRunProc runProc;
104 FilterParamProc paramProc;
105 FilterConfigProc configProc;
106 FilterStringProc stringProc;
107 FilterStartProc startProc;
108 FilterEndProc endProc;
110 CScriptObject *script_obj;
112 FilterScriptStrProc fssProc;
114 } FilterDefinition;
116 //////////
118 // FilterStateInfo: contains dynamic info about file being processed
120 class FilterStateInfo {
121 public:
122 long lCurrentFrame; // current output frame
123 long lMicrosecsPerFrame; // microseconds per output frame
124 long lCurrentSourceFrame; // current source frame
125 long lMicrosecsPerSrcFrame; // microseconds per source frame
126 long lSourceFrameMS; // source frame timestamp
127 long lDestFrameMS; // output frame timestamp
130 // VFBitmap: VBitmap extended to hold filter-specific information
132 class VFBitmap : public VBitmap {
133 public:
134 enum {
135 NEEDS_HDC = 0x00000001L,
138 DWORD dwFlags;
139 HDC hdc;
142 // FilterActivation: This is what is actually passed to filters at runtime.
144 class FilterActivation {
145 public:
146 FilterDefinition *filter;
147 void *filter_data;
148 VFBitmap &dst, &src;
149 VFBitmap *rsrc, *last;
150 unsigned long x1, y1, x2, y2;
152 FilterStateInfo *pfsi;
153 IFilterPreview *ifp;
155 FilterActivation(VFBitmap& _dst, VFBitmap& _src) : dst(_dst), src(_src) {}
156 FilterActivation(const FilterActivation& fa, VFBitmap& _dst, VFBitmap& _src);
159 struct FilterFunctions {
160 FilterDefinition *(*addFilter)(FilterModule *, FilterDefinition *, int fd_len);
161 void (*removeFilter)(FilterDefinition *);
162 bool (*isFPUEnabled)();
163 bool (*isMMXEnabled)();
164 void (*InitVTables)(struct FilterVTbls *);
167 #endif