6 // This is really dumb, but necessary to support VTbls in C++.
13 struct FilterVTbls g_vtbls
;
14 #elif defined(VDEXT_NOTMAIN)
15 extern struct FilterVTbls g_vtbls
;
18 #define INITIALIZE_VTBLS ff->InitVTables(&g_vtbls)
29 FILTERPARAM_SWAP_BUFFERS
= 0x00000001L
,
30 FILTERPARAM_NEEDS_LAST
= 0x00000002L
,
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
);
55 typedef void (__cdecl
*FilterPreviewButtonCallback
)(bool fNewState
, void *pData
);
56 typedef void (__cdecl
*FilterPreviewSampleCallback
)(VFBitmap
*, long lFrame
, long lCount
, void *pData
);
58 class IFilterPreview
{
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;
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
;
90 typedef struct FilterDefinition
{
92 struct FilterDefinition
*next
, *prev
;
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
;
118 // FilterStateInfo: contains dynamic info about file being processed
120 class FilterStateInfo
{
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
{
135 NEEDS_HDC
= 0x00000001L
,
142 // FilterActivation: This is what is actually passed to filters at runtime.
144 class FilterActivation
{
146 FilterDefinition
*filter
;
149 VFBitmap
*rsrc
, *last
;
150 unsigned long x1
, y1
, x2
, y2
;
152 FilterStateInfo
*pfsi
;
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
*);