forked from mia/Aegisub
1. svn mv OverLua SSATool athenasub avisynth_prs kanamemo \ motiontracker prs traydict unit_test vsfilter devel/ * See r2749 for full description. Originally committed to SVN as r2755.
168 lines
4.5 KiB
C++
168 lines
4.5 KiB
C++
#ifndef f_FILTER_H
|
|
#define f_FILTER_H
|
|
|
|
#include <windows.h>
|
|
|
|
// This is really dumb, but necessary to support VTbls in C++.
|
|
|
|
struct FilterVTbls {
|
|
void *pvtblVBitmap;
|
|
};
|
|
|
|
#ifdef VDEXT_MAIN
|
|
struct FilterVTbls g_vtbls;
|
|
#elif defined(VDEXT_NOTMAIN)
|
|
extern struct FilterVTbls g_vtbls;
|
|
#endif
|
|
|
|
#define INITIALIZE_VTBLS ff->InitVTables(&g_vtbls)
|
|
|
|
#include "VBitmap.h"
|
|
|
|
//////////////////
|
|
|
|
struct CScriptObject;
|
|
|
|
//////////////////
|
|
|
|
enum {
|
|
FILTERPARAM_SWAP_BUFFERS = 0x00000001L,
|
|
FILTERPARAM_NEEDS_LAST = 0x00000002L,
|
|
};
|
|
|
|
///////////////////
|
|
|
|
class VFBitmap;
|
|
class FilterActivation;
|
|
struct FilterFunctions;
|
|
|
|
typedef int (*FilterInitProc )(FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef void (*FilterDeinitProc )(FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef int (*FilterRunProc )(const FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef long (*FilterParamProc )(FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef int (*FilterConfigProc )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
|
|
typedef int (*FilterConfig2Proc )(FilterActivation *fa, const FilterFunctions *ff, HWND hWnd);
|
|
typedef void (*FilterStringProc )(const FilterActivation *fa, const FilterFunctions *ff, char *buf);
|
|
typedef int (*FilterStartProc )(FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef int (*FilterEndProc )(FilterActivation *fa, const FilterFunctions *ff);
|
|
typedef bool (*FilterScriptStrProc)(FilterActivation *fa, const FilterFunctions *, char *, int);
|
|
|
|
typedef int (__cdecl *FilterModuleInitProc)(struct FilterModule *fm, const FilterFunctions *ff, int& vdfd_ver, int& vdfd_compat);
|
|
typedef void (__cdecl *FilterModuleDeinitProc)(struct FilterModule *fm, const FilterFunctions *ff);
|
|
|
|
//////////
|
|
|
|
typedef void (__cdecl *FilterPreviewButtonCallback)(bool fNewState, void *pData);
|
|
typedef void (__cdecl *FilterPreviewSampleCallback)(VFBitmap *, long lFrame, long lCount, void *pData);
|
|
|
|
class IFilterPreview {
|
|
public:
|
|
virtual void SetButtonCallback(FilterPreviewButtonCallback, void *)=0;
|
|
virtual void SetSampleCallback(FilterPreviewSampleCallback, void *)=0;
|
|
|
|
virtual bool isPreviewEnabled()=0;
|
|
virtual void Toggle(HWND)=0;
|
|
virtual void Display(HWND, bool)=0;
|
|
virtual void RedoFrame()=0;
|
|
virtual void RedoSystem()=0;
|
|
virtual void UndoSystem()=0;
|
|
virtual void InitButton(HWND)=0;
|
|
virtual void Close()=0;
|
|
virtual bool SampleCurrentFrame()=0;
|
|
virtual long SampleFrames()=0;
|
|
};
|
|
|
|
//////////
|
|
|
|
#define VIRTUALDUB_FILTERDEF_VERSION (4)
|
|
#define VIRTUALDUB_FILTERDEF_COMPATIBLE (4)
|
|
|
|
// v3: added lCurrentSourceFrame to FrameStateInfo
|
|
// v4: lots of additions (VirtualDub 1.2)
|
|
|
|
typedef struct FilterModule {
|
|
struct FilterModule *next, *prev;
|
|
HINSTANCE hInstModule;
|
|
FilterModuleInitProc initProc;
|
|
FilterModuleDeinitProc deinitProc;
|
|
} FilterModule;
|
|
|
|
typedef struct FilterDefinition {
|
|
|
|
struct FilterDefinition *next, *prev;
|
|
FilterModule *module;
|
|
|
|
char * name;
|
|
char * desc;
|
|
char * maker;
|
|
void * private_data;
|
|
int inst_data_size;
|
|
|
|
FilterInitProc initProc;
|
|
FilterDeinitProc deinitProc;
|
|
FilterRunProc runProc;
|
|
FilterParamProc paramProc;
|
|
FilterConfigProc configProc;
|
|
FilterStringProc stringProc;
|
|
FilterStartProc startProc;
|
|
FilterEndProc endProc;
|
|
|
|
CScriptObject *script_obj;
|
|
|
|
FilterScriptStrProc fssProc;
|
|
|
|
} FilterDefinition;
|
|
|
|
//////////
|
|
|
|
// FilterStateInfo: contains dynamic info about file being processed
|
|
|
|
class FilterStateInfo {
|
|
public:
|
|
long lCurrentFrame; // current output frame
|
|
long lMicrosecsPerFrame; // microseconds per output frame
|
|
long lCurrentSourceFrame; // current source frame
|
|
long lMicrosecsPerSrcFrame; // microseconds per source frame
|
|
long lSourceFrameMS; // source frame timestamp
|
|
long lDestFrameMS; // output frame timestamp
|
|
};
|
|
|
|
// VFBitmap: VBitmap extended to hold filter-specific information
|
|
|
|
class VFBitmap : public VBitmap {
|
|
public:
|
|
enum {
|
|
NEEDS_HDC = 0x00000001L,
|
|
};
|
|
|
|
DWORD dwFlags;
|
|
HDC hdc;
|
|
};
|
|
|
|
// FilterActivation: This is what is actually passed to filters at runtime.
|
|
|
|
class FilterActivation {
|
|
public:
|
|
FilterDefinition *filter;
|
|
void *filter_data;
|
|
VFBitmap &dst, &src;
|
|
VFBitmap *rsrc, *last;
|
|
unsigned long x1, y1, x2, y2;
|
|
|
|
FilterStateInfo *pfsi;
|
|
IFilterPreview *ifp;
|
|
|
|
FilterActivation(VFBitmap& _dst, VFBitmap& _src) : dst(_dst), src(_src) {}
|
|
FilterActivation(const FilterActivation& fa, VFBitmap& _dst, VFBitmap& _src);
|
|
};
|
|
|
|
struct FilterFunctions {
|
|
FilterDefinition *(*addFilter)(FilterModule *, FilterDefinition *, int fd_len);
|
|
void (*removeFilter)(FilterDefinition *);
|
|
bool (*isFPUEnabled)();
|
|
bool (*isMMXEnabled)();
|
|
void (*InitVTables)(struct FilterVTbls *);
|
|
};
|
|
|
|
#endif
|