poikilos
5 years ago
committed by
Jacob Gustafson
42 changed files with 0 additions and 8494 deletions
@ -1 +0,0 @@ |
|||||
to Python via cpp2python.txt |
|
@ -1,244 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Copyright (C) 1998-2002 Avery Lee |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU General Public License as published by |
|
||||
# the Free Software Foundation; either version 2 of the License, or |
|
||||
# (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with self program; if not, to the Free Software |
|
||||
# Foundation, Inc., Mass Ave, Cambridge, 02139, USA. |
|
||||
# |
|
||||
# |
|
||||
# FILTER EXEMPTION: |
|
||||
# |
|
||||
# As a special exemption to the GPL in order to permit creation of |
|
||||
# filters that work with multiple programs as well as VirtualDub, |
|
||||
# compiling with self header file shall not be considered creation |
|
||||
# of a derived work; that is, act of compiling with self header |
|
||||
# file does not require your source code or the resulting module |
|
||||
# to be released in source code form or under a GPL-compatible |
|
||||
# license according to parts (2) and (3) of the GPL. A filter built |
|
||||
# using self header file may thus be licensed or dual-licensed so |
|
||||
# that it may be used with VirtualDub as well as an alternative |
|
||||
# product whose license is incompatible with the GPL. |
|
||||
# |
|
||||
# Nothing in self exemption shall be consTrued as applying to |
|
||||
# VirtualDub itself -- that is, exemption does not give you |
|
||||
# permission to use parts of VirtualDub's source besides self |
|
||||
# header file, to dynamically link with VirtualDub as part |
|
||||
# of the filter load process, a fashion not permitted by the |
|
||||
# GPL. |
|
||||
|
|
||||
|
|
||||
#ifndef f_FILTER_H |
|
||||
#define f_FILTER_H |
|
||||
|
|
||||
#include <windows.h> |
|
||||
|
|
||||
# This is really dumb, 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, |
|
||||
|
|
||||
|
|
||||
#define FILTERPARAM_HAS_LAG(frames) ((int)(frames) << 16) |
|
||||
|
|
||||
#########/ |
|
||||
|
|
||||
class VFBitmap |
|
||||
class FilterActivation |
|
||||
struct FilterFunctions |
|
||||
|
|
||||
typedef int (*FilterInitProc )(FilterActivation *fa, *ff) |
|
||||
typedef void (*FilterDeinitProc )(FilterActivation *fa, *ff) |
|
||||
typedef int (*FilterRunProc )( FilterActivation *fa, *ff) |
|
||||
typedef long (*FilterParamProc )(FilterActivation *fa, *ff) |
|
||||
typedef int (*FilterConfigProc )(FilterActivation *fa, *ff, hWnd) |
|
||||
typedef void (*FilterStringProc )( FilterActivation *fa, *ff, *buf) |
|
||||
typedef int (*FilterStartProc )(FilterActivation *fa, *ff) |
|
||||
typedef int (*FilterEndProc )(FilterActivation *fa, *ff) |
|
||||
typedef bool (*FilterScriptStrProc)(FilterActivation *fa, *, *, int) |
|
||||
typedef void (*FilterStringProc2 )( FilterActivation *fa, *ff, *buf, maxlen) |
|
||||
typedef int (*FilterSerialize )(FilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
typedef void (*FilterDeserialize )(FilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
typedef void (*FilterCopy )(FilterActivation *fa, *ff, *dst) |
|
||||
|
|
||||
typedef int (__cdecl *FilterModuleInitProc)(struct FilterModule *fm, *ff, vdfd_ver, vdfd_compat) |
|
||||
typedef void (__cdecl *FilterModuleDeinitProc)(struct FilterModule *fm, *ff) |
|
||||
|
|
||||
##### |
|
||||
|
|
||||
typedef void (__cdecl *FilterPreviewButtonCallback)(bool fNewState, *pData) |
|
||||
typedef void (__cdecl *FilterPreviewSampleCallback)(VFBitmap *, lFrame, lCount, *pData) |
|
||||
|
|
||||
class IFilterPreview |
|
||||
public: |
|
||||
virtual void SetButtonCallback(FilterPreviewButtonCallback, *)=0 |
|
||||
virtual void SetSampleCallback(FilterPreviewSampleCallback, *)=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 (8) |
|
||||
#define VIRTUALDUB_FILTERDEF_COMPATIBLE (4) |
|
||||
|
|
||||
# v3: added lCurrentSourceFrame to FrameStateInfo |
|
||||
# v4 (1.2): lots of additions (VirtualDub 1.2) |
|
||||
# v5 (1.3d): lots of bugfixes - stretchblt bilinear, non-zero startproc |
|
||||
# v6 (1.4): added error handling functions |
|
||||
# v7 (1.4d): added frame lag, handling |
|
||||
# v8 (1.4.11): |
|
||||
|
|
||||
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 |
|
||||
|
|
||||
# NEW - 1.4.11 |
|
||||
FilterStringProc2 stringProc2 |
|
||||
FilterSerialize serializeProc |
|
||||
FilterDeserialize deserializeProc |
|
||||
FilterCopy copyProc |
|
||||
} 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 *__reserved0, last |
|
||||
unsigned long x1, y1, x2, y2 |
|
||||
|
|
||||
FilterStateInfo *pfsi |
|
||||
IFilterPreview *ifp |
|
||||
|
|
||||
FilterActivation(VFBitmap& _dst, _src, *_last) : dst(_dst), src(_src), last(_last) { |
|
||||
FilterActivation( FilterActivation& fa, _dst, _src, *_last) |
|
||||
|
|
||||
|
|
||||
# These flags must match those in cpuaccel.h! |
|
||||
|
|
||||
#ifndef f_VIRTUALDUB_CPUACCEL_H |
|
||||
#define CPUF_SUPPORTS_CPUID (0x00000001L) |
|
||||
#define CPUF_SUPPORTS_FPU (0x00000002L) |
|
||||
#define CPUF_SUPPORTS_MMX (0x00000004L) |
|
||||
#define CPUF_SUPPORTS_INTEGER_SSE (0x00000008L) |
|
||||
#define CPUF_SUPPORTS_SSE (0x00000010L) |
|
||||
#define CPUF_SUPPORTS_SSE2 (0x00000020L) |
|
||||
#define CPUF_SUPPORTS_3DNOW (0x00000040L) |
|
||||
#define CPUF_SUPPORTS_3DNOW_EXT (0x00000080L) |
|
||||
#endif |
|
||||
|
|
||||
struct FilterFunctions |
|
||||
FilterDefinition *(*addFilter)(FilterModule *, *, fd_len) |
|
||||
void (*removeFilter)(FilterDefinition *) |
|
||||
bool (*isFPUEnabled)() |
|
||||
bool (*isMMXEnabled)() |
|
||||
void (*InitVTables)(struct FilterVTbls *) |
|
||||
|
|
||||
# These functions permit you to throw MyError exceptions from a filter. |
|
||||
# YOU MUST ONLY CALL THESE IN runProc, initProc, startProc. |
|
||||
|
|
||||
void (*ExceptOutOfMemory)(); # ADDED: V6 (VirtualDub 1.4) |
|
||||
void (*Except)( char *format, ...); # ADDED: V6 (VirtualDub 1.4) |
|
||||
|
|
||||
# These functions are callable at any time. |
|
||||
|
|
||||
long (*getCPUFlags)(); # ADDED: V6 (VirtualDub 1.4) |
|
||||
long (*getHostVersionInfo)(char *buffer, len); # ADDED: V7 (VirtualDub 1.4d) |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,95 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Copyright (C) 1998-2002 Avery Lee |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU General Public License as published by |
|
||||
# the Free Software Foundation; either version 2 of the License, or |
|
||||
# (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with self program; if not, to the Free Software |
|
||||
# Foundation, Inc., Mass Ave, Cambridge, 02139, USA. |
|
||||
# |
|
||||
# |
|
||||
# FILTER EXEMPTION: |
|
||||
# |
|
||||
# As a special exemption to the GPL in order to permit creation of |
|
||||
# filters that work with multiple programs as well as VirtualDub, |
|
||||
# compiling with self header file shall not be considered creation |
|
||||
# of a derived work; that is, act of compiling with self header |
|
||||
# file does not require your source code or the resulting module |
|
||||
# to be released in source code form or under a GPL-compatible |
|
||||
# license according to parts (2) and (3) of the GPL. A filter built |
|
||||
# using self header file may thus be licensed or dual-licensed so |
|
||||
# that it may be used with VirtualDub as well as an alternative |
|
||||
# product whose license is incompatible with the GPL. |
|
||||
# |
|
||||
# Nothing in self exemption shall be consTrued as applying to |
|
||||
# VirtualDub itself -- that is, exemption does not give you |
|
||||
# permission to use parts of VirtualDub's source besides self |
|
||||
# header file, to dynamically link with VirtualDub as part |
|
||||
# of the filter load process, a fashion not permitted by the |
|
||||
# GPL. |
|
||||
|
|
||||
#ifndef f_SYLIA_SCRIPTERROR_H |
|
||||
#define f_SYLIA_SCRIPTERROR_H |
|
||||
|
|
||||
class CScriptError |
|
||||
public: |
|
||||
int err |
|
||||
|
|
||||
enum |
|
||||
PARSE_ERROR=1, |
|
||||
SEMICOLON_EXPECTED, |
|
||||
IDENTIFIER_EXPECTED, |
|
||||
|
|
||||
TYPE_INT_REQUIRED, |
|
||||
TYPE_ARRAY_REQUIRED, |
|
||||
TYPE_FUNCTION_REQUIRED, |
|
||||
TYPE_OBJECT_REQUIRED, |
|
||||
|
|
||||
OBJECT_MEMBER_NAME_REQUIRED, |
|
||||
FUNCCALLEND_EXPECTED, |
|
||||
TOO_MANY_PARAMS, |
|
||||
DIVIDE_BY_ZERO, |
|
||||
VAR_NOT_FOUND, |
|
||||
MEMBER_NOT_FOUND, |
|
||||
OVERLOADED_FUNCTION_NOT_FOUND, |
|
||||
IDENT_TOO_LONG, |
|
||||
OPERATOR_EXPECTED, |
|
||||
CLOSEPARENS_EXPECTED, |
|
||||
CLOSEBRACKET_EXPECTED, |
|
||||
|
|
||||
VAR_UNDEFINED, |
|
||||
|
|
||||
OUT_OF_STRING_SPACE, |
|
||||
OUT_OF_MEMORY, |
|
||||
INTERNAL_ERROR, |
|
||||
EXTERNAL_ERROR, |
|
||||
|
|
||||
FCALL_OUT_OF_RANGE, |
|
||||
FCALL_INVALID_PTYPE, |
|
||||
FCALL_UNKNOWN_STR, |
|
||||
|
|
||||
|
|
||||
CScriptError(int err_num) : err(err_num) { |
|
||||
|
|
||||
int getErr() |
|
||||
return err |
|
||||
|
|
||||
|
|
||||
|
|
||||
#define SCRIPT_ERROR(x) throw CScriptError(CScriptError.##x) |
|
||||
|
|
||||
extern "C" __declspec(dllexport) char * __stdcall TranslateScriptError(int) |
|
||||
|
|
||||
char inline *TranslateScriptError(CScriptError cse) |
|
||||
return TranslateScriptError(cse.getErr()) |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,70 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Copyright (C) 1998-2002 Avery Lee |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU General Public License as published by |
|
||||
# the Free Software Foundation; either version 2 of the License, or |
|
||||
# (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with self program; if not, to the Free Software |
|
||||
# Foundation, Inc., Mass Ave, Cambridge, 02139, USA. |
|
||||
# |
|
||||
# |
|
||||
# FILTER EXEMPTION: |
|
||||
# |
|
||||
# As a special exemption to the GPL in order to permit creation of |
|
||||
# filters that work with multiple programs as well as VirtualDub, |
|
||||
# compiling with self header file shall not be considered creation |
|
||||
# of a derived work; that is, act of compiling with self header |
|
||||
# file does not require your source code or the resulting module |
|
||||
# to be released in source code form or under a GPL-compatible |
|
||||
# license according to parts (2) and (3) of the GPL. A filter built |
|
||||
# using self header file may thus be licensed or dual-licensed so |
|
||||
# that it may be used with VirtualDub as well as an alternative |
|
||||
# product whose license is incompatible with the GPL. |
|
||||
# |
|
||||
# Nothing in self exemption shall be consTrued as applying to |
|
||||
# VirtualDub itself -- that is, exemption does not give you |
|
||||
# permission to use parts of VirtualDub's source besides self |
|
||||
# header file, to dynamically link with VirtualDub as part |
|
||||
# of the filter load process, a fashion not permitted by the |
|
||||
# GPL. |
|
||||
|
|
||||
#ifndef f_SYLIA_SCRIPTINTERPRETER_H |
|
||||
#define f_SYLIA_SCRIPTINTERPRETER_H |
|
||||
|
|
||||
class CScriptValue |
|
||||
class CScriptError |
|
||||
struct CScriptObject |
|
||||
class IScriptInterpreter |
|
||||
|
|
||||
typedef CScriptValue (*ScriptRootHandlerPtr)(IScriptInterpreter *, *, *) |
|
||||
|
|
||||
class IScriptInterpreter |
|
||||
public: |
|
||||
virtual void Destroy() =0 |
|
||||
|
|
||||
virtual void SetRootHandler(ScriptRootHandlerPtr, *) =0 |
|
||||
|
|
||||
virtual void ExecuteLine(char *s) =0 |
|
||||
|
|
||||
virtual void ScriptError(int e) =0 |
|
||||
virtual char* TranslateScriptError(CScriptError& cse) =0 |
|
||||
virtual char** AllocTempString(long l) =0 |
|
||||
|
|
||||
virtual CScriptValue LookupObjectMember(CScriptObject *obj, *, *szIdent) = 0 |
|
||||
|
|
||||
|
|
||||
extern "C" __declspec(dllexport) IScriptInterpreter * __stdcall CreateScriptInterpreter() |
|
||||
|
|
||||
#define GETPROC_CREATESCRIPTINTERPRETER(hInst) ((IScriptInterpreter *(__stdcall *)())GetProcAddress(hInst, "_CreateScriptInterpreter@0")) |
|
||||
|
|
||||
#define EXT_SCRIPT_ERROR(x) (isi.ScriptError((CScriptError.x))) |
|
||||
|
|
||||
#endif |
|
@ -1,171 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Copyright (C) 1998-2002 Avery Lee |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU General Public License as published by |
|
||||
# the Free Software Foundation; either version 2 of the License, or |
|
||||
# (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with self program; if not, to the Free Software |
|
||||
# Foundation, Inc., Mass Ave, Cambridge, 02139, USA. |
|
||||
# |
|
||||
# |
|
||||
# FILTER EXEMPTION: |
|
||||
# |
|
||||
# As a special exemption to the GPL in order to permit creation of |
|
||||
# filters that work with multiple programs as well as VirtualDub, |
|
||||
# compiling with self header file shall not be considered creation |
|
||||
# of a derived work; that is, act of compiling with self header |
|
||||
# file does not require your source code or the resulting module |
|
||||
# to be released in source code form or under a GPL-compatible |
|
||||
# license according to parts (2) and (3) of the GPL. A filter built |
|
||||
# using self header file may thus be licensed or dual-licensed so |
|
||||
# that it may be used with VirtualDub as well as an alternative |
|
||||
# product whose license is incompatible with the GPL. |
|
||||
# |
|
||||
# Nothing in self exemption shall be consTrued as applying to |
|
||||
# VirtualDub itself -- that is, exemption does not give you |
|
||||
# permission to use parts of VirtualDub's source besides self |
|
||||
# header file, to dynamically link with VirtualDub as part |
|
||||
# of the filter load process, a fashion not permitted by the |
|
||||
# GPL. |
|
||||
|
|
||||
#ifndef f_SYLIA_SCRIPTVALUE_H |
|
||||
#define f_SYLIA_SCRIPTVALUE_H |
|
||||
|
|
||||
class CScriptArray |
|
||||
struct CScriptObject |
|
||||
class CScriptValue |
|
||||
class IScriptInterpreter |
|
||||
class VariableTableEntry |
|
||||
|
|
||||
typedef CScriptValue (*ScriptObjectLookupFuncPtr)(IScriptInterpreter *, *, *lpVoid, *szName) |
|
||||
typedef CScriptValue (*ScriptFunctionPtr)(IScriptInterpreter *, *, *, int) |
|
||||
typedef void (*ScriptVoidFunctionPtr)(IScriptInterpreter *, *, *, int) |
|
||||
typedef int (*ScriptIntFunctionPtr)(IScriptInterpreter *, *, *, int) |
|
||||
typedef CScriptValue (*ScriptArrayFunctionPtr)(IScriptInterpreter *, *, int) |
|
||||
|
|
||||
typedef struct ScriptFunctionDef |
|
||||
ScriptFunctionPtr func_ptr |
|
||||
char *name |
|
||||
char *arg_list |
|
||||
} ScriptFunctionDef |
|
||||
|
|
||||
typedef struct ScriptObjectDef |
|
||||
char *name |
|
||||
CScriptObject *obj |
|
||||
} ScriptObjectDef |
|
||||
|
|
||||
typedef struct CScriptObject |
|
||||
ScriptObjectLookupFuncPtr Lookup |
|
||||
ScriptFunctionDef *func_list |
|
||||
ScriptObjectDef *obj_list |
|
||||
} CScriptObject |
|
||||
|
|
||||
class CScriptValue |
|
||||
public: |
|
||||
enum { T_VOID, T_INT, T_PINT, T_STR, T_ARRAY, T_OBJECT, T_FNAME, T_FUNCTION, T_VARLV } type |
|
||||
CScriptObject *thisPtr |
|
||||
union |
|
||||
int i |
|
||||
int *pi |
|
||||
char **s |
|
||||
ScriptArrayFunctionPtr ary |
|
||||
CScriptObject *obj |
|
||||
ScriptFunctionPtr func |
|
||||
ScriptFunctionDef *fname |
|
||||
VariableTableEntry *vte |
|
||||
} u |
|
||||
void *lpVoid |
|
||||
|
|
||||
CScriptValue() |
|
||||
type = T_VOID |
|
||||
|
|
||||
CScriptValue(int i) |
|
||||
type = T_INT |
|
||||
u.i = i |
|
||||
|
|
||||
CScriptValue(int *pi) |
|
||||
type = T_PINT |
|
||||
u.pi = pi |
|
||||
|
|
||||
CScriptValue(char **s) |
|
||||
type = T_STR |
|
||||
u.s = s |
|
||||
|
|
||||
CScriptValue(CScriptObject *obj) |
|
||||
type = T_OBJECT |
|
||||
u.obj = obj |
|
||||
|
|
||||
CScriptValue(CScriptObject *_thisPtr, csa) |
|
||||
type = T_ARRAY |
|
||||
u.ary = csa |
|
||||
thisPtr = _thisPtr |
|
||||
|
|
||||
CScriptValue(CScriptObject *_thisPtr, *sfd) |
|
||||
type = T_FNAME |
|
||||
u.fname = sfd |
|
||||
thisPtr = _thisPtr |
|
||||
|
|
||||
CScriptValue(CScriptObject *_thisPtr, fn) |
|
||||
type = T_FUNCTION |
|
||||
u.func = fn |
|
||||
thisPtr = _thisPtr |
|
||||
|
|
||||
CScriptValue(VariableTableEntry *vte) |
|
||||
type = T_VARLV |
|
||||
u.vte = vte |
|
||||
|
|
||||
|
|
||||
bool isVoid() |
|
||||
return type == T_VOID |
|
||||
|
|
||||
bool isInt() |
|
||||
return type == T_INT |
|
||||
|
|
||||
bool isString() |
|
||||
return type == T_STR |
|
||||
|
|
||||
bool isArray() |
|
||||
return type == T_ARRAY |
|
||||
|
|
||||
bool isObject() |
|
||||
return type == T_OBJECT |
|
||||
|
|
||||
bool isFName() |
|
||||
return type == T_FNAME |
|
||||
|
|
||||
bool isFunction() |
|
||||
return type == T_FUNCTION |
|
||||
|
|
||||
bool isVarLV() |
|
||||
return type == T_VARLV |
|
||||
|
|
||||
|
|
||||
int asInt() |
|
||||
return u.i |
|
||||
|
|
||||
char ** asString() |
|
||||
return u.s |
|
||||
|
|
||||
ScriptArrayFunctionPtr asArray() |
|
||||
return u.ary |
|
||||
|
|
||||
CScriptObject * asObject() |
|
||||
return u.obj |
|
||||
|
|
||||
ScriptFunctionPtr asFunction() |
|
||||
return u.func |
|
||||
|
|
||||
VariableTableEntry* asVarLV() |
|
||||
return u.vte |
|
||||
|
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,174 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Copyright (C) 1998-2002 Avery Lee |
|
||||
# |
|
||||
# This program is free software; you can redistribute it and/or modify |
|
||||
# it under the terms of the GNU General Public License as published by |
|
||||
# the Free Software Foundation; either version 2 of the License, or |
|
||||
# (at your option) any later version. |
|
||||
# |
|
||||
# This program is distributed in the hope that it will be useful, |
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||
# GNU General Public License for more details. |
|
||||
# |
|
||||
# You should have received a copy of the GNU General Public License |
|
||||
# along with self program; if not, to the Free Software |
|
||||
# Foundation, Inc., Mass Ave, Cambridge, 02139, USA. |
|
||||
# |
|
||||
# |
|
||||
# FILTER EXEMPTION: |
|
||||
# |
|
||||
# As a special exemption to the GPL in order to permit creation of |
|
||||
# filters that work with multiple programs as well as VirtualDub, |
|
||||
# compiling with self header file shall not be considered creation |
|
||||
# of a derived work; that is, act of compiling with self header |
|
||||
# file does not require your source code or the resulting module |
|
||||
# to be released in source code form or under a GPL-compatible |
|
||||
# license according to parts (2) and (3) of the GPL. A filter built |
|
||||
# using self header file may thus be licensed or dual-licensed so |
|
||||
# that it may be used with VirtualDub as well as an alternative |
|
||||
# product whose license is incompatible with the GPL. |
|
||||
# |
|
||||
# Nothing in self exemption shall be consTrued as applying to |
|
||||
# VirtualDub itself -- that is, exemption does not give you |
|
||||
# permission to use parts of VirtualDub's source besides self |
|
||||
# header file, to dynamically link with VirtualDub as part |
|
||||
# of the filter load process, a fashion not permitted by the |
|
||||
# GPL. |
|
||||
|
|
||||
#ifndef f_VIRTUALDUB_VBITMAP_H |
|
||||
#define f_VIRTUALDUB_VBITMAP_H |
|
||||
|
|
||||
#include <windows.h> |
|
||||
|
|
||||
typedef unsigned long Pixel |
|
||||
typedef unsigned long Pixel32 |
|
||||
typedef unsigned char Pixel8 |
|
||||
typedef long PixCoord |
|
||||
typedef long PixDim |
|
||||
typedef long PixOffset |
|
||||
|
|
||||
#ifdef VDEXT_VIDEO_FILTER |
|
||||
#define NOVTABLE __declspec(novtable) |
|
||||
#else: |
|
||||
#define NOVTABLE |
|
||||
#endif |
|
||||
|
|
||||
class NOVTABLE VBitmap |
|
||||
public: |
|
||||
Pixel * data |
|
||||
Pixel * palette |
|
||||
int depth |
|
||||
PixCoord w, h |
|
||||
PixOffset pitch |
|
||||
PixOffset modulo |
|
||||
PixOffset size |
|
||||
PixOffset offset |
|
||||
|
|
||||
Pixel *Address(PixCoord x, y) |
|
||||
return Addressi(x, h-y-1) |
|
||||
|
|
||||
|
|
||||
Pixel *Addressi(PixCoord x, y) |
|
||||
return (Pixel *)((char *)data + y*pitch + x*(depth>>3)) |
|
||||
|
|
||||
|
|
||||
Pixel *Address16(PixCoord x, y) |
|
||||
return Address16i(x, h-y-1) |
|
||||
|
|
||||
|
|
||||
Pixel *Address16i(PixCoord x, y) |
|
||||
return (Pixel *)((char *)data + y*pitch + x*2) |
|
||||
|
|
||||
|
|
||||
Pixel *Address32(PixCoord x, y) |
|
||||
return Address32i(x, h-y-1) |
|
||||
|
|
||||
|
|
||||
Pixel *Address32i(PixCoord x, y) |
|
||||
return (Pixel *)((char *)data + y*pitch + x*sizeof(Pixel)) |
|
||||
|
|
||||
|
|
||||
PixOffset PitchAlign4() |
|
||||
return ((w * depth + 31)/32)*4 |
|
||||
|
|
||||
|
|
||||
PixOffset PitchAlign8() |
|
||||
return ((w * depth + 63)/64)*8 |
|
||||
|
|
||||
|
|
||||
PixOffset Modulo() |
|
||||
return pitch - (w*depth+7)/8 |
|
||||
|
|
||||
|
|
||||
PixOffset Size() |
|
||||
return pitch*h |
|
||||
|
|
||||
|
|
||||
### |
|
||||
|
|
||||
VBitmap() throw() |
|
||||
#ifdef VDEXT_VIDEO_FILTER |
|
||||
init() |
|
||||
#endif |
|
||||
|
|
||||
VBitmap(void *data, w, h, depth) throw() |
|
||||
VBitmap(void *data, *) throw() |
|
||||
|
|
||||
#ifdef VDEXT_VIDEO_FILTER |
|
||||
void init() throw() |
|
||||
*(void **)self = g_vtbls.pvtblVBitmap |
|
||||
|
|
||||
#endif |
|
||||
|
|
||||
virtual VBitmap& init(void *data, w, h, depth) throw() |
|
||||
virtual VBitmap& init(void *data, *) throw() |
|
||||
|
|
||||
virtual void MakeBitmapHeader(BITMAPINFOHEADER *bih) throw() |
|
||||
|
|
||||
virtual void AlignTo4() throw() |
|
||||
virtual void AlignTo8() throw() |
|
||||
|
|
||||
virtual void BitBlt(PixCoord x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
virtual void BitBltDither(PixCoord x2, y2, *src, x1, y1, dx, dy, to565) throw() |
|
||||
virtual void BitBlt565(PixCoord x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
|
|
||||
virtual bool BitBltXlat1(PixCoord x2, y2, *src, x1, y1, dx, dy, *tbl) throw() |
|
||||
virtual bool BitBltXlat3(PixCoord x2, y2, *src, x1, y1, dx, dy, *tbl) throw() |
|
||||
|
|
||||
virtual bool StretchBltNearestFast(PixCoord x1, y1, dx, dy, *src, x2, y2, dx1, dy1) throw() |
|
||||
|
|
||||
virtual bool StretchBltBilinearFast(PixCoord x1, y1, dx, dy, *src, x2, y2, dx1, dy1) throw() |
|
||||
|
|
||||
virtual bool RectFill(PixCoord x1, y1, dx, dy, c) throw() |
|
||||
|
|
||||
enum |
|
||||
HISTO_LUMA, |
|
||||
HISTO_GRAY, |
|
||||
HISTO_RED, |
|
||||
HISTO_GREEN, |
|
||||
HISTO_BLUE, |
|
||||
|
|
||||
|
|
||||
virtual bool Histogram(PixCoord x, y, dx, dy, *pHisto, iHistoType) throw() |
|
||||
|
|
||||
## NEW AS OF VIRTUALDUB V1.2B |
|
||||
|
|
||||
virtual bool BitBltFromYUY2(PixCoord x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
virtual bool BitBltFromI420(PixCoord x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
|
|
||||
## NEW AS OF VIRTUALDUB V1.4C |
|
||||
|
|
||||
virtual void MakeBitmapHeaderNoPadding(BITMAPINFOHEADER *bih) throw() |
|
||||
|
|
||||
#####/ |
|
||||
|
|
||||
bool BitBltFromYUY2Fullscale(PixCoord x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
|
|
||||
private: |
|
||||
bool dualrectclip(PixCoord& x2, y2, *src, x1, y1, dx, dy) throw() |
|
||||
|
|
||||
|
|
||||
#undef NOVTABLE |
|
||||
|
|
||||
#endif |
|
@ -1,57 +0,0 @@ |
|||||
#ifndef f_FILTER_H |
|
||||
#define f_FILTER_H |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
#include <windows.h> |
|
||||
|
|
||||
# This is really dumb, necessary to support VTbls in C++. |
|
||||
|
|
||||
typedef struct VDXFilterVTbls |
|
||||
void *pvtblVBitmap |
|
||||
} FilterVTbls |
|
||||
|
|
||||
#ifdef VDEXT_MAIN |
|
||||
VDXFilterVTbls g_vtbls |
|
||||
#elif defined(VDEXT_NOTMAIN) |
|
||||
extern VDXFilterVTbls g_vtbls |
|
||||
#endif |
|
||||
|
|
||||
#define INITIALIZE_VTBLS ff.InitVTables(&g_vtbls) |
|
||||
|
|
||||
#include "VBitmap.h" |
|
||||
|
|
||||
typedef .VDXFilterInitProc FilterInitProc |
|
||||
typedef .VDXFilterDeinitProc FilterDeinitProc |
|
||||
typedef .VDXFilterRunProc FilterRunProc |
|
||||
typedef .VDXFilterParamProc FilterParamProc |
|
||||
typedef .VDXFilterConfigProc FilterConfigProc |
|
||||
typedef .VDXFilterStringProc FilterStringProc |
|
||||
typedef .VDXFilterStartProc FilterStartProc |
|
||||
typedef .VDXFilterEndProc FilterEndProc |
|
||||
typedef .VDXFilterScriptStrProc FilterScriptStrProc |
|
||||
typedef .VDXFilterStringProc2 FilterStringProc2 |
|
||||
typedef .VDXFilterSerialize FilterSerialize |
|
||||
typedef .VDXFilterDeserialize FilterDeserialize |
|
||||
typedef .VDXFilterCopy FilterCopy |
|
||||
|
|
||||
typedef .VDXFilterModuleInitProc FilterModuleInitProc |
|
||||
typedef .VDXFilterModuleDeinitProc FilterModuleDeinitProc |
|
||||
|
|
||||
##### |
|
||||
|
|
||||
typedef .VDXFilterPreviewButtonCallback FilterPreviewButtonCallback |
|
||||
typedef .VDXFilterPreviewSampleCallback FilterPreviewSampleCallback |
|
||||
|
|
||||
typedef .IVDXFilterPreview IFilterPreview |
|
||||
|
|
||||
##### |
|
||||
|
|
||||
typedef .VDXFilterModule FilterModule |
|
||||
typedef .VDXFilterDefinition FilterDefinition |
|
||||
typedef .VDXFilterStateInfo FilterStateInfo |
|
||||
typedef .VDXFBitmap VFBitmap |
|
||||
|
|
||||
typedef .VDXFilterActivation FilterActivation |
|
||||
typedef .VDXFilterFunctions FilterFunctions |
|
||||
|
|
||||
#endif |
|
@ -1,8 +0,0 @@ |
|||||
#ifndef f_SYLIA_SCRIPTERROR_H |
|
||||
#define f_SYLIA_SCRIPTERROR_H |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
typedef .VDXScriptError CScriptError |
|
||||
|
|
||||
#endif |
|
@ -1,11 +0,0 @@ |
|||||
#ifndef f_SYLIA_SCRIPTINTERPRETER_H |
|
||||
#define f_SYLIA_SCRIPTINTERPRETER_H |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
typedef .VDXScriptValue CScriptValue |
|
||||
typedef .VDXScriptError CScriptError |
|
||||
typedef .VDXScriptObject CScriptObject |
|
||||
typedef .IVDXScriptInterpreter IScriptInterpreter |
|
||||
|
|
||||
#endif |
|
@ -1,17 +0,0 @@ |
|||||
#ifndef f_SYLIA_SCRIPTVALUE_H |
|
||||
#define f_SYLIA_SCRIPTVALUE_H |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
typedef .VDXScriptObject CScriptObject |
|
||||
typedef .VDXScriptValue CScriptValue |
|
||||
typedef .IVDXScriptInterpreter IScriptInterpreter |
|
||||
|
|
||||
typedef .VDXScriptFunctionPtr ScriptFunctionPtr |
|
||||
typedef .VDXVoidScriptFunctionPtr ScriptVoidFunctionPtr |
|
||||
typedef .VDXIntScriptFunctionPtr ScriptIntFunctionPtr |
|
||||
|
|
||||
typedef .VDXScriptFunctionDef ScriptFunctionDef |
|
||||
typedef .VDXScriptObject CScriptObject |
|
||||
|
|
||||
#endif |
|
@ -1,16 +0,0 @@ |
|||||
#ifndef f_VIRTUALDUB_VBITMAP_H |
|
||||
#define f_VIRTUALDUB_VBITMAP_H |
|
||||
|
|
||||
#include <windows.h> |
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
typedef unsigned Pixel |
|
||||
typedef unsigned Pixel32 |
|
||||
typedef unsigned char Pixel8 |
|
||||
typedef int PixCoord |
|
||||
typedef int PixDim |
|
||||
typedef ptrdiff_t PixOffset |
|
||||
|
|
||||
typedef .VDXBitmap VBitmap |
|
||||
|
|
||||
#endif |
|
@ -1,110 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_VDXFRAME_UNKNOWN_H |
|
||||
#define f_VD2_VDXFRAME_UNKNOWN_H |
|
||||
|
|
||||
#include <vd2/plugin/vdplugin.h> |
|
||||
|
|
||||
extern "C" long _InterlockedExchangeAdd(volatile long *p, v) |
|
||||
#pragma intrinsic(_InterlockedExchangeAdd) |
|
||||
|
|
||||
template<class T> class vdxunknown : public T |
|
||||
public: |
|
||||
vdxunknown() : mRefCount(0) { |
|
||||
vdxunknown( vdxunknown<T>& src) : mRefCount(0) {} # do not copy the refcount |
|
||||
virtual ~vdxunknown() { |
|
||||
|
|
||||
vdxunknown<T>& operator=( vdxunknown<T>&) {} # do not copy the refcount |
|
||||
|
|
||||
virtual int VDXAPIENTRY AddRef() |
|
||||
return _InterlockedExchangeAdd(&mRefCount, 1) + 1 |
|
||||
|
|
||||
|
|
||||
virtual int VDXAPIENTRY Release() |
|
||||
rc = _InterlockedExchangeAdd(&mRefCount, -1) - 1 |
|
||||
if not mRefCount: |
|
||||
mRefCount = 1 |
|
||||
delete self |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
return rc |
|
||||
|
|
||||
|
|
||||
virtual void *VDXAPIENTRY AsInterface(uint32 iid) |
|
||||
if iid == T.kIID: |
|
||||
return static_cast<T *>(self) |
|
||||
|
|
||||
if iid == IVDXUnknown.kIID: |
|
||||
return static_cast<IVDXUnknown *>(self) |
|
||||
|
|
||||
return NULL |
|
||||
|
|
||||
|
|
||||
protected: |
|
||||
volatile long mRefCount |
|
||||
|
|
||||
|
|
||||
template<class T1, T2> class vdxunknown2 : public T1, T2 |
|
||||
public: |
|
||||
vdxunknown2() : mRefCount(0) { |
|
||||
vdxunknown2( vdxunknown2& src) : mRefCount(0) {} # do not copy the refcount |
|
||||
virtual ~vdxunknown2() { |
|
||||
|
|
||||
vdxunknown2& operator=( vdxunknown2&) {} # do not copy the refcount |
|
||||
|
|
||||
virtual int VDXAPIENTRY AddRef() |
|
||||
return _InterlockedExchangeAdd(&mRefCount, 1) + 1 |
|
||||
|
|
||||
|
|
||||
virtual int VDXAPIENTRY Release() |
|
||||
rc = _InterlockedExchangeAdd(&mRefCount, -1) - 1 |
|
||||
if not mRefCount: |
|
||||
mRefCount = 1 |
|
||||
delete self |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
return rc |
|
||||
|
|
||||
|
|
||||
virtual void *VDXAPIENTRY AsInterface(uint32 iid) |
|
||||
if iid == T1.kIID: |
|
||||
return static_cast<T1 *>(self) |
|
||||
|
|
||||
if iid == T2.kIID: |
|
||||
return static_cast<T2 *>(self) |
|
||||
|
|
||||
if iid == IVDXUnknown.kIID: |
|
||||
return static_cast<IVDXUnknown *>(static_cast<T1 *>(self)) |
|
||||
|
|
||||
return NULL |
|
||||
|
|
||||
|
|
||||
protected: |
|
||||
volatile long mRefCount |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,220 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_VDXFRAME_VIDEOFILTER_H |
|
||||
#define f_VD2_VDXFRAME_VIDEOFILTER_H |
|
||||
|
|
||||
#include <stdlib.h> |
|
||||
#include <stddef.h> |
|
||||
#include <new> |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
#####################################/ |
|
||||
#/ \class VDXVideoFilter |
|
||||
#/ |
|
||||
#/ This class handles most of the grimy work of creating the interface |
|
||||
#/ between your filter and VirtualDub. |
|
||||
#/ |
|
||||
class VDXVideoFilter |
|
||||
public: |
|
||||
VDXVideoFilter() |
|
||||
virtual ~VDXVideoFilter() |
|
||||
|
|
||||
void SetHooks(VDXFilterActivation *fa, *ff) |
|
||||
|
|
||||
# linkage routines |
|
||||
|
|
||||
virtual bool Init() |
|
||||
virtual uint32 GetParams()=0 |
|
||||
virtual void Start() |
|
||||
virtual void Run() = 0 |
|
||||
virtual void End() |
|
||||
virtual bool Configure(VDXHWND hwnd) |
|
||||
virtual void GetSettingString(char *buf, maxlen) |
|
||||
virtual void GetScriptString(char *buf, maxlen) |
|
||||
virtual int Serialize(char *buf, maxbuf) |
|
||||
virtual int Deserialize( char *buf, maxbuf) |
|
||||
virtual sint64 Prefetch(sint64 frame) |
|
||||
virtual bool Prefetch2(sint64 frame, *prefetcher) |
|
||||
|
|
||||
virtual bool OnEvent(uint32 event, *eventData) |
|
||||
virtual bool OnInvalidateCaches() |
|
||||
|
|
||||
static void __cdecl FilterDeinit (VDXFilterActivation *fa, *ff) |
|
||||
static int __cdecl FilterRun ( VDXFilterActivation *fa, *ff) |
|
||||
static long __cdecl FilterParam (VDXFilterActivation *fa, *ff) |
|
||||
static int __cdecl FilterConfig (VDXFilterActivation *fa, *ff, hWnd) |
|
||||
static int __cdecl FilterStart (VDXFilterActivation *fa, *ff) |
|
||||
static int __cdecl FilterEnd (VDXFilterActivation *fa, *ff) |
|
||||
static void __cdecl FilterString ( VDXFilterActivation *fa, *ff, *buf) |
|
||||
static bool __cdecl FilterScriptStr(VDXFilterActivation *fa, *, *, int) |
|
||||
static void __cdecl FilterString2 ( VDXFilterActivation *fa, *ff, *buf, maxlen) |
|
||||
static int __cdecl FilterSerialize (VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
static void __cdecl FilterDeserialize (VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
static sint64 __cdecl FilterPrefetch( VDXFilterActivation *fa, *ff, frame) |
|
||||
static bool __cdecl FilterPrefetch2( VDXFilterActivation *fa, *ff, frame, *prefetcher) |
|
||||
static bool __cdecl FilterEvent( VDXFilterActivation *fa, *ff, event, *eventData) |
|
||||
|
|
||||
# member variables |
|
||||
VDXFilterActivation *fa |
|
||||
VDXFilterFunctions *ff |
|
||||
|
|
||||
static VDXScriptFunctionDef sScriptMethods[] |
|
||||
|
|
||||
protected: |
|
||||
void SafePrintf(char *buf, maxbuf, *format, ...) |
|
||||
|
|
||||
|
|
||||
#####################################/ |
|
||||
# Script method support |
|
||||
# |
|
||||
# To declare a Config() script method, add |
|
||||
# |
|
||||
# VDXVF_DECLARE_SCRIPT_METHODS() |
|
||||
# |
|
||||
# to the public portion of your class definition, then add a method |
|
||||
# table at namespace scope: |
|
||||
# |
|
||||
# VDXVF_BEGIN_SCRIPT_METHODS(SpatialForegroundRemoverFilter) |
|
||||
# VDXVF_DEFINE_SCRIPT_METHOD(SpatialForegroundRemoverFilter, ScriptConfig, "iii") |
|
||||
# VDXVF_END_SCRIPT_METHODS() |
|
||||
# |
|
||||
# Use VDXVF_DEFINE_SCRIPT_METHOD() for the first method, then |
|
||||
# VDXVF_DEFINE_SCRIPT_METHOD2() for any overloads. |
|
||||
|
|
||||
#define VDXVF_DECLARE_SCRIPT_METHODS() static VDXScriptFunctionDef sScriptMethods[] |
|
||||
|
|
||||
#define VDXVF_BEGIN_SCRIPT_METHODS(klass) VDXScriptFunctionDef klass.sScriptMethods[] =#define VDXVF_DEFINE_SCRIPT_METHOD(klass, method, args) { (VDXScriptFunctionPtr)VDXVideoFilterScriptAdapter<klass, &klass.method>.AdaptFn, "Config", "0" args }, |
|
||||
#define VDXVF_DEFINE_SCRIPT_METHOD2(klass, method, args) { (VDXScriptFunctionPtr)VDXVideoFilterScriptAdapter<klass, &klass.method>.AdaptFn, NULL, "0" args }, |
|
||||
#define VDXVF_END_SCRIPT_METHODS() { NULL } |
|
||||
|
|
||||
extern char VDXVideoFilterConfigureOverloadTest(bool (VDXVideoFilter.*)(VDXHWND)) |
|
||||
extern double VDXVideoFilterConfigureOverloadTest(...) |
|
||||
extern char VDXVideoFilterPrefetchOverloadTest(sint64 (VDXVideoFilter.*)(sint64)) |
|
||||
extern double VDXVideoFilterPrefetchOverloadTest(...) |
|
||||
extern char VDXVideoFilterPrefetch2OverloadTest(bool (VDXVideoFilter.*)(sint64, *)) |
|
||||
extern double VDXVideoFilterPrefetch2OverloadTest(...) |
|
||||
|
|
||||
template<class T, void (T.*T_Method)(IVDXScriptInterpreter *, *, int)> |
|
||||
class VDXVideoFilterScriptAdapter |
|
||||
public: |
|
||||
static void AdaptFn(IVDXScriptInterpreter *isi, *fa0, *argv, argc) |
|
||||
VDXFilterActivation *fa = (VDXFilterActivation *)fa0 |
|
||||
VDXVideoFilter *base = *(VDXVideoFilter **)fa.filter_data |
|
||||
(static_cast<T *>(base).*T_Method)(isi, argv, argc) |
|
||||
|
|
||||
|
|
||||
|
|
||||
template<class T> |
|
||||
class VDXVideoFilterScriptObjectAdapter |
|
||||
public: |
|
||||
static VDXScriptObject sScriptObject |
|
||||
|
|
||||
|
|
||||
template<class T> |
|
||||
VDXScriptObject VDXVideoFilterScriptObjectAdapter<T>.sScriptObject = |
|
||||
NULL, (T.sScriptMethods == VDXVideoFilter.sScriptMethods) ? NULL : (VDXScriptFunctionDef *)static_cast< VDXScriptFunctionDef *>(T.sScriptMethods), NULL |
|
||||
|
|
||||
|
|
||||
#####################################/ |
|
||||
#/ \class VDXVideoFilterDefinition |
|
||||
#/ |
|
||||
#/ This template creates the FilterDefinition structure for you based on |
|
||||
#/ your filter class. |
|
||||
#/ |
|
||||
template<class T> |
|
||||
class VDXVideoFilterDefinition : public VDXFilterDefinition |
|
||||
public: |
|
||||
VDXVideoFilterDefinition( char *pszAuthor, *pszName, *pszDescription) |
|
||||
_next = NULL |
|
||||
_prev = NULL |
|
||||
_module = NULL |
|
||||
|
|
||||
name = pszName |
|
||||
desc = pszDescription |
|
||||
maker = pszAuthor |
|
||||
private_data = NULL |
|
||||
inst_data_size = sizeof(T) + sizeof(VDXVideoFilter *) |
|
||||
|
|
||||
initProc = FilterInit |
|
||||
deinitProc = T.FilterDeinit |
|
||||
runProc = T.FilterRun |
|
||||
paramProc = T.FilterParam |
|
||||
configProc = sizeof(VDXVideoFilterConfigureOverloadTest(&T.Configure)) > 1 ? T.FilterConfig : NULL |
|
||||
stringProc = T.FilterString |
|
||||
startProc = T.FilterStart |
|
||||
endProc = T.FilterEnd |
|
||||
|
|
||||
script_obj = T.sScriptMethods ? const_cast<VDXScriptObject *>(&VDXVideoFilterScriptObjectAdapter<T>.sScriptObject) : 0 |
|
||||
fssProc = T.FilterScriptStr |
|
||||
|
|
||||
stringProc2 = T.FilterString2 |
|
||||
serializeProc = T.FilterSerialize |
|
||||
deserializeProc = T.FilterDeserialize |
|
||||
copyProc = FilterCopy |
|
||||
copyProc2 = FilterCopy2 |
|
||||
|
|
||||
prefetchProc = sizeof(VDXVideoFilterPrefetchOverloadTest(&T.Prefetch)) > 1 ? T.FilterPrefetch : NULL |
|
||||
prefetchProc2 = sizeof(VDXVideoFilterPrefetch2OverloadTest(&T.Prefetch2)) > 1 or sizeof(VDXVideoFilterPrefetchOverloadTest(&T.Prefetch)) > 1 ? T.FilterPrefetch2 : NULL |
|
||||
|
|
||||
eventProc = T.FilterEvent |
|
||||
|
|
||||
|
|
||||
private: |
|
||||
static int __cdecl FilterInit (VDXFilterActivation *fa, *ff) |
|
||||
T *pThis = new((char *)fa.filter_data + sizeof(VDXVideoFilter *)) T |
|
||||
*(VDXVideoFilter **)fa.filter_data = static_cast<VDXVideoFilter *>(pThis) |
|
||||
|
|
||||
pThis.SetHooks(fa, ff) |
|
||||
|
|
||||
try |
|
||||
if not pThis.Init(): |
|
||||
pThis.~T() |
|
||||
return 1 |
|
||||
|
|
||||
|
|
||||
return 0 |
|
||||
|
|
||||
catch(...) |
|
||||
pThis.~T() |
|
||||
throw |
|
||||
|
|
||||
|
|
||||
|
|
||||
static void __cdecl FilterCopy (VDXFilterActivation *fa, *ff, *dst) |
|
||||
T *p = new((char *)dst + sizeof(VDXVideoFilter *)) T(*static_cast<T *>(*reinterpret_cast<VDXVideoFilter **>(fa.filter_data))) |
|
||||
p.ff = ff |
|
||||
*(VDXVideoFilter **)dst = p |
|
||||
|
|
||||
|
|
||||
static void __cdecl FilterCopy2 (VDXFilterActivation *fa, *ff, *dst, *fanew, *ffnew) |
|
||||
T *p = new((char *)dst + sizeof(VDXVideoFilter *)) T(*static_cast<T *>(*reinterpret_cast<VDXVideoFilter **>(fa.filter_data))) |
|
||||
p.ff = ffnew |
|
||||
p.fa = fanew |
|
||||
*(VDXVideoFilter **)dst = p |
|
||||
|
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,46 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_VDXFRAME_VIDEOFILTERDIALOG_H |
|
||||
#define f_VD2_VDXFRAME_VIDEOFILTERDIALOG_H |
|
||||
|
|
||||
#include <windows.h> |
|
||||
|
|
||||
class VDXVideoFilterDialog |
|
||||
public: |
|
||||
VDXVideoFilterDialog() |
|
||||
|
|
||||
protected: |
|
||||
HWND mhdlg |
|
||||
|
|
||||
LRESULT Show(HINSTANCE hInst, templName, parent) |
|
||||
LRESULT Show(HINSTANCE hInst, templName, parent) |
|
||||
HWND ShowModeless(HINSTANCE hInst, templName, parent) |
|
||||
HWND ShowModeless(HINSTANCE hInst, templName, parent) |
|
||||
|
|
||||
static INT_PTR CALLBACK StaticDlgProc(HWND hdlg, msg, wParam, lParam) |
|
||||
virtual INT_PTR DlgProc(UINT msg, wParam, lParam) |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,83 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_VDXFRAME_VIDEOFILTERENTRY_H |
|
||||
#define f_VD2_VDXFRAME_VIDEOFILTERENTRY_H |
|
||||
|
|
||||
#include <vd2/plugin/vdvideofilt.h> |
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma once |
|
||||
#endif |
|
||||
|
|
||||
struct VDXFilterModule |
|
||||
struct VDXFilterFunctions |
|
||||
struct VDXFilterDefinition |
|
||||
|
|
||||
#######################################/ |
|
||||
#/ Video filter module entry point declaration macros |
|
||||
#/ |
|
||||
#/ To declare the module init and deinit functions: |
|
||||
#/ |
|
||||
#/ VDX_DECLARE_VFMODULE() |
|
||||
#/ |
|
||||
#/ By default self declares the module as requiring copy contructor support |
|
||||
#/ (V9 / VirtualDub 1.4.12). If you need to declare a different minimum |
|
||||
#/ version, use: |
|
||||
#/ |
|
||||
#/ VDX_DECLARE_VFMODULE_APIVER(version) |
|
||||
#/ |
|
||||
#define VDX_DECLARE_VFMODULE() VDX_DECLARE_VFMODULE_APIVER(VIRTUALDUB_FILTERDEF_COMPATIBLE_COPYCTOR) |
|
||||
#define VDX_DECLARE_VFMODULE_APIVER(apiver) \ |
|
||||
extern "C" __declspec(dllexport) int __cdecl VirtualdubFilterModuleInit2(struct VDXFilterModule *fm, *ff, vdfd_ver, vdfd_compat) { \ |
|
||||
return VDXVideoFilterModuleInit2(fm, ff, vdfd_ver, vdfd_compat, (apiver)); \ |
|
||||
} \ |
|
||||
\ |
|
||||
extern "C" __declspec(dllexport) void __cdecl VirtualdubFilterModuleDeinit(struct VDXFilterModule *fm, *ff) { \ |
|
||||
VDXVideoFilterModuleDeinit(fm, ff); \ |
|
||||
|
|
||||
|
|
||||
#######################################/ |
|
||||
#/ Video filter declaration macros |
|
||||
#/ |
|
||||
#/ To declare video filters, the following pattern: |
|
||||
#/ |
|
||||
#/ VDX_DECLARE_VIDEOFILTERS_BEGIN() |
|
||||
#/ VDX_DECLARE_VIDEOFILTER(definitionSymbolName) |
|
||||
#/ VDX_DECLARE_VIDEOFILTERS_END() |
|
||||
#/ |
|
||||
#/ Each entry points to a variable of type VDXFilterDefinition. Note that these must |
|
||||
#/ be declared as _non-const_ for compatibility with older versions of VirtualDub. |
|
||||
#/ Video filters declared self way are automatically registered by the module init |
|
||||
#/ routine. |
|
||||
#/ |
|
||||
#define VDX_DECLARE_VIDEOFILTERS_BEGIN() VDXFilterDefinition *VDXGetVideoFilterDefinition(int index)#define VDX_DECLARE_VIDEOFILTER(defVarName) if (not index--) { extern VDXFilterDefinition defVarName; return &defVarName; |
|
||||
#define VDX_DECLARE_VIDEOFILTERS_END() return NULL; \ |
|
||||
|
|
||||
def VDXVideoFilterModuleInit2(self, VDXFilterModule *fm, *ff, vdfd_ver, vdfd_compat, ver_compat_target): |
|
||||
def VDXVideoFilterModuleDeinit(self, VDXFilterModule *fm, *ff): |
|
||||
|
|
||||
def VDXGetVideoFilterAPIVersion(self): |
|
||||
|
|
||||
#endif |
|
@ -1,148 +0,0 @@ |
|||||
#ifndef f_VD2_PLUGIN_VDAUDIOFILT_H |
|
||||
#define f_VD2_PLUGIN_VDAUDIOFILT_H |
|
||||
|
|
||||
#####################################/ |
|
||||
# |
|
||||
# Audio filter support |
|
||||
|
|
||||
struct VDAudioFilterDefinition |
|
||||
struct VDXWaveFormat |
|
||||
struct VDPluginCallbacks |
|
||||
|
|
||||
enum |
|
||||
kVDPlugin_AudioAPIVersion = 2 |
|
||||
|
|
||||
|
|
||||
struct VDAudioFilterPin |
|
||||
unsigned mGranularity; # Block size a filter reads/writes self pin. |
|
||||
unsigned mDelay; # Delay in samples on self input. |
|
||||
unsigned mBufferSize; # The size, samples, the buffer. |
|
||||
unsigned mCurrentLevel; # The number of samples currently in the buffer. |
|
||||
sint64 mLength; # Approximate length of self stream in us. |
|
||||
VDXWaveFormat *mpFormat |
|
||||
bool mbVBR |
|
||||
bool mbEnded |
|
||||
char _pad[2] |
|
||||
void *mpBuffer |
|
||||
unsigned mSamplesWritten; # The number of samples just written to the buffer. |
|
||||
unsigned mAvailSpace; # Available room pointed to by mpBuffer (output pins only). |
|
||||
|
|
||||
uint32 (VDAPIENTRY *mpReadProc)(VDAudioFilterPin *pPin, *dst, samples, bAllowFill, format) |
|
||||
|
|
||||
# These helpers are non-virtual inlines and are compiled into filters. |
|
||||
uint32 Read(void *dst, samples, bAllowFill, format) |
|
||||
return mpReadProc(self, dst, samples, bAllowFill, format) |
|
||||
|
|
||||
|
|
||||
|
|
||||
struct VDAudioFilterContext |
|
||||
|
|
||||
struct VDAudioFilterCallbacks |
|
||||
VDXWaveFormat *(VDAPIENTRY *AllocPCMWaveFormat)(unsigned sampling_rate, channels, bits, bFloat) |
|
||||
VDXWaveFormat *(VDAPIENTRY *AllocCustomWaveFormat)(unsigned extra_size) |
|
||||
VDXWaveFormat *(VDAPIENTRY *CopyWaveFormat)( VDXWaveFormat *) |
|
||||
void (VDAPIENTRY *FreeWaveFormat)( VDXWaveFormat *) |
|
||||
void (VDAPIENTRY *Wake)( VDAudioFilterContext *pContext) |
|
||||
|
|
||||
|
|
||||
struct VDAudioFilterContext |
|
||||
void *mpFilterData |
|
||||
VDAudioFilterPin **mpInputs |
|
||||
VDAudioFilterPin **mpOutputs |
|
||||
IVDPluginCallbacks *mpServices |
|
||||
VDAudioFilterCallbacks *mpAudioCallbacks |
|
||||
VDAudioFilterDefinition *mpDefinition |
|
||||
uint32 mAPIVersion |
|
||||
uint32 mInputSamples; # Number of input samples available on all pins. |
|
||||
uint32 mInputGranules; # Number of input granules available on all pins. |
|
||||
uint32 mInputsEnded; # Number of inputs that have ended. |
|
||||
uint32 mOutputSamples; # Number of output sample spaces available on all pins. |
|
||||
uint32 mOutputGranules; # Number of output granule spaces available on all pins. |
|
||||
uint32 mCommonSamples; # Number of input samples and output sample spaces. |
|
||||
uint32 mCommonGranules; # Number of input and output granules. |
|
||||
|
|
||||
|
|
||||
# This structure is intentionally identical to WAVEFORMATEX, one |
|
||||
# exception -- mExtraSize is *always* present, for PCM. |
|
||||
|
|
||||
struct VDXWaveFormat |
|
||||
enum { kTagPCM = 1 |
|
||||
|
|
||||
uint16 mTag |
|
||||
uint16 mChannels |
|
||||
uint32 mSamplingRate |
|
||||
uint32 mDataRate |
|
||||
uint16 mBlockSize |
|
||||
uint16 mSampleBits |
|
||||
uint16 mExtraSize |
|
||||
|
|
||||
|
|
||||
enum |
|
||||
kVFARun_OK = 0, |
|
||||
kVFARun_Finished = 1, |
|
||||
kVFARun_InternalWork = 2, |
|
||||
|
|
||||
kVFAPrepare_OK = 0, |
|
||||
kVFAPrepare_BadFormat = 1 |
|
||||
|
|
||||
|
|
||||
enum |
|
||||
kVFARead_Native = 0, |
|
||||
kVFARead_PCM8 = 1, |
|
||||
kVFARead_PCM16 = 2, |
|
||||
kVFARead_PCM32F = 3 |
|
||||
|
|
||||
|
|
||||
typedef void * (VDAPIENTRY *VDAudioFilterExtProc )( VDAudioFilterContext *pContext, *pInterfaceName) |
|
||||
typedef uint32 (VDAPIENTRY *VDAudioFilterRunProc )( VDAudioFilterContext *pContext) |
|
||||
typedef sint64 (VDAPIENTRY *VDAudioFilterSeekProc )( VDAudioFilterContext *pContext, microsecs) |
|
||||
typedef uint32 (VDAPIENTRY *VDAudioFilterPrepareProc )( VDAudioFilterContext *pContext) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterStartProc )( VDAudioFilterContext *pContext) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterStopProc )( VDAudioFilterContext *pContext) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterInitProc )( VDAudioFilterContext *pContext) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterDestroyProc )( VDAudioFilterContext *pContext) |
|
||||
typedef unsigned (VDAPIENTRY *VDAudioFilterSuspendProc )( VDAudioFilterContext *pContext, *dst, size) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterResumeProc )( VDAudioFilterContext *pContext, *src, size) |
|
||||
typedef unsigned (VDAPIENTRY *VDAudioFilterGetParamProc )( VDAudioFilterContext *pContext, idx, *dst, size) |
|
||||
typedef void (VDAPIENTRY *VDAudioFilterSetParamProc )( VDAudioFilterContext *pContext, idx, *src, variant_count) |
|
||||
typedef bool (VDAPIENTRY *VDAudioFilterConfigProc )( VDAudioFilterContext *pContext, HWND__ *hwnd) |
|
||||
|
|
||||
enum |
|
||||
kVFAF_Zero = 0, |
|
||||
kVFAF_HasConfig = 1, # Filter has a configuration dialog. |
|
||||
kVFAF_SerializedIO = 2, # Filter must execute in the serialized I/O thread. |
|
||||
|
|
||||
kVFAF_Max = 0xFFFFFFFF, |
|
||||
|
|
||||
|
|
||||
struct VDAudioFilterVtbl |
|
||||
uint32 mSize |
|
||||
VDAudioFilterDestroyProc mpDestroy |
|
||||
VDAudioFilterPrepareProc mpPrepare |
|
||||
VDAudioFilterStartProc mpStart |
|
||||
VDAudioFilterStopProc mpStop |
|
||||
VDAudioFilterRunProc mpRun |
|
||||
VDAudioFilterSeekProc mpSeek |
|
||||
VDAudioFilterSuspendProc mpSuspend |
|
||||
VDAudioFilterResumeProc mpResume |
|
||||
VDAudioFilterGetParamProc mpGetParam |
|
||||
VDAudioFilterSetParamProc mpSetParam |
|
||||
VDAudioFilterConfigProc mpConfig |
|
||||
VDAudioFilterExtProc mpExt |
|
||||
|
|
||||
|
|
||||
struct VDAudioFilterDefinition |
|
||||
uint32 mSize; # size of self structure in bytes |
|
||||
uint32 mFlags |
|
||||
|
|
||||
uint32 mFilterDataSize |
|
||||
uint32 mInputPins |
|
||||
uint32 mOutputPins |
|
||||
|
|
||||
VDXPluginConfigEntry *mpConfigInfo |
|
||||
|
|
||||
VDAudioFilterInitProc mpInit |
|
||||
VDAudioFilterVtbl *mpVtbl |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,284 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Plugin headers |
|
||||
# Copyright (C) 1998-2007 Avery Lee, Rights Reserved. |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_PLUGIN_VDINPUTDRIVER_H |
|
||||
#define f_VD2_PLUGIN_VDINPUTDRIVER_H |
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma once |
|
||||
#pragma pack(push, 8) |
|
||||
#endif |
|
||||
|
|
||||
#include "vdplugin.h" |
|
||||
|
|
||||
#/ Unsigned 32-bit fraction. |
|
||||
struct VDXFraction |
|
||||
uint32 mNumerator |
|
||||
uint32 mDenominator |
|
||||
|
|
||||
|
|
||||
typedef struct VDXHWNDStruct *VDXHWND |
|
||||
typedef struct VDXBITMAPINFOHEADERStruct |
|
||||
enum { kCompressionRGB = 0 |
|
||||
uint32 mSize |
|
||||
sint32 mWidth |
|
||||
sint32 mHeight |
|
||||
uint16 mPlanes |
|
||||
uint16 mBitCount |
|
||||
uint32 mCompression |
|
||||
uint32 mSizeImage |
|
||||
sint32 mXPelsPerMeter |
|
||||
sint32 mYPelsPerMeter |
|
||||
uint32 mClrUsed |
|
||||
uint32 mClrImportant |
|
||||
} VDXBITMAPINFOHEADER |
|
||||
|
|
||||
typedef struct VDXWAVEFORMATEXStruct |
|
||||
enum { kFormatPCM = 1 |
|
||||
uint16 mFormatTag |
|
||||
uint16 mChannels |
|
||||
uint32 mSamplesPerSec |
|
||||
uint32 mAvgBytesPerSec |
|
||||
uint16 mBlockAlign |
|
||||
uint16 mBitsPerSample |
|
||||
uint16 mExtraSize |
|
||||
} VDXWAVEFORMATEX |
|
||||
|
|
||||
struct VDXStreamSourceInfo |
|
||||
VDXFraction mSampleRate |
|
||||
sint64 mSampleCount |
|
||||
VDXFraction mPixelAspectRatio |
|
||||
|
|
||||
|
|
||||
# V3+ (1.7.X) only |
|
||||
struct VDXStreamSourceInfoV3 |
|
||||
VDXStreamSourceInfo mInfo |
|
||||
|
|
||||
enum |
|
||||
kFlagVariableSizeSamples = 0x00000001 |
|
||||
|
|
||||
|
|
||||
uint32 mFlags |
|
||||
uint32 mfccHandler; #/< If non-zero, the FOURCC of a codec handler that should be preferred. |
|
||||
|
|
||||
|
|
||||
class IVDXStreamSource : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 's', 't', 's') |
|
||||
|
|
||||
virtual void VDXAPIENTRY GetStreamSourceInfo(VDXStreamSourceInfo&) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY Read(sint64 lStart, lCount, *lpBuffer, cbBuffer, *lBytesRead, *lSamplesRead) = 0 |
|
||||
|
|
||||
virtual void * VDXAPIENTRY GetDirectFormat() = 0 |
|
||||
virtual int VDXAPIENTRY GetDirectFormatLen() = 0 |
|
||||
|
|
||||
enum ErrorMode |
|
||||
kErrorModeReportAll = 0, |
|
||||
kErrorModeConceal, |
|
||||
kErrorModeDecodeAnyway, |
|
||||
kErrorModeCount |
|
||||
|
|
||||
|
|
||||
virtual ErrorMode VDXAPIENTRY GetDecodeErrorMode() = 0 |
|
||||
virtual void VDXAPIENTRY SetDecodeErrorMode(ErrorMode mode) = 0 |
|
||||
virtual bool VDXAPIENTRY IsDecodeErrorModeSupported(ErrorMode mode) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY IsVBR() = 0 |
|
||||
virtual sint64 VDXAPIENTRY TimeToPositionVBR(sint64 us) = 0 |
|
||||
virtual sint64 VDXAPIENTRY PositionToTimeVBR(sint64 samples) = 0 |
|
||||
|
|
||||
|
|
||||
# V3+ (1.7.X) |
|
||||
class IVDXStreamSourceV3 : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 's', 't', '2') |
|
||||
|
|
||||
virtual void VDXAPIENTRY GetStreamSourceInfoV3(VDXStreamSourceInfoV3&) = 0 |
|
||||
|
|
||||
|
|
||||
class IVDXVideoDecoderModel : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'v', 'd', 'm') |
|
||||
|
|
||||
virtual void VDXAPIENTRY Reset() = 0 |
|
||||
virtual void VDXAPIENTRY SetDesiredFrame(sint64 frame_num) = 0 |
|
||||
virtual sint64 VDXAPIENTRY GetNextRequiredSample(bool& is_preroll) = 0 |
|
||||
virtual int VDXAPIENTRY GetRequiredCount() = 0 |
|
||||
|
|
||||
|
|
||||
class IVDXVideoDecoder : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'v', 'd', 'e') |
|
||||
|
|
||||
virtual void * VDXAPIENTRY DecodeFrame( void *inputBuffer, data_len, is_preroll, sampleNumber, targetFrame) = 0 |
|
||||
virtual uint32 VDXAPIENTRY GetDecodePadding() = 0 |
|
||||
virtual void VDXAPIENTRY Reset() = 0 |
|
||||
virtual bool VDXAPIENTRY IsFrameBufferValid() = 0 |
|
||||
virtual VDXPixmap& VDXAPIENTRY GetFrameBuffer() = 0 |
|
||||
virtual bool VDXAPIENTRY SetTargetFormat(int format, useDIBAlignment) = 0 |
|
||||
virtual bool VDXAPIENTRY SetDecompressedFormat( VDXBITMAPINFOHEADER *pbih) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY IsDecodable(sint64 sample_num) = 0 |
|
||||
virtual void * VDXAPIENTRY GetFrameBufferBase() = 0 |
|
||||
|
|
||||
|
|
||||
enum VDXVideoFrameType |
|
||||
kVDXVFT_Independent, |
|
||||
kVDXVFT_Predicted, |
|
||||
kVDXVFT_Bidirectional, |
|
||||
kVDXVFT_Null, |
|
||||
|
|
||||
|
|
||||
struct VDXVideoFrameInfo |
|
||||
char mTypeChar |
|
||||
uint8 mFrameType |
|
||||
sint64 mBytePosition |
|
||||
|
|
||||
|
|
||||
struct VDXVideoSourceInfo |
|
||||
enum DecoderModel |
|
||||
kDecoderModelCustom, #/< A custom decoder model is provided. |
|
||||
kDecoderModelDefaultIP #/< Use the default I/P decoder model. |
|
||||
|
|
||||
|
|
||||
enum Flags |
|
||||
kFlagNone = 0, |
|
||||
kFlagKeyframeOnly = 0x00000001, |
|
||||
kFlagAll = 0xFFFFFFFF |
|
||||
|
|
||||
|
|
||||
public: |
|
||||
uint32 mFlags |
|
||||
uint32 mWidth |
|
||||
uint32 mHeight |
|
||||
uint8 mDecoderModel |
|
||||
uint8 unused[3] |
|
||||
|
|
||||
|
|
||||
class IVDXVideoSource : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'v', 'd', 's') |
|
||||
|
|
||||
virtual void VDXAPIENTRY GetVideoSourceInfo(VDXVideoSourceInfo& info) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY CreateVideoDecoderModel(IVDXVideoDecoderModel **) = 0 |
|
||||
virtual bool VDXAPIENTRY CreateVideoDecoder(IVDXVideoDecoder **) = 0 |
|
||||
|
|
||||
virtual void VDXAPIENTRY GetSampleInfo(sint64 sample_num, frameInfo) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY IsKey(sint64 sample_num) = 0 |
|
||||
|
|
||||
virtual sint64 VDXAPIENTRY GetFrameNumberForSample(sint64 sample_num) = 0 |
|
||||
virtual sint64 VDXAPIENTRY GetSampleNumberForFrame(sint64 frame_num) = 0 |
|
||||
virtual sint64 VDXAPIENTRY GetRealFrame(sint64 frame_num) = 0 |
|
||||
|
|
||||
virtual sint64 VDXAPIENTRY GetSampleBytePosition(sint64 sample_num) = 0 |
|
||||
|
|
||||
|
|
||||
struct VDXAudioSourceInfo |
|
||||
public: |
|
||||
uint32 mFlags |
|
||||
|
|
||||
|
|
||||
class IVDXAudioSource : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'a', 'd', 's') |
|
||||
|
|
||||
virtual void VDXAPIENTRY GetAudioSourceInfo(VDXAudioSourceInfo& info) = 0 |
|
||||
|
|
||||
|
|
||||
class IVDXInputOptions : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'i', 'o', 'p') |
|
||||
|
|
||||
virtual uint32 VDXAPIENTRY Write(void *buf, buflen) = 0 |
|
||||
|
|
||||
|
|
||||
class IVDXInputFile : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'i', 'f', 'l') |
|
||||
|
|
||||
virtual bool VDXAPIENTRY PromptForOptions(VDXHWND, **ppOptions) = 0 |
|
||||
virtual bool VDXAPIENTRY CreateOptions( void *buf, len, **ppOptions) = 0 |
|
||||
|
|
||||
virtual void VDXAPIENTRY Init( wchar_t *path, *options) = 0 |
|
||||
virtual bool VDXAPIENTRY Append( wchar_t *path) = 0 |
|
||||
|
|
||||
virtual void VDXAPIENTRY DisplayInfo(VDXHWND hwndParent) = 0 |
|
||||
|
|
||||
virtual bool VDXAPIENTRY GetVideoSource(int index, **ppVS) = 0 |
|
||||
virtual bool VDXAPIENTRY GetAudioSource(int index, **ppAS) = 0 |
|
||||
|
|
||||
|
|
||||
#######################################/ |
|
||||
# IVDXInputFileDriver |
|
||||
# |
|
||||
class IVDXInputFileDriver : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'i', 'f', 'd') |
|
||||
|
|
||||
virtual int VDXAPIENTRY DetectBySignature( void *pHeader, nHeaderSize, *pFooter, nFooterSize, nFileSize) = 0 |
|
||||
virtual bool VDXAPIENTRY CreateInputFile(uint32 flags, **ppFile) = 0 |
|
||||
|
|
||||
|
|
||||
struct VDXInputDriverContext |
|
||||
uint32 mAPIVersion |
|
||||
IVDPluginCallbacks *mpCallbacks |
|
||||
|
|
||||
|
|
||||
typedef bool (VDXAPIENTRY *VDXInputDriverCreateProc)( VDXInputDriverContext *pContext, **) |
|
||||
|
|
||||
struct VDXInputDriverDefinition |
|
||||
enum |
|
||||
kFlagNone = 0x00000000, |
|
||||
kFlagSupportsVideo = 0x00000001, |
|
||||
kFlagSupportsAudio = 0x00000002, |
|
||||
kFlagCustomSignature = 0x00010000, |
|
||||
kFlagAll = 0xFFFFFFFF |
|
||||
|
|
||||
uint32 mSize; # size of self structure in bytes |
|
||||
uint32 mFlags |
|
||||
sint32 mPriority |
|
||||
uint32 mSignatureLength |
|
||||
void *mpSignature |
|
||||
wchar_t *mpFilenameDetectPattern |
|
||||
wchar_t *mpFilenamePattern |
|
||||
wchar_t *mpDriverTagName |
|
||||
|
|
||||
VDXInputDriverCreateProc mpCreate |
|
||||
|
|
||||
|
|
||||
enum |
|
||||
# V1 (1.7.4.28204): Initial version |
|
||||
# V2 (1.7.5): Default I/P frame model fixed. |
|
||||
kVDXPlugin_InputDriverAPIVersion = 2 |
|
||||
|
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma pack(pop) |
|
||||
#endif |
|
||||
|
|
||||
#endif |
|
@ -1,206 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Plugin headers |
|
||||
# Copyright (C) 1998-2007 Avery Lee, Rights Reserved. |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_PLUGIN_VDPLUGIN_H |
|
||||
#define f_VD2_PLUGIN_VDPLUGIN_H |
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma once |
|
||||
#pragma pack(push, 8) |
|
||||
#endif |
|
||||
|
|
||||
#include <stddef.h> |
|
||||
|
|
||||
# Copied from <vd2/system/vdtypes.h>. Must be in sync. |
|
||||
#ifndef VD_STANDARD_TYPES_DECLARED |
|
||||
#if defined(_MSC_VER) |
|
||||
typedef signed __int64 sint64 |
|
||||
typedef unsigned __int64 uint64 |
|
||||
#elif defined(__GNUC__) |
|
||||
typedef signed long long sint64 |
|
||||
typedef unsigned long long uint64 |
|
||||
#endif |
|
||||
typedef signed int sint32 |
|
||||
typedef unsigned int uint32 |
|
||||
typedef signed short sint16 |
|
||||
typedef unsigned short uint16 |
|
||||
typedef signed char sint8 |
|
||||
typedef unsigned char uint8 |
|
||||
|
|
||||
typedef sint64 int64 |
|
||||
typedef sint32 int32 |
|
||||
typedef sint16 int16 |
|
||||
typedef sint8 int8 |
|
||||
|
|
||||
typedef ptrdiff_t sintptr |
|
||||
typedef size_t uintptr |
|
||||
#endif |
|
||||
|
|
||||
#ifndef VDXAPIENTRY |
|
||||
#define VDXAPIENTRY __stdcall |
|
||||
#endif |
|
||||
|
|
||||
#ifndef VDXAPIENTRYV |
|
||||
#define VDXAPIENTRYV __cdecl |
|
||||
#endif |
|
||||
|
|
||||
enum VDXCPUFeatureFlags |
|
||||
kVDXCPUF_CPUID = 0x00000001, |
|
||||
kVDXCPUF_MMX = 0x00000004, |
|
||||
kVDXCPUF_ISSE = 0x00000008, |
|
||||
kVDXCPUF_SSE = 0x00000010, |
|
||||
kVDXCPUF_SSE2 = 0x00000020, |
|
||||
kVDXCPUF_3DNOW = 0x00000040, |
|
||||
kVDXCPUF_3DNOW_EXT = 0x00000080, |
|
||||
kVDXCPUF_SSE3 = 0x00000100, |
|
||||
kVDXCPUF_SSSE3 = 0x00000200 |
|
||||
|
|
||||
|
|
||||
enum |
|
||||
kVDXPlugin_APIVersion = 10 |
|
||||
|
|
||||
|
|
||||
|
|
||||
enum |
|
||||
kVDXPluginType_Video, # Updated video filter API is not yet complete. |
|
||||
kVDXPluginType_Audio, |
|
||||
kVDXPluginType_Input |
|
||||
|
|
||||
|
|
||||
struct VDXPluginInfo |
|
||||
uint32 mSize; # size of self structure in bytes |
|
||||
wchar_t *mpName |
|
||||
wchar_t *mpAuthor |
|
||||
wchar_t *mpDescription |
|
||||
uint32 mVersion; # (major<<24) + (minor<<16) + build. 1.4.1000 would be 0x010403E8. |
|
||||
uint32 mType |
|
||||
uint32 mFlags |
|
||||
uint32 mAPIVersionRequired |
|
||||
uint32 mAPIVersionUsed |
|
||||
uint32 mTypeAPIVersionRequired |
|
||||
uint32 mTypeAPIVersionUsed |
|
||||
void * mpTypeSpecificInfo |
|
||||
|
|
||||
|
|
||||
typedef VDXPluginInfo * *(VDXAPIENTRY *tpVDXGetPluginInfo)() |
|
||||
|
|
||||
typedef VDXPluginInfo VDPluginInfo |
|
||||
typedef tpVDXGetPluginInfo tpVDPluginInfo |
|
||||
|
|
||||
class IVDXPluginCallbacks |
|
||||
public: |
|
||||
virtual void * VDXAPIENTRY GetExtendedAPI( char *pExtendedAPIName) = 0 |
|
||||
virtual void VDXAPIENTRYV SetError( char *format, ...) = 0 |
|
||||
virtual void VDXAPIENTRY SetErrorOutOfMemory() = 0 |
|
||||
virtual uint32 VDXAPIENTRY GetCPUFeatureFlags() = 0 |
|
||||
|
|
||||
|
|
||||
typedef IVDXPluginCallbacks IVDPluginCallbacks |
|
||||
|
|
||||
struct VDXPluginConfigEntry |
|
||||
enum Type |
|
||||
kTypeInvalid = 0, |
|
||||
kTypeU32 = 1, |
|
||||
kTypeS32, |
|
||||
kTypeU64, |
|
||||
kTypeS64, |
|
||||
kTypeDouble, |
|
||||
kTypeAStr, |
|
||||
kTypeWStr, |
|
||||
kTypeBlock |
|
||||
|
|
||||
|
|
||||
VDXPluginConfigEntry *next |
|
||||
|
|
||||
unsigned idx |
|
||||
uint32 type |
|
||||
wchar_t *name |
|
||||
wchar_t *label |
|
||||
wchar_t *desc |
|
||||
|
|
||||
|
|
||||
struct VDXPixmap |
|
||||
void *data |
|
||||
uint32 *palette |
|
||||
sint32 w |
|
||||
sint32 h |
|
||||
ptrdiff_t pitch |
|
||||
sint32 format |
|
||||
|
|
||||
# Auxiliary planes are always byte-per-pixel. |
|
||||
void *data2; # Cb (U) for YCbCr |
|
||||
ptrdiff_t pitch2 |
|
||||
void *data3; # Cr (V) for YCbCr |
|
||||
ptrdiff_t pitch3 |
|
||||
|
|
||||
|
|
||||
struct VDXPixmapLayout |
|
||||
ptrdiff_t data |
|
||||
uint32 *palette |
|
||||
sint32 w |
|
||||
sint32 h |
|
||||
ptrdiff_t pitch |
|
||||
sint32 format |
|
||||
|
|
||||
# Auxiliary planes are always byte-per-pixel. |
|
||||
ptrdiff_t data2; # Cb (U) for YCbCr |
|
||||
ptrdiff_t pitch2 |
|
||||
ptrdiff_t data3; # Cr (V) for YCbCr |
|
||||
ptrdiff_t pitch3 |
|
||||
|
|
||||
|
|
||||
namespace nsVDXPixmap |
|
||||
enum VDXPixmapFormat |
|
||||
kPixFormat_Null = 0, |
|
||||
kPixFormat_XRGB1555 = 5, |
|
||||
kPixFormat_RGB565 = 6, |
|
||||
kPixFormat_RGB888 = 7, |
|
||||
kPixFormat_XRGB8888 = 8, |
|
||||
kPixFormat_Y8 = 9, |
|
||||
kPixFormat_YUV422_UYVY = 10, |
|
||||
kPixFormat_YUV422_YUYV = 11, |
|
||||
kPixFormat_YUV444_Planar = 13, |
|
||||
kPixFormat_YUV422_Planar = 14, |
|
||||
kPixFormat_YUV420_Planar = 15, |
|
||||
kPixFormat_YUV411_Planar = 16, |
|
||||
kPixFormat_YUV410_Planar = 17 |
|
||||
|
|
||||
|
|
||||
|
|
||||
#define VDXMAKEFOURCC(a, b, c, d) ((uint32)(uint8)(d) + ((uint32)(uint8)(c) << 8) + ((uint32)(uint8)(b) << 16) + ((uint32)(uint8)(a) << 24)) |
|
||||
|
|
||||
class IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'u', 'n', 'k') |
|
||||
virtual int VDXAPIENTRY AddRef() = 0 |
|
||||
virtual int VDXAPIENTRY Release() = 0 |
|
||||
virtual void *VDXAPIENTRY AsInterface(uint32 iid) = 0 |
|
||||
|
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma pack(pop) |
|
||||
#endif |
|
||||
|
|
||||
#endif |
|
@ -1,549 +0,0 @@ |
|||||
# VirtualDub - Video processing and capture application |
|
||||
# Plugin headers |
|
||||
# Copyright (C) 1998-2007 Avery Lee, Rights Reserved. |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#ifndef f_VD2_PLUGIN_VDVIDEOFILT_H |
|
||||
#define f_VD2_PLUGIN_VDVIDEOFILT_H |
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma once |
|
||||
#pragma pack(push, 8) |
|
||||
#endif |
|
||||
|
|
||||
#include <stddef.h> |
|
||||
|
|
||||
#include "vdplugin.h" |
|
||||
|
|
||||
typedef struct VDXHINSTANCEStruct *VDXHINSTANCE |
|
||||
typedef struct VDXHDCStruct *VDXHDC |
|
||||
typedef struct VDXHWNDStruct *VDXHWND |
|
||||
|
|
||||
######### |
|
||||
|
|
||||
struct VDXScriptObject |
|
||||
struct VDXFilterVTbls |
|
||||
|
|
||||
######### |
|
||||
|
|
||||
enum |
|
||||
#/ Request distinct source and destination buffers. Otherwise, source and destination buffers |
|
||||
#/ alias (in-place mode). |
|
||||
FILTERPARAM_SWAP_BUFFERS = 0x00000001L, |
|
||||
|
|
||||
#/ Request an extra buffer for the previous source frame. |
|
||||
FILTERPARAM_NEEDS_LAST = 0x00000002L, |
|
||||
|
|
||||
#/ Filter supports image formats other than RGB32. Filters that support format negotiation must |
|
||||
#/ set self flag for all calls to paramProc. |
|
||||
FILTERPARAM_SUPPORTS_ALTFORMATS = 0x00000004L, |
|
||||
|
|
||||
#/ Filter requests 16 byte alignment for source and destination buffers. This guarantees that: |
|
||||
#/ |
|
||||
#/ - data and pitch fields are multiples of 16 bytes (aligned) |
|
||||
#/ - an integral number of 16 byte vectors may be read, if the last vector includes |
|
||||
#/ some bytes beyond the end of the scanline (their values are undefined) |
|
||||
#/ - an integral number of 16 byte vectors may be written, if the last vector includes |
|
||||
#/ some bytes beyong the end of the scanline (their values are ignored) |
|
||||
#/ |
|
||||
FILTERPARAM_ALIGN_SCANLINES = 0x00000008L, |
|
||||
|
|
||||
#/ Filter's output is purely a function of configuration parameters and source image data, not |
|
||||
#/ source or output frame numbers. In other words, output frames produced by a filter instance |
|
||||
#/ can be assumed to be identical images if: |
|
||||
#/ |
|
||||
#/ - the same number of source frames are prefetched |
|
||||
#/ - the same type of prefetches are performed (direct vs. non-direct) |
|
||||
#/ - the frame numbers for the two prefetch lists, in order, to identical |
|
||||
#/ source frames |
|
||||
#/ - the prefetch cookies match |
|
||||
#/ |
|
||||
#/ Enabling self flag improves the ability of the host to identify identical frames and drop them |
|
||||
#/ in preview or in the output file. |
|
||||
#/ |
|
||||
FILTERPARAM_PURE_TRANSFORM = 0x00000010L, |
|
||||
|
|
||||
#/ Filter cannot support the requested source format. Note that self sets all bits, the meaning |
|
||||
#/ of other bits is ignored. The one exception is that FILTERPARAM_SUPPORTS_ALTFORMATS is assumed |
|
||||
#/ to be implicitly set. |
|
||||
FILTERPARAM_NOT_SUPPORTED = (long)0xFFFFFFFF |
|
||||
|
|
||||
|
|
||||
#/ The filter has a delay from source to output. For instance, lag of 3 indicates that the |
|
||||
#/ filter internally buffers three frames, when it is fed frames in sequence, 0 emerges |
|
||||
#/ after frame 3 has been processed. The host attempts to correct timestamps in order to compensate. |
|
||||
#/ |
|
||||
#/ VirtualDub 1.9.1 or later: Setting self flag can have a performance penalty, it causes the host |
|
||||
#/ to request additional frames to try to produce the correct requested output frames. |
|
||||
#/ |
|
||||
#define FILTERPARAM_HAS_LAG(frames) ((int)(frames) << 16) |
|
||||
|
|
||||
#########/ |
|
||||
|
|
||||
class VDXFBitmap |
|
||||
class VDXFilterActivation |
|
||||
struct VDXFilterFunctions |
|
||||
struct VDXFilterModule |
|
||||
class IVDXVideoPrefetcher |
|
||||
|
|
||||
enum |
|
||||
kVDXVFEvent_None = 0, |
|
||||
kVDXVFEvent_InvalidateCaches = 1 |
|
||||
|
|
||||
|
|
||||
typedef int (__cdecl *VDXFilterInitProc )(VDXFilterActivation *fa, *ff) |
|
||||
typedef void (__cdecl *VDXFilterDeinitProc )(VDXFilterActivation *fa, *ff) |
|
||||
typedef int (__cdecl *VDXFilterRunProc )( VDXFilterActivation *fa, *ff) |
|
||||
typedef long (__cdecl *VDXFilterParamProc )(VDXFilterActivation *fa, *ff) |
|
||||
typedef int (__cdecl *VDXFilterConfigProc )(VDXFilterActivation *fa, *ff, hWnd) |
|
||||
typedef void (__cdecl *VDXFilterStringProc )( VDXFilterActivation *fa, *ff, *buf) |
|
||||
typedef int (__cdecl *VDXFilterStartProc )(VDXFilterActivation *fa, *ff) |
|
||||
typedef int (__cdecl *VDXFilterEndProc )(VDXFilterActivation *fa, *ff) |
|
||||
typedef bool (__cdecl *VDXFilterScriptStrProc)(VDXFilterActivation *fa, *, *, int) |
|
||||
typedef void (__cdecl *VDXFilterStringProc2 )( VDXFilterActivation *fa, *ff, *buf, maxlen) |
|
||||
typedef int (__cdecl *VDXFilterSerialize )(VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
typedef void (__cdecl *VDXFilterDeserialize )(VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
typedef void (__cdecl *VDXFilterCopy )(VDXFilterActivation *fa, *ff, *dst) |
|
||||
typedef sint64 (__cdecl *VDXFilterPrefetch )( VDXFilterActivation *fa, *ff, frame) |
|
||||
typedef void (__cdecl *VDXFilterCopy2Proc )(VDXFilterActivation *fa, *ff, *dst, *fa2, *ff2) |
|
||||
typedef bool (__cdecl *VDXFilterPrefetch2Proc)( VDXFilterActivation *fa, *ff, frame, *prefetcher) |
|
||||
typedef bool (__cdecl *VDXFilterEventProc )( VDXFilterActivation *fa, *ff, event, *eventData) |
|
||||
|
|
||||
typedef int (__cdecl *VDXFilterModuleInitProc)(VDXFilterModule *fm, *ff, vdfd_ver, vdfd_compat) |
|
||||
typedef void (__cdecl *VDXFilterModuleDeinitProc)(VDXFilterModule *fm, *ff) |
|
||||
|
|
||||
##### |
|
||||
|
|
||||
typedef void (__cdecl *VDXFilterPreviewButtonCallback)(bool fNewState, *pData) |
|
||||
typedef void (__cdecl *VDXFilterPreviewSampleCallback)(VDXFBitmap *, lFrame, lCount, *pData) |
|
||||
|
|
||||
class IVDXFilterPreview |
|
||||
public: |
|
||||
virtual void SetButtonCallback(VDXFilterPreviewButtonCallback, *)=0 |
|
||||
virtual void SetSampleCallback(VDXFilterPreviewSampleCallback, *)=0 |
|
||||
|
|
||||
virtual bool isPreviewEnabled()=0 |
|
||||
virtual void Toggle(VDXHWND)=0 |
|
||||
virtual void Display(VDXHWND, bool)=0 |
|
||||
virtual void RedoFrame()=0 |
|
||||
virtual void RedoSystem()=0 |
|
||||
virtual void UndoSystem()=0 |
|
||||
virtual void InitButton(VDXHWND)=0 |
|
||||
virtual void Close()=0 |
|
||||
virtual bool SampleCurrentFrame()=0 |
|
||||
virtual long SampleFrames()=0 |
|
||||
|
|
||||
|
|
||||
class IVDXFilterPreview2 : public IVDXFilterPreview |
|
||||
public: |
|
||||
virtual bool IsPreviewDisplayed() = 0 |
|
||||
|
|
||||
|
|
||||
class IVDXVideoPrefetcher : public IVDXUnknown |
|
||||
public: |
|
||||
enum { kIID = VDXMAKEFOURCC('X', 'v', 'p', 'f') |
|
||||
|
|
||||
#/ Request a video frame fetch from an upstream source. |
|
||||
virtual void VDXAPIENTRY PrefetchFrame(sint32 srcIndex, frame, cookie) = 0 |
|
||||
|
|
||||
#/ Request a video frame fetch from an upstream source in direct mode. |
|
||||
#/ This specifies that the output frame is the same as the input frame. |
|
||||
#/ There cannot be more than one direct fetch and there must be no standard |
|
||||
#/ fetches at the same time. There can, however, symbolic fetches. |
|
||||
virtual void VDXAPIENTRY PrefetchFrameDirect(sint32 srcIndex, frame) = 0 |
|
||||
|
|
||||
#/ Request a symbolic fetch from a source. This does not actually fetch |
|
||||
#/ any frames, marks an association from source to output. This is |
|
||||
#/ useful for indicating the approximate center of where an output derives |
|
||||
#/ in a source, if those frames aren't fetched (perhaps due to caching). |
|
||||
#/ There may be either zero or one symbolic fetch per source. |
|
||||
#/ |
|
||||
#/ If no symbolic fetches are performed, symbolic frame is assumed to |
|
||||
#/ be the rounded mean of the fetched source frames. |
|
||||
virtual void VDXAPIENTRY PrefetchFrameSymbolic(sint32 srcIndex, frame) = 0 |
|
||||
|
|
||||
|
|
||||
##### |
|
||||
|
|
||||
enum |
|
||||
# This is the highest API version supported by self header file. |
|
||||
VIRTUALDUB_FILTERDEF_VERSION = 14, |
|
||||
|
|
||||
# This is the absolute lowest API version supported by self header file. |
|
||||
# Note that V4 is rather old, to VirtualDub 1.2. |
|
||||
# Chances are you will need to declare a higher version. |
|
||||
VIRTUALDUB_FILTERDEF_COMPATIBLE = 4, |
|
||||
|
|
||||
# API V9 is a slightly saner baseline, it is the first API |
|
||||
# version that has copy constructor support. You may still need to |
|
||||
# declare a higher vdfd_compat version in your module init if you |
|
||||
# need features beyond V9 (VirtualDub 1.4.12). |
|
||||
VIRTUALDUB_FILTERDEF_COMPATIBLE_COPYCTOR = 9 |
|
||||
|
|
||||
|
|
||||
|
|
||||
# v3: added lCurrentSourceFrame to FrameStateInfo |
|
||||
# v4 (1.2): lots of additions (VirtualDub 1.2) |
|
||||
# v5 (1.3d): lots of bugfixes - stretchblt bilinear, non-zero startproc |
|
||||
# v6 (1.4): added error handling functions |
|
||||
# v7 (1.4d): added frame lag, handling |
|
||||
# v8 (1.4.11): added string2 proc |
|
||||
# v9 (1.4.12): added (working) copy constructor |
|
||||
# v10 (1.5.10): added preview flag |
|
||||
# v11 (1.7.0): guaranteed src structure setup before configProc; added IVDFilterPreview2 |
|
||||
# v12 (1.8.0): support for frame alteration |
|
||||
# v13 (1.8.2): added mOutputFrame field to VDXFilterStateInfo |
|
||||
# v14 (1.9.1): added copyProc2, prefetchProc2, input/output frame arrays |
|
||||
|
|
||||
struct VDXFilterDefinition |
|
||||
void *_next; # deprecated - set to NULL |
|
||||
void *_prev; # deprecated - set to NULL |
|
||||
void *_module; # deprecated - set to NULL |
|
||||
|
|
||||
char * name |
|
||||
char * desc |
|
||||
char * maker |
|
||||
void * private_data |
|
||||
int inst_data_size |
|
||||
|
|
||||
VDXFilterInitProc initProc |
|
||||
VDXFilterDeinitProc deinitProc |
|
||||
VDXFilterRunProc runProc |
|
||||
VDXFilterParamProc paramProc |
|
||||
VDXFilterConfigProc configProc |
|
||||
VDXFilterStringProc stringProc |
|
||||
VDXFilterStartProc startProc |
|
||||
VDXFilterEndProc endProc |
|
||||
|
|
||||
VDXScriptObject *script_obj |
|
||||
|
|
||||
VDXFilterScriptStrProc fssProc |
|
||||
|
|
||||
# NEW - 1.4.11 |
|
||||
VDXFilterStringProc2 stringProc2 |
|
||||
VDXFilterSerialize serializeProc |
|
||||
VDXFilterDeserialize deserializeProc |
|
||||
VDXFilterCopy copyProc |
|
||||
|
|
||||
VDXFilterPrefetch prefetchProc; # (V12/V1.7.4+) |
|
||||
|
|
||||
# NEW - V14 / 1.9.1 |
|
||||
VDXFilterCopy2Proc copyProc2 |
|
||||
VDXFilterPrefetch2Proc prefetchProc2 |
|
||||
VDXFilterEventProc eventProc |
|
||||
|
|
||||
|
|
||||
##### |
|
||||
|
|
||||
# FilterStateInfo: contains dynamic info about file being processed |
|
||||
|
|
||||
class VDXFilterStateInfo |
|
||||
public: |
|
||||
sint32 lCurrentFrame; # current sequence frame (previously called output frame) |
|
||||
sint32 lMicrosecsPerFrame; # microseconds per sequence frame |
|
||||
sint32 lCurrentSourceFrame; # current source frame |
|
||||
sint32 lMicrosecsPerSrcFrame; # microseconds per source frame |
|
||||
sint32 lSourceFrameMS; # source frame timestamp |
|
||||
sint32 lDestFrameMS; # output frame timestamp |
|
||||
|
|
||||
enum |
|
||||
kStateNone = 0x00000000, |
|
||||
kStatePreview = 0x00000001, # (V1.5.10+) Job output is not being saved to disk. |
|
||||
kStateRealTime = 0x00000002, # (V1.5.10+) Operation is running in real-time (capture, playback). |
|
||||
kStateMax = 0xFFFFFFFF |
|
||||
|
|
||||
|
|
||||
uint32 flags; # (V10 / 1.5.10+ only) |
|
||||
|
|
||||
sint32 mOutputFrame; # (V13/V1.8.2+) current output frame |
|
||||
|
|
||||
|
|
||||
# VDXFBitmap: VBitmap extended to hold filter-specific information |
|
||||
|
|
||||
class VDXBitmap |
|
||||
public: |
|
||||
void * _vtable; # Reserved - do not use. |
|
||||
uint32 * data; # Pointer to start of _bottom-most_ scanline of plane 0. |
|
||||
uint32 * palette; # Pointer to palette (reserved - set to NULL). |
|
||||
sint32 depth; # Bit depth, bits. Set to zero if mpPixmap/mpPixmapLayout are active. |
|
||||
sint32 w; # Width of bitmap, pixels. |
|
||||
sint32 h; # Height of bitmap, pixels. |
|
||||
ptrdiff_t pitch; # Distance, bytes, the start of one scanline in plane 0 to the next. |
|
||||
ptrdiff_t modulo; # Distance, bytes, the end of one scanline in plane 0 to the start of the next. |
|
||||
ptrdiff_t size; # Size of plane 0, padding. |
|
||||
ptrdiff_t offset; # Offset from beginning of buffer to beginning of plane 0. |
|
||||
|
|
||||
uint32 *Address32(int x, y) |
|
||||
return Address32i(x, h-y-1) |
|
||||
|
|
||||
|
|
||||
uint32 *Address32i(int x, y) |
|
||||
return (uint32 *)((char *)data + y*pitch + x*4) |
|
||||
|
|
||||
|
|
||||
void AlignTo4() |
|
||||
pitch = w << 2 |
|
||||
|
|
||||
|
|
||||
void AlignTo8() |
|
||||
pitch = ((w+1)&~1) << 2 |
|
||||
|
|
||||
|
|
||||
|
|
||||
class VDXFBitmap : public VDXBitmap |
|
||||
public: |
|
||||
enum |
|
||||
#/ Set in paramProc if the filter requires a Win32 GDI display context |
|
||||
#/ for a bitmap. (Deprecated as of API V12 - do not use) |
|
||||
NEEDS_HDC = 0x00000001L, |
|
||||
|
|
||||
|
|
||||
uint32 dwFlags |
|
||||
VDXHDC hdc |
|
||||
|
|
||||
uint32 mFrameRateHi; # Frame rate numerator (V1.7.4+) |
|
||||
uint32 mFrameRateLo; # Frame rate denominator (V1.7.4+) |
|
||||
sint64 mFrameCount; # Frame count; -1 if unlimited or indeterminate (V1.7.4+) |
|
||||
|
|
||||
VDXPixmapLayout *mpPixmapLayout |
|
||||
VDXPixmap *mpPixmap |
|
||||
|
|
||||
uint32 mAspectRatioHi; #/< Pixel aspect ratio fraction (numerator). 0/0 = unknown |
|
||||
uint32 mAspectRatioLo; #/< Pixel aspect ratio fraction (denominator). |
|
||||
|
|
||||
sint64 mFrameNumber; #/< Current frame number (zero based). |
|
||||
sint64 mFrameTimestampStart; #/< Starting timestamp of frame, 100ns units. |
|
||||
sint64 mFrameTimestampEnd; #/< Ending timestamp of frame, 100ns units. |
|
||||
sint64 mCookie; #/< Cookie supplied when frame was requested. |
|
||||
|
|
||||
|
|
||||
# VDXFilterActivation: This is what is actually passed to filters at runtime. |
|
||||
|
|
||||
class VDXFilterActivation |
|
||||
public: |
|
||||
VDXFilterDefinition *filter; # |
|
||||
void *filter_data |
|
||||
VDXFBitmap& dst |
|
||||
VDXFBitmap& src |
|
||||
VDXFBitmap *_reserved0 |
|
||||
VDXFBitmap * last |
|
||||
uint32 x1 |
|
||||
uint32 y1 |
|
||||
uint32 x2 |
|
||||
uint32 y2 |
|
||||
|
|
||||
VDXFilterStateInfo *pfsi |
|
||||
IVDXFilterPreview *ifp |
|
||||
IVDXFilterPreview2 *ifp2; # (V11+) |
|
||||
|
|
||||
uint32 mSourceFrameCount; # (V14+) |
|
||||
VDXFBitmap * *mpSourceFrames; # (V14+) |
|
||||
VDXFBitmap * *mpOutputFrames; # (V14+) |
|
||||
|
|
||||
|
|
||||
# These flags must match those in cpuaccel.h! |
|
||||
|
|
||||
#ifndef f_VIRTUALDUB_CPUACCEL_H |
|
||||
#define CPUF_SUPPORTS_CPUID (0x00000001L) |
|
||||
#define CPUF_SUPPORTS_FPU (0x00000002L) |
|
||||
#define CPUF_SUPPORTS_MMX (0x00000004L) |
|
||||
#define CPUF_SUPPORTS_INTEGER_SSE (0x00000008L) |
|
||||
#define CPUF_SUPPORTS_SSE (0x00000010L) |
|
||||
#define CPUF_SUPPORTS_SSE2 (0x00000020L) |
|
||||
#define CPUF_SUPPORTS_3DNOW (0x00000040L) |
|
||||
#define CPUF_SUPPORTS_3DNOW_EXT (0x00000080L) |
|
||||
#endif |
|
||||
|
|
||||
struct VDXFilterFunctions |
|
||||
VDXFilterDefinition *(__cdecl *addFilter)(VDXFilterModule *, *, fd_len) |
|
||||
void (__cdecl *removeFilter)(VDXFilterDefinition *) |
|
||||
bool (__cdecl *isFPUEnabled)() |
|
||||
bool (__cdecl *isMMXEnabled)() |
|
||||
void (__cdecl *InitVTables)(VDXFilterVTbls *) |
|
||||
|
|
||||
# These functions permit you to throw MyError exceptions from a filter. |
|
||||
# YOU MUST ONLY CALL THESE IN runProc, initProc, startProc. |
|
||||
|
|
||||
void (__cdecl *ExceptOutOfMemory)(); # ADDED: V6 (VirtualDub 1.4) |
|
||||
void (__cdecl *Except)( char *format, ...); # ADDED: V6 (VirtualDub 1.4) |
|
||||
|
|
||||
# These functions are callable at any time. |
|
||||
|
|
||||
long (__cdecl *getCPUFlags)(); # ADDED: V6 (VirtualDub 1.4) |
|
||||
long (__cdecl *getHostVersionInfo)(char *buffer, len); # ADDED: V7 (VirtualDub 1.4d) |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
#####################################/ |
|
||||
|
|
||||
class VDXScriptValue |
|
||||
class VDXScriptError |
|
||||
struct VDXScriptObject |
|
||||
|
|
||||
class VDXScriptError |
|
||||
public: |
|
||||
enum |
|
||||
PARSE_ERROR=1, |
|
||||
SEMICOLON_EXPECTED, |
|
||||
IDENTIFIER_EXPECTED, |
|
||||
|
|
||||
TYPE_INT_REQUIRED, |
|
||||
TYPE_ARRAY_REQUIRED, |
|
||||
TYPE_FUNCTION_REQUIRED, |
|
||||
TYPE_OBJECT_REQUIRED, |
|
||||
|
|
||||
OBJECT_MEMBER_NAME_REQUIRED, |
|
||||
FUNCCALLEND_EXPECTED, |
|
||||
TOO_MANY_PARAMS, |
|
||||
DIVIDE_BY_ZERO, |
|
||||
VAR_NOT_FOUND, |
|
||||
MEMBER_NOT_FOUND, |
|
||||
OVERLOADED_FUNCTION_NOT_FOUND, |
|
||||
IDENT_TOO_LONG, |
|
||||
OPERATOR_EXPECTED, |
|
||||
CLOSEPARENS_EXPECTED, |
|
||||
CLOSEBRACKET_EXPECTED, |
|
||||
|
|
||||
VAR_UNDEFINED, |
|
||||
|
|
||||
OUT_OF_STRING_SPACE, |
|
||||
OUT_OF_MEMORY, |
|
||||
INTERNAL_ERROR, |
|
||||
EXTERNAL_ERROR, |
|
||||
|
|
||||
FCALL_OUT_OF_RANGE, |
|
||||
FCALL_INVALID_PTYPE, |
|
||||
FCALL_UNKNOWN_STR, |
|
||||
|
|
||||
ARRAY_INDEX_OUT_OF_BOUNDS, |
|
||||
|
|
||||
NUMERIC_OVERFLOW, |
|
||||
STRING_NOT_AN_INTEGER_VALUE, |
|
||||
STRING_NOT_A_REAL_VALUE, |
|
||||
|
|
||||
ASSERTION_FAILED, |
|
||||
AMBIGUOUS_CALL, |
|
||||
CANNOT_CAST |
|
||||
|
|
||||
|
|
||||
|
|
||||
class IVDXScriptInterpreter |
|
||||
public: |
|
||||
virtual void _placeholder1() { |
|
||||
virtual void _placeholder2(void *, *) { |
|
||||
virtual void _placeholder3(char *s) { |
|
||||
|
|
||||
virtual void ScriptError(int e)=0 |
|
||||
virtual void _placeholder4(VDXScriptError& cse) { |
|
||||
virtual char** AllocTempString(long l)=0 |
|
||||
|
|
||||
virtual void _placeholder5() { |
|
||||
|
|
||||
|
|
||||
#define EXT_SCRIPT_ERROR(x) (isi.ScriptError((VDXScriptError.x))) |
|
||||
|
|
||||
typedef VDXScriptValue (*VDXScriptFunctionPtr)(IVDXScriptInterpreter *, *, *, int) |
|
||||
typedef void (*VDXScriptVoidFunctionPtr)(IVDXScriptInterpreter *, *, *, int) |
|
||||
typedef int (*VDXScriptIntFunctionPtr)(IVDXScriptInterpreter *, *, *, int) |
|
||||
|
|
||||
struct VDXScriptFunctionDef |
|
||||
VDXScriptFunctionPtr func_ptr |
|
||||
char *name |
|
||||
char *arg_list |
|
||||
|
|
||||
|
|
||||
struct VDXScriptObject |
|
||||
void *_lookup; # reserved - set to NULL |
|
||||
VDXScriptFunctionDef *func_list |
|
||||
void *_obj_list; # reserved - set to NULL |
|
||||
|
|
||||
|
|
||||
class VDXScriptValue |
|
||||
public: |
|
||||
enum { T_VOID, T_INT, T_PINT, T_STR, T_ARRAY, T_OBJECT, T_FNAME, T_FUNCTION, T_VARLV, T_LONG, T_DOUBLE } type |
|
||||
VDXScriptObject *thisPtr |
|
||||
union |
|
||||
int i |
|
||||
char **s |
|
||||
sint64 l |
|
||||
double d |
|
||||
} u |
|
||||
|
|
||||
VDXScriptValue() |
|
||||
type = T_VOID |
|
||||
|
|
||||
VDXScriptValue(int i) |
|
||||
type = T_INT |
|
||||
u.i = i |
|
||||
|
|
||||
VDXScriptValue(sint64 l) |
|
||||
type = T_LONG |
|
||||
u.l = l |
|
||||
|
|
||||
VDXScriptValue(double d) |
|
||||
type = T_DOUBLE |
|
||||
u.d = d |
|
||||
|
|
||||
VDXScriptValue(char **s) |
|
||||
type = T_STR |
|
||||
u.s = s |
|
||||
|
|
||||
|
|
||||
bool isVoid() |
|
||||
return type == T_VOID |
|
||||
|
|
||||
bool isInt() |
|
||||
return type == T_INT |
|
||||
|
|
||||
bool isString() |
|
||||
return type == T_STR |
|
||||
|
|
||||
bool isLong() |
|
||||
return type == T_LONG |
|
||||
|
|
||||
bool isDouble() |
|
||||
return type == T_DOUBLE |
|
||||
|
|
||||
|
|
||||
int asInt() |
|
||||
return u.i |
|
||||
|
|
||||
sint64 asLong() |
|
||||
return u.l |
|
||||
|
|
||||
double asDouble() |
|
||||
return u.d |
|
||||
|
|
||||
char ** asString() |
|
||||
return u.s |
|
||||
|
|
||||
|
|
||||
|
|
||||
#ifdef _MSC_VER |
|
||||
#pragma pack(pop) |
|
||||
#endif |
|
||||
|
|
||||
#endif |
|
@ -1,127 +0,0 @@ |
|||||
#ifndef f_VD2_PLUGIN_VDVIDEOUTIL_H |
|
||||
#define f_VD2_PLUGIN_VDVIDEOUTIL_H |
|
||||
|
|
||||
template<class T> |
|
||||
T *vd_ptroffset(T *p, diff) |
|
||||
return (T *)((char *)p + diff) |
|
||||
|
|
||||
|
|
||||
template<class T> |
|
||||
class vd_row_iter |
|
||||
public: |
|
||||
vd_row_iter() { |
|
||||
vd_row_iter(T *p, pitch) : mp(p), mpitch(pitch) { |
|
||||
vd_row_iter(T *p, pitch, y) : mp(vd_ptroffset(p, pitch*y)), mpitch(pitch) { |
|
||||
|
|
||||
vd_row_iter( VFBitmap& bm, x = 0, y = 0) : mp(vd_ptroffset((T*)bm.data, bm.pitch*(bm.h - 1 - y))+x), mpitch(-bm.pitch) { |
|
||||
|
|
||||
operator T*() |
|
||||
return mp |
|
||||
|
|
||||
T& operator[](int x) |
|
||||
return mp[x] |
|
||||
|
|
||||
|
|
||||
void mulstep(int x) |
|
||||
mpitch *= x |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T>& operator+=(int y) |
|
||||
mp = vd_ptroffset(mp, * y) |
|
||||
return *self |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T>& operator-=(int y) |
|
||||
mp = vd_ptroffset(mp, -(mpitch * y)) |
|
||||
return *self |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T>& operator++() |
|
||||
mp = vd_ptroffset(mp, mpitch) |
|
||||
return *self |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T> operator++(int) |
|
||||
vd_row_iter<T> temp(*self) |
|
||||
mp = vd_ptroffset(mp, mpitch) |
|
||||
return temp |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T>& operator--() |
|
||||
mp = vd_ptroffset(mp, -mpitch) |
|
||||
return *self |
|
||||
|
|
||||
|
|
||||
vd_row_iter<T> operator--(int) |
|
||||
vd_row_iter<T> temp(*self) |
|
||||
mp = vd_ptroffset(mp, -mpitch) |
|
||||
return temp |
|
||||
|
|
||||
|
|
||||
protected: |
|
||||
T *mp |
|
||||
ptrdiff_t mpitch |
|
||||
|
|
||||
|
|
||||
typedef vd_row_iter<uint32> vd_pixrow_iter |
|
||||
|
|
||||
inline uint32 vd_pixavg_down(uint32 x, y) |
|
||||
return (x&y) + (((x^y)&0xfefefefe)>>1) |
|
||||
|
|
||||
|
|
||||
inline uint32 vd_pixavg_up(uint32 x, y) |
|
||||
return (x|y) - (((x^y)&0xfefefefe)>>1) |
|
||||
|
|
||||
|
|
||||
inline void vd_pixunpack(uint32 px, r, g, b) |
|
||||
r = (px>>16)&255 |
|
||||
g = (px>> 8)&255 |
|
||||
b = (px )&255 |
|
||||
|
|
||||
|
|
||||
inline uint32 vd_pixpack(int r, g, b) |
|
||||
if ((unsigned)r >= 256) r = ~(r>>31) & 255 |
|
||||
if ((unsigned)g >= 256) g = ~(g>>31) & 255 |
|
||||
if ((unsigned)b >= 256) b = ~(b>>31) & 255 |
|
||||
|
|
||||
return (r<<16) + (g<<8) + b |
|
||||
|
|
||||
|
|
||||
inline uint32 vd_pixpackfast(int r, g, b) |
|
||||
return (r<<16) + (g<<8) + b |
|
||||
|
|
||||
|
|
||||
struct vd_transform_pixmap_helper |
|
||||
vd_transform_pixmap_helper( VFBitmap& dst) |
|
||||
: p((uint32 *)dst.data) |
|
||||
, pitch(dst.pitch) |
|
||||
, w(dst.w) |
|
||||
, h(dst.h) { |
|
||||
|
|
||||
operator bool() |
|
||||
return False |
|
||||
|
|
||||
|
|
||||
uint32 *p |
|
||||
ptrdiff_t pitch |
|
||||
int w, h |
|
||||
|
|
||||
|
|
||||
#define vd_transform_pixmap_blt(dst, src) \ |
|
||||
if(dstinfo = dst);else \ |
|
||||
if(srcinfo = src);else \ |
|
||||
for(y = 0, h = dstinfo.h, w = dstinfo.w; y < h; ++y, dstinfo.p=vd_ptroffset(dstinfo.p, dstinfo.pitch), srcinfo.p=vd_ptroffset(srcinfo.p, srcinfo.pitch)) \ |
|
||||
for(x = 0; x < dstinfo.w; ++x) \ |
|
||||
switch(out = dstinfo.p[x]) case 0: default: \ |
|
||||
switch( in = srcinfo.p[x]) case 0: default: |
|
||||
|
|
||||
#define vd_transform_pixmap_inplace(dst) \ |
|
||||
if(dstinfo = dst);else \ |
|
||||
for(y = 0, h = dstinfo.h, w = dstinfo.w; y < h; ++y, dstinfo.p=vd_ptroffset(dstinfo.p, dstinfo.pitch)) \ |
|
||||
for(x = 0; x < dstinfo.w; ++x) \ |
|
||||
switch(px = dstinfo.p[x]) case 0: default: \ |
|
||||
|
|
||||
#define vd_maketable256_16(x) formula((x+0)),formula((x+1)),formula((x+2)),formula((x+3)),formula((x+4)),formula((x+5)),formula((x+6)),formula((x+7)),formula((x+8)),formula((x+9)),formula((x+10)),formula((x+11)),formula((x+12)),formula((x+13)),formula((x+14)),formula((x+15)) |
|
||||
#define vd_maketable256 vd_maketable256_16(0x00),vd_maketable256_16(0x10),vd_maketable256_16(0x20),vd_maketable256_16(0x30),vd_maketable256_16(0x40),vd_maketable256_16(0x50),vd_maketable256_16(0x60),vd_maketable256_16(0x70),vd_maketable256_16(0x80),vd_maketable256_16(0x90),vd_maketable256_16(0xA0),vd_maketable256_16(0xB0),vd_maketable256_16(0xC0),vd_maketable256_16(0xD0),vd_maketable256_16(0xE0),vd_maketable256_16(0xF0), |
|
||||
|
|
||||
#endif |
|
@ -1,144 +0,0 @@ |
|||||
#include <stdio.h> |
|
||||
#include <stdlib.h> |
|
||||
''' |
|
||||
Compile thusly: |
|
||||
cc -o yuv2ppm yuv2ppm.c |
|
||||
''' |
|
||||
''' example.ppm |
|
||||
P3 |
|
||||
# feep.ppm |
|
||||
4 4 |
|
||||
15 |
|
||||
0 0 0 0 0 0 0 0 0 15 0 15 |
|
||||
0 0 0 0 15 7 0 0 0 0 0 0 |
|
||||
0 0 0 0 0 0 0 15 7 0 0 0 |
|
||||
15 0 15 0 0 0 0 0 0 0 0 0 |
|
||||
''' |
|
||||
''' |
|
||||
Use "P6" for binary data, or "P3" for ascii data. |
|
||||
''' |
|
||||
def make_outfile(self, *outfile, *infile): int i |
|
||||
for(i=0; infile[i]; i++) |
|
||||
outfile[i] = infile[i] |
|
||||
outfile[i++] = '.' |
|
||||
outfile[i++] = 'p' |
|
||||
outfile[i++] = 'p' |
|
||||
outfile[i++] = 'm' |
|
||||
outfile[i++] = 0 |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
def yuv2rgb(self, y, u, v): unsigned int pixel32 |
|
||||
unsigned char *pixel = (unsigned char *)&pixel32 |
|
||||
int r, g, b |
|
||||
#if 0 |
|
||||
''' |
|
||||
One formula I found: (not the right one) |
|
||||
R = 1.164(Y - 16) + 1.596(Cr - 128) |
|
||||
G = 1.164(Y - 16) - 0.813(Cr - 128) - 0.391(Cb - 128) |
|
||||
B = 1.164(Y - 16) + 2.018(Cb - 128) |
|
||||
''' |
|
||||
r = (1.164 * (y - 16)) |
|
||||
+ (2.018 * (v - 128)) |
|
||||
g = (1.164 * (y - 16)) |
|
||||
- (0.813 * (u - 128)) |
|
||||
- (0.391 * (v - 128)) |
|
||||
b = (1.164 * (y - 16)) |
|
||||
+ (1.596 * (u - 128)) |
|
||||
#else: |
|
||||
''' |
|
||||
Another formula I found: (seems to work) |
|
||||
R = Y + 1.370705 (V-128) |
|
||||
G = Y - 0.698001 (V-128) - 0.337633 (U-128) |
|
||||
B = Y + 1.732446 (U-128) |
|
||||
''' |
|
||||
r = y + (1.370705 * (v-128)) |
|
||||
g = y - (0.698001 * (v-128)) - (0.337633 * (u-128)) |
|
||||
b = y + (1.732446 * (u-128)) |
|
||||
#endif |
|
||||
# Even with proper conversion, values still need clipping. |
|
||||
if (r > 255) r = 255 |
|
||||
if (g > 255) g = 255 |
|
||||
if (b > 255) b = 255 |
|
||||
if (r < 0) r = 0 |
|
||||
if (g < 0) g = 0 |
|
||||
if (b < 0) b = 0 |
|
||||
# Values only go from 0-220.. Why? |
|
||||
pixel[0] = r * 220 / 256 |
|
||||
pixel[1] = g * 220 / 256 |
|
||||
pixel[2] = b * 220 / 256 |
|
||||
pixel[3] = 0 |
|
||||
''' Debug |
|
||||
printf("yuv2rgb(%i, %i, %i) . %i, %i, %i (0x%x)\n", |
|
||||
y, u, v, |
|
||||
pixel[0], pixel[1], pixel[2], |
|
||||
pixel32) |
|
||||
''' |
|
||||
return pixel32 |
|
||||
|
|
||||
|
|
||||
def yuv2ppm(self, *infile, *outfile): FILE *in, *out |
|
||||
int i |
|
||||
unsigned int pixel_16 |
|
||||
unsigned char pixel_24[3] |
|
||||
unsigned int pixel32 |
|
||||
int y, u, v, y2 |
|
||||
char *ppmheader = "P6\n# Generated by yuv2ppm\n720 486\n255\n" |
|
||||
in = fopen(infile, "rb") |
|
||||
out = fopen(outfile, "wb") |
|
||||
if (not in or not out) return 0 |
|
||||
fprintf(out, ppmheader) |
|
||||
for(i=0; i<720*486/2; i++) |
|
||||
fread(&pixel_16, 4, 1, in) |
|
||||
pixel_24[0] = pixel_24[1] = pixel_24[2] = 0 |
|
||||
u = ((pixel_16 & 0x000000ff)) |
|
||||
y = ((pixel_16 & 0x0000ff00)>>8) |
|
||||
v = ((pixel_16 & 0x00ff0000)>>16) |
|
||||
y2 = ((pixel_16 & 0xff000000)>>24) |
|
||||
pixel32 = yuv2rgb(y, u, v) |
|
||||
pixel_24[0] = (pixel32 & 0x000000ff) |
|
||||
pixel_24[1] = (pixel32 & 0x0000ff00) >> 8 |
|
||||
pixel_24[2] = (pixel32 & 0x00ff0000) >> 16 |
|
||||
# For binary PPM |
|
||||
fwrite(pixel_24, 3, 1, out) |
|
||||
# For ascii PPM |
|
||||
#fprintf(out, "%i %i %i\n", |
|
||||
# pixel_24[0], |
|
||||
# pixel_24[1], |
|
||||
# pixel_24[2]) |
|
||||
pixel32 = yuv2rgb(y2, u, v) |
|
||||
pixel_24[0] = (pixel32 & 0x000000ff) |
|
||||
pixel_24[1] = (pixel32 & 0x0000ff00) >> 8 |
|
||||
pixel_24[2] = (pixel32 & 0x00ff0000) >> 16 |
|
||||
# For binary PPM |
|
||||
fwrite(pixel_24, 3, 1, out) |
|
||||
# For ascii PPM |
|
||||
#fprintf(out, "%i %i %i\n", |
|
||||
# pixel_24[0], |
|
||||
# pixel_24[1], |
|
||||
# pixel_24[2]) |
|
||||
|
|
||||
fclose(in) |
|
||||
fclose(out) |
|
||||
return 1 |
|
||||
|
|
||||
|
|
||||
def main(self, argc, **argv): char *infile, outfile[256] |
|
||||
int i |
|
||||
int success |
|
||||
for(i=1; i<argc; i++) |
|
||||
success = 0 |
|
||||
infile = argv[i] |
|
||||
make_outfile(outfile, infile) |
|
||||
printf("%s . %s... ", infile, outfile) |
|
||||
fflush(stdout) |
|
||||
success = yuv2ppm(infile, outfile) |
|
||||
if success: |
|
||||
printf("Done.\n") |
|
||||
|
|
||||
else: |
|
||||
printf("Failed. Aborting.\n") |
|
||||
return 1 |
|
||||
|
|
||||
|
|
||||
return 0 |
|
@ -1,21 +0,0 @@ |
|||||
#{{NO_DEPENDENCIES} |
|
||||
# Microsoft Visual C++ generated include file. |
|
||||
# Used by SpatialForegroundRemover.rc |
|
||||
# |
|
||||
#define IDCANCEL2 3 |
|
||||
#define IDC_PREVIEW 3 |
|
||||
#define IDD_FILTER_SPATIALFOREGROUNDREMOVER 101 |
|
||||
#define IDC_REACH 1001 |
|
||||
#define IDC_RADIALSAMPLES 1002 |
|
||||
#define IDC_DIFFUSION 1003 |
|
||||
|
|
||||
# Next default values for objects |
|
||||
# |
|
||||
#ifdef APSTUDIO_INVOKED |
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS |
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102 |
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001 |
|
||||
#define _APS_NEXT_CONTROL_VALUE 1002 |
|
||||
#define _APS_NEXT_SYMED_VALUE 101 |
|
||||
#endif |
|
||||
#endif |
|
File diff suppressed because it is too large
@ -1,60 +0,0 @@ |
|||||
#ifndef COLORSPACETRANSFORM_H |
|
||||
#define COLORSPACETRANSFORM_H |
|
||||
|
|
||||
#include <cstdio> |
|
||||
#include <cstdlib> #rand etc |
|
||||
#include <string> |
|
||||
#include <iostream> |
|
||||
#include <climits> #<limits.h> |
|
||||
|
|
||||
##define CT_TESTLIMITS |
|
||||
|
|
||||
#include "frameworkdummy.h" |
|
||||
#include "preporting.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
char c255=(char)255 |
|
||||
extern float YCToRgb_fMaxY |
|
||||
extern float YCToRgb_fMaxU |
|
||||
extern float YCToRgb_fMaxV |
|
||||
extern float YCToRgb_fMinY |
|
||||
extern float YCToRgb_fMinU |
|
||||
extern float YCToRgb_fMinV |
|
||||
extern float RgbToYC_fMaxY |
|
||||
extern float RgbToYC_fMaxU |
|
||||
extern float RgbToYC_fMaxV |
|
||||
extern float RgbToYC_fMinY |
|
||||
extern float RgbToYC_fMinU |
|
||||
extern float RgbToYC_fMinV |
|
||||
extern float YCToRgb_byMaxR |
|
||||
extern float YCToRgb_byMaxG |
|
||||
extern float YCToRgb_byMaxB |
|
||||
extern float YCToRgb_byMinR |
|
||||
extern float YCToRgb_byMinB |
|
||||
extern float YCToRgb_byMinG |
|
||||
#class CONVERT_FAKESTATIC_CLASS#public: |
|
||||
# static byte ToByte(float val) |
|
||||
# static byte ToByte(double val) |
|
||||
# static char ToChar8(float val) |
|
||||
# static char ToChar8(double val) |
|
||||
# |
|
||||
def GetCurrentOrPrevFrameFor(self, sAnyFrameFile, iFrame): |
|
||||
def IsDigit(self, val): |
|
||||
#void YUV4xxSubsampledPlanarToYUV444NonPlanar(unsigned char* dest, bAddDestAlpha, char* source, char* source_Stride, int source_J, int source_a, int source_b, int w, int h) |
|
||||
#void RgbToYC(byte &Y, &U, &V, r, g, b) |
|
||||
def RgbToYC(self, char &Y, char &U, char &V, char r, char g, char b): |
|
||||
#void YCToRgb(byte &r, &g, &b, Y, U, V) |
|
||||
def YCToRgb(self, char &r, char &g, char &b, char Y, char U, char V): |
|
||||
def YUV444NonPlanarToRGB(self, char* dest, bDestHasAlphaChannel, bSetDestAlphaTo255_IgnoredIfNoDestAlpha, char* source, int iPixels): |
|
||||
void CopySurface_BitdepthSensitive(unsigned char* dest, int dest_BytesPP, int dest_Stride, char* source, int source_BytesPP, int source_Stride, int w, int h); # void CopySurface_BitdepthSensitive(unsigned char* dest, int dest_BytesPP, char* source, int source_BytesPP, int iTotalPixels) |
|
||||
def CopyPlaneToNonPlanar(self, char* dest, int DestChannelIndex, int dest_BytesPP, char* source, int source_Stride, int w, int h, bSamplesOnSecondLineOfSource): |
|
||||
def CopyNonPlanarToPlane(self, char* dest, int dest_Stride, bSamplesOnSecondLineOfDest, char* source, int SourceChannelIndex, int source_BytesPP, int w, int h): |
|
||||
def SaveRaw(self, sFile, char* buffer, iBytes): |
|
||||
def Heal_ToNearestPixel(self, char* dest, int dest_BytesPP, int dest_Stride, char* mask, int mask_BytesPP, int mask_Stride, int mask_Channel, int w, int h, rReachMultiplier_UNUSED, rRadialSampleSpacing_UNUSED, rDiffusionMultiplier): |
|
||||
def Heal_WithAveraging_Permutations(self, char* dest0, int dest_BytesPP, int dest_Stride, char* mask0, int mask_BytesPP, int mask_Stride, int mask_Channel, int w, int h, rReachMultiplier, rRadialSampleSpacing, rDiffusionMultiplier, bHorizonalSearch, bVerticalSearch): |
|
||||
def Diffuse(self, char* dest0, int dest_w, int dest_h, int dest_BytesPP, int dest_Stride, at_x, at_y, char* brush0, int brush_w, int brush_y, int brush_BytesPP, int brush_Stride, int brush_Channel, iPixelsRadius, bRandom): |
|
||||
def Heal_WithAveraging_Sequential(self, char* dest, int dest_BytesPP, int dest_Stride, char* mask, int mask_BytesPP, int mask_Stride, int mask_Channel, int w, int h, rReachMultiplier, rRadialSampleSpacing, rDiffusionMultiplier): |
|
||||
}#end namespace |
|
||||
#endif |
|
@ -1,20 +0,0 @@ |
|||||
#ifndef PMATH_CPP |
|
||||
#define PMATH_CPP |
|
||||
|
|
||||
|
|
||||
############/ UNUSED: see Convert in frameworkdummy.h and ByRound in pmath.h |
|
||||
|
|
||||
|
|
||||
#include "pconvert.h" |
|
||||
#include <cmath>#<math.h> |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
def Abs(self, val): |
|
||||
return (val>=255.0f) ? 255 : ((val<=0.0f)?0:(byte)val) |
|
||||
|
|
||||
def Abs(self, val): |
|
||||
return (val>=255.0) ? 255 : ((val<=0.0)?0:(byte)val) |
|
||||
|
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,19 +0,0 @@ |
|||||
#ifndef PCONVERT_H |
|
||||
#define PCONVERT_H |
|
||||
|
|
||||
#include <string> |
|
||||
#include <climits> #<limits.h> |
|
||||
#include "preporting.h" |
|
||||
#include "frameworkdummy.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
class PConvert |
|
||||
public: |
|
||||
static void ToByte(float val) |
|
||||
static void ToByte(float val) |
|
||||
|
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,585 +0,0 @@ |
|||||
##define WIN32_LEAN_AND_MEAN |
|
||||
#include <windows.h> |
|
||||
#include <commctrl.h> |
|
||||
#include <stdio.h> |
|
||||
#include <vd2/VDXFrame/VideoFilter.h> |
|
||||
#include <vd2/VDXFrame/VideoFilterDialog.h> |
|
||||
#include "../resource.h" |
|
||||
#include "f_spatialforegroundremover.h" |
|
||||
#include <ctime> |
|
||||
#include "pimage.h" |
|
||||
#include "pmath.h" |
|
||||
|
|
||||
extern int g_VFVAPIVersion |
|
||||
|
|
||||
using namespace ProtoArmor |
|
||||
|
|
||||
#######################################/ |
|
||||
|
|
||||
PMathStatic* pmathstatic=NULL |
|
||||
|
|
||||
def DlgProc(self, msg, wParam, lParam): |
|
||||
switch(msg) |
|
||||
case WM_INITDIALOG: |
|
||||
return not OnInit() |
|
||||
|
|
||||
case WM_DESTROY: |
|
||||
OnDestroy() |
|
||||
break |
|
||||
|
|
||||
case WM_COMMAND: |
|
||||
if OnCommand(LOWORD(wParam)): |
|
||||
return TRUE |
|
||||
break |
|
||||
|
|
||||
case WM_HSCROLL: |
|
||||
if mifp and SaveToConfig(): |
|
||||
mifp.RedoFrame() |
|
||||
return TRUE |
|
||||
|
|
||||
|
|
||||
return FALSE |
|
||||
|
|
||||
|
|
||||
def OnInit(self): |
|
||||
mOldConfig = mConfig |
|
||||
|
|
||||
SendDlgItemMessage(mhdlg, IDC_REACH, TBM_SETRANGE, TRUE, MAKELONG(0, 2000)) |
|
||||
SendDlgItemMessage(mhdlg, IDC_RADIALSAMPLES, TBM_SETRANGE, TRUE, MAKELONG(0, 2000)) |
|
||||
SendDlgItemMessage(mhdlg, IDC_DIFFUSION, TBM_SETRANGE, TRUE, MAKELONG(0, 2000)) |
|
||||
|
|
||||
LoadFromConfig() |
|
||||
|
|
||||
hwndFirst = GetDlgItem(mhdlg, IDC_REACH) |
|
||||
if hwndFirst: |
|
||||
SendMessage(mhdlg, WM_NEXTDLGCTL, (WPARAM)hwndFirst, TRUE) |
|
||||
|
|
||||
hwndPreview = GetDlgItem(mhdlg, IDC_PREVIEW) |
|
||||
if hwndPreview and mifp: |
|
||||
EnableWindow(hwndPreview, TRUE) |
|
||||
mifp.InitButton((VDXHWND)hwndPreview) |
|
||||
|
|
||||
|
|
||||
return False |
|
||||
|
|
||||
|
|
||||
def OnDestroy(self): |
|
||||
if mifp: |
|
||||
mifp.InitButton(NULL) |
|
||||
|
|
||||
|
|
||||
def OnCommand(self, cmd): |
|
||||
switch(cmd) |
|
||||
case IDOK: |
|
||||
SaveToConfig() |
|
||||
EndDialog(mhdlg, True) |
|
||||
return True |
|
||||
|
|
||||
case IDCANCEL: |
|
||||
mConfig = mOldConfig |
|
||||
EndDialog(mhdlg, False) |
|
||||
return True |
|
||||
|
|
||||
case IDC_PREVIEW: |
|
||||
if mifp: |
|
||||
mifp.Toggle((VDXHWND)mhdlg) |
|
||||
return True |
|
||||
|
|
||||
|
|
||||
return False |
|
||||
|
|
||||
|
|
||||
def LoadFromConfig(self): |
|
||||
SendDlgItemMessage(mhdlg, IDC_REACH, TBM_SETPOS, TRUE, (int)(0.5f + mConfig.mReach * 1000.0f)) |
|
||||
SendDlgItemMessage(mhdlg, IDC_RADIALSAMPLES, TBM_SETPOS, TRUE, (int)(0.5f + mConfig.mRadialSamples * 1000.0f)) |
|
||||
SendDlgItemMessage(mhdlg, IDC_DIFFUSION, TBM_SETPOS, TRUE, (int)(0.5f + mConfig.mDiffusion * 1000.0f)) |
|
||||
|
|
||||
|
|
||||
def SaveToConfig(self): |
|
||||
fReach = (float)SendDlgItemMessage(mhdlg, IDC_REACH, TBM_GETPOS, 0, 0) / 1000.0f |
|
||||
fRadialSamples = (float)SendDlgItemMessage(mhdlg, IDC_RADIALSAMPLES, TBM_GETPOS, 0, 0) / 1000.0f |
|
||||
fDiffusion = (float)SendDlgItemMessage(mhdlg, IDC_DIFFUSION, TBM_GETPOS, 0, 0) / 1000.0f |
|
||||
|
|
||||
if (fReach != mConfig.mReach |
|
||||
or fRadialSamples != mConfig.mRadialSamples |
|
||||
or fDiffusion != mConfig.mDiffusion) |
|
||||
mConfig.mReach = fReach |
|
||||
mConfig.mRadialSamples = fRadialSamples |
|
||||
mConfig.mDiffusion = fDiffusion |
|
||||
return True |
|
||||
|
|
||||
|
|
||||
return False |
|
||||
|
|
||||
|
|
||||
VDXVF_BEGIN_SCRIPT_METHODS(SpatialForegroundRemoverFilter) |
|
||||
VDXVF_DEFINE_SCRIPT_METHOD(SpatialForegroundRemoverFilter, ScriptConfig, "iii") |
|
||||
VDXVF_END_SCRIPT_METHODS() |
|
||||
|
|
||||
SpatialForegroundRemoverFilter.~SpatialForegroundRemoverFilter() |
|
||||
if pmathstatic!=NULL: |
|
||||
delete pmathstatic |
|
||||
pmathstatic=NULL |
|
||||
|
|
||||
if fx_buffer!=NULL: |
|
||||
free(fx_buffer) |
|
||||
fx_buffer=NULL |
|
||||
|
|
||||
|
|
||||
|
|
||||
def GetParams(self): |
|
||||
if g_VFVAPIVersion >= 12: |
|
||||
switch(fa.src.mpPixmapLayout.format) |
|
||||
case nsVDXPixmap.kPixFormat_XRGB8888: |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV444_Planar: |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV422_Planar: |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV420_Planar: |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV411_Planar: |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV410_Planar: |
|
||||
break |
|
||||
default: |
|
||||
return FILTERPARAM_NOT_SUPPORTED |
|
||||
|
|
||||
|
|
||||
|
|
||||
fa.dst.offset = fa.src.offset |
|
||||
return FILTERPARAM_SUPPORTS_ALTFORMATS |
|
||||
|
|
||||
|
|
||||
|
|
||||
def Start(self): |
|
||||
#PReporting.setIsMegaDebug(True);#debug only |
|
||||
if (pmathstatic==NULL) pmathstatic=new PMathStatic();#PMathStatic pmathstatic |
|
||||
|
|
||||
fx_buffer_w=0 |
|
||||
fx_buffer_h=0 |
|
||||
fx_buffer_BytesPP=0 |
|
||||
fx_buffer_Stride=0 |
|
||||
fx_buffer=NULL |
|
||||
fx_buffer_BytesTotal=0 |
|
||||
time_t rawtime; ##include <ctime> #<time.h> |
|
||||
struct tm * timeinfo |
|
||||
time(&rawtime) |
|
||||
timeinfo=localtime(&rawtime) |
|
||||
cerr<<(timeinfo.tm_year+1900)<<"-"<<(timeinfo.tm_mon+1)<<"-"<<(timeinfo.tm_mday)<<" "<<timeinfo.tm_hour<<":"<<timeinfo.tm_min<<":"<<timeinfo.tm_sec<<endl |
|
||||
|
|
||||
|
|
||||
def DrawDebugSquareTo_fx_buffer(self): |
|
||||
for (int iDebug=0; iDebug<=fa.pfsi.lCurrentSourceFrame; iDebug++) |
|
||||
for (int yDebug=0; yDebug<=fa.pfsi.lCurrentSourceFrame; yDebug++) |
|
||||
if iDebug<fa.dst.w and yDebug<fa.dst.h: |
|
||||
int iLocDebug=yDebug*fx_buffer_Stride+iDebug*fx_buffer_BytesPP |
|
||||
fx_buffer[iLocDebug]=128 |
|
||||
if fx_buffer_BytesPP>2: |
|
||||
fx_buffer[iLocDebug+1]=128 |
|
||||
fx_buffer[iLocDebug+2]=128 |
|
||||
|
|
||||
#targaMask.arrbyData[yDebug*targaMask.Stride()+iDebug*targaMask.BytesPP()+mask_Channel]=255;#fx_buffer[iLocDebug+3]=255;#alpha |
|
||||
|
|
||||
|
|
||||
|
|
||||
}#end DrawDebugSquareTo_fx_buffer |
|
||||
def DrawDebugCircleTo_fx_buffer(self): |
|
||||
for (int iDebug=0; iDebug<PMath.ppiCache_Used and iDebug<fa.pfsi.lCurrentSourceFrame; iDebug++) |
|
||||
if PMath.ppiCache[iDebug].x<fa.dst.w and PMath.ppiCache[iDebug].y<fa.dst.h: |
|
||||
int iLocDebug=PMath.ppiCache[iDebug].y*fx_buffer_Stride+PMath.ppiCache[iDebug].x*fx_buffer_BytesPP |
|
||||
fx_buffer[iLocDebug]=255 |
|
||||
fx_buffer[iLocDebug+1]=255 |
|
||||
fx_buffer[iLocDebug+2]=255 |
|
||||
#targaMask.arrbyData[PMath.ppiCache[iDebug].y*targaMask.Stride()+PMath.ppiCache[iDebug].x*targaMask.BytesPP()+mask_Channel]=255;#fx_buffer[iLocDebug+3]=255;#alpha |
|
||||
}#if within range |
|
||||
}#debug only (result should be WHITE circle inside GRAY square) |
|
||||
|
|
||||
|
|
||||
def Run(self): |
|
||||
#PReporting.setIsUltraDebug(True) |
|
||||
#mConfig.mReach |
|
||||
#mConfig.mRadialSamples |
|
||||
#mConfig.mDiffusion |
|
||||
bool bHorizontalSearch=True |
|
||||
bool bVerticalSearch=False |
|
||||
|
|
||||
bool bUnknownPixelFormat=False |
|
||||
bool bGood=False |
|
||||
cerr<<"SpatialForegroundRemoverFilter.Run..."<<endl |
|
||||
try |
|
||||
#*fa.pfsi.lCurrentFrame#current sequence frame, called output frame |
|
||||
cerr<<"SpatialForegroundRemoverFilter.Run: frame "<<fa.pfsi.lCurrentSourceFrame<<"..."<<endl |
|
||||
string MaskFile_Name="" |
|
||||
string MaskFile_UserInput="spatialforegroundremover.tga";#in current working dir (which is the VirtualDub folder) |
|
||||
for (int iDigits=0; iDigits<10; iDigits++) |
|
||||
string sDigits=string("") |
|
||||
for (int iBuild=0; iBuild<iDigits; iBuild++) |
|
||||
sDigits+=string("0") |
|
||||
|
|
||||
string sFileTheoretical=string("spatialforegroundremover")+sDigits+string(".tga") |
|
||||
if File.Exists(sFileTheoretical) : |
|
||||
MaskFile_UserInput=sFileTheoretical |
|
||||
#cerr<<sFileTheoretical<<" sequence start frame found"<<endl |
|
||||
break |
|
||||
|
|
||||
#else cerr<<sFileTheoretical<<" sequence start frame not found"<<endl |
|
||||
|
|
||||
#string MaskFile_Test1="C:\\Documents and Settings\\Owner\\Desktop\\heal-mask1c-80662.tga" |
|
||||
#string MaskFile_Test2="E:\\Videos\\Projects\\etc\\OldFHC,The\\heal-mask1c-80662.tga" |
|
||||
if (File.Exists(MaskFile_UserInput)) MaskFile_Name=MaskFile_UserInput |
|
||||
#elif (File.Exists(MaskFile_Test1)) MaskFile_Name=MaskFile_Test1 |
|
||||
#elif (File.Exists(MaskFile_Test2)) MaskFile_Name=MaskFile_Test2 |
|
||||
if MaskFile_Name!="": |
|
||||
string MaskFile_CurrentOrPrev_AbsOrRelName=GetCurrentOrPrevFrameFor(MaskFile_Name,fa.pfsi.lCurrentFrame); #GetCurrentOrPrevFrameFor(MaskFile_Name,fa.pfsi.lCurrentSourceFrame) |
|
||||
cerr<<"SpatialForegroundRemoverFilter.Run: Loading Mask "<<MaskFile_CurrentOrPrev_AbsOrRelName<<"..."<<flush |
|
||||
bool bTest=self.targaMask.Load(MaskFile_CurrentOrPrev_AbsOrRelName) |
|
||||
cerr<<(bTest?"OK":"FAILED")<<endl |
|
||||
}#end if mask found |
|
||||
else: |
|
||||
cerr<<"SpatialForegroundRemoverFilter.Run: Using Mask (none, continue)"<<endl |
|
||||
|
|
||||
unsigned int mask_Channel=0; #NOTE: uses blue if mask is 32- or 24-bit |
|
||||
rRadialSampleSpacing = ((double)mConfig.mRadialSamples*360.0>1.0) ? (360.0/((double)mConfig.mRadialSamples*360.0)) : 360.0 |
|
||||
cerr<<"{Reach:"<<mConfig.mReach<<"; RadialSamples:"<<mConfig.mRadialSamples<<"; RadialSampleSpacing:"<<rRadialSampleSpacing<<"; Diffusion:"<<mConfig.mDiffusion<<"; PReporting.iDebugLevel:"<<PReporting.getDebugLevel()<<"}..."<<endl;#Console.Error.WriteLine(Convert.ToString("{Reach:")+Convert.ToString(mConfig.mReach)+Convert.ToString("; RadialSamples:")+Convert.ToString(mConfig.mRadialSamples)+Convert.ToString("; Diffusion:")+Convert.ToString(mConfig.mDiffusion)+Convert.ToString("}...")) |
|
||||
unsigned int vdpixmapSource_BytesPP=3 |
|
||||
#unsigned int targaTemp_BytesPP=4 |
|
||||
if g_VFVAPIVersion >= 12: |
|
||||
vdpixmapDest = *fa.dst.mpPixmap |
|
||||
vdpixmapSource = *fa.src.mpPixmap |
|
||||
#int sw |
|
||||
#int sh |
|
||||
#NOTES: |
|
||||
#-data and pitch are Y |
|
||||
#-data2 and pitch2 are Cb (U) |
|
||||
#-data3 and pitch3 are Cr (V) |
|
||||
|
|
||||
#Steps: |
|
||||
#-load targaMask: if loaded but frame is less than current frame, for a later one <= current |
|
||||
#-prepare fx_buffer (will become interleaved YUV444) |
|
||||
#-transfer dest frame to fx_buffer |
|
||||
# --if BGR24 then transfer using memcpy |
|
||||
# --if YUV (even if 444 since planar) then transfer using YUV4xxSubsampledPlanarToYUV444NonPlanar adding alpha channel |
|
||||
# --if BGRA32 transfer using CopySurface_BitdepthSensitive(fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,vdpixmapSource.data,vdpixmapSource_BytesPP,vdpixmapSource.pitch,h) |
|
||||
#-NOTE: after previous step it is fine for fx_buffer to be either YUV444 or RGB24 |
|
||||
#-DEPRECATED 2010-06: Create targaTemp (re-Init only if different size than dest), at 32-bit |
|
||||
#-calculate healed color for each pixel of the color channels of of 32-bit (YUV4444 or BGRA) targa where targaMask is nonzero |
|
||||
# --using fx_buffer |
|
||||
# --keep in mind that self may place YUV values into targa |
|
||||
# --NEW 2010-06: use mask to alpha blend the intensity of the effect |
|
||||
#-DEPRECATED 2010-06: copy value of targaMask to alpha channel of targaTemp |
|
||||
#-DEPRECATED 2010-06: overlay targaTemp to fx_buffer using alpha |
|
||||
#-NEW 2010-06: using the three appropriate CopyNonPlanarToPlane calls, healed fx_buffer directly to virtualdub dst planes. |
|
||||
#-if dest is (YUV444 non-planar [RARE] OR BGR24) copy fx_buffer directly to dest using memcpy |
|
||||
# --elif dest is BGRA32 copy using CopySurface_BitdepthSensitive(vdpixmapSource.data,vdpixmapSource_BytesPP,fx_buffer,fx_buffer_BytesPP,h*w) |
|
||||
# --else dest is neither YUV444 nor RGB nor RGBA: Copy using YUV444ToYUV4xx |
|
||||
|
|
||||
cerr<<"VirtualDub API version 12 or higher found"<<endl |
|
||||
CTBufferInit(vdpixmapSource.w,vdpixmapSource.h,4);#fx_buffer=malloc etc |
|
||||
|
|
||||
bool bShowDebugCircle=False;#to be changed below |
|
||||
bool bShowDebugSquare=False;#to be changed below |
|
||||
#bool bShowTargaTempDebugCircle |
|
||||
#bool bShowTargaTempDebugSquare |
|
||||
bool HasFullLumaRes=True |
|
||||
bool bSamplesOnSecondLine=False |
|
||||
switch(vdpixmapSource.format) |
|
||||
case nsVDXPixmap.kPixFormat_XRGB8888: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=4 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using xRGB32") |
|
||||
#NOTE: outermost "else" case should use same steps as self case! |
|
||||
# --EXCEPT accessing fa instead of *fa.dst.mpPixmap (a.k.a. vdpixmapSource) |
|
||||
CopySurface_BitdepthSensitive((unsigned char*)fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,(unsigned char*)vdpixmapSource.data,vdpixmapSource_BytesPP,vdpixmapSource.pitch,vdpixmapSource.w,vdpixmapSource.h) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
|
|
||||
#if PReporting.getIsUltraDebug(): # CopySurface_BitdepthSensitive((unsigned char*)targaTemp.arrbyData,targaTemp.BytesPP(),targaTemp.Stride(),(unsigned char*)vdpixmapSource.data,vdpixmapSource_BytesPP,vdpixmapSource.pitch,vdpixmapSource.w,vdpixmapSource.h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-ARGB32-debug.tga") |
|
||||
# |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_RGB888: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using RGB24") |
|
||||
memcpy(fx_buffer,vdpixmapSource.data,vdpixmapSource.h*vdpixmapSource.pitch) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
#if PReporting.getIsUltraDebug(): # CopySurface_BitdepthSensitive((unsigned char*)targaTemp.arrbyData,targaTemp.BytesPP(),targaTemp.Stride(),(unsigned char*)vdpixmapSource.data,vdpixmapSource_BytesPP,vdpixmapSource.pitch,vdpixmapSource.w,vdpixmapSource.h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-RGB24-debug.tga") |
|
||||
# |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV444_Planar: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:4:4 Planar") |
|
||||
HasFullLumaRes=True |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 0, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data, vdpixmapSource.pitch, vdpixmapSource.w, vdpixmapSource.h, HasFullLumaRes) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 1, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data2, vdpixmapSource.pitch2, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 2, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data3, vdpixmapSource.pitch3, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,False) |
|
||||
#if PReporting.getIsUltraDebug(): # YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, (targaTemp.BytesPP()>3)?True:False, False, fx_buffer, fx_buffer_w*fx_buffer_h) |
|
||||
# SaveRaw("debug-SpatialForegroundRemover-converted-to-YUV444NonPlanar.raw",(unsigned char*)fx_buffer,fx_buffer_Stride*fx_buffer_h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-YUV444-debug-to-RGB24.tga") |
|
||||
# YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV422_Planar: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:2:2 Planar") |
|
||||
HasFullLumaRes=True |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 0, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data, vdpixmapSource.pitch, vdpixmapSource.w, vdpixmapSource.h, HasFullLumaRes) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 1, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data2, vdpixmapSource.pitch2, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 2, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data3, vdpixmapSource.pitch3, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
#if PReporting.getIsUltraDebug(): # SaveRaw("debug-SpatialForegroundRemover-converted-to-YUV444NonPlanar.raw",(unsigned char*)fx_buffer,fx_buffer_Stride*fx_buffer_h) |
|
||||
# YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, False, False, fx_buffer, vdpixmapSource.w*vdpixmapSource.h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-YUV422Planes-debug-to-RGB24.tga") |
|
||||
# #YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
|
|
||||
#TransformY8(vdpixmapDest.data, vdpixmapDest.pitch, vdpixmapDest.w, vdpixmapDest.h, mConfig.mYScale) |
|
||||
#sw = (vdpixmapSource.w + 1) >> 1 |
|
||||
#sh = vdpixmapSource.h |
|
||||
#TransformY8(vdpixmapDest.data2, vdpixmapDest.pitch2, sw, sh, mConfig.mUScale) |
|
||||
#TransformY8(vdpixmapDest.data3, vdpixmapDest.pitch3, sw, sh, mConfig.mVScale) |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV420_Planar: |
|
||||
bSamplesOnSecondLine=False |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:2:0 Planar") |
|
||||
HasFullLumaRes=True |
|
||||
#NOTE: fx_buffer is 32-bit (see CTBufferInit(...) call above) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 0, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data, vdpixmapSource.pitch, vdpixmapSource.w, vdpixmapSource.h, HasFullLumaRes) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 1, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data2, vdpixmapSource.pitch2, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 2, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data3, vdpixmapSource.pitch3, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
#PReporting.setIsUltraDebug(True);#debug only |
|
||||
#if PReporting.getIsUltraDebug(): #SaveRaw("debug-SpatialForegroundRemover-converted-to-YUV444NonPlanar.raw",(unsigned char*)fx_buffer,fx_buffer_Stride*fx_buffer_h) |
|
||||
#YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, False, False, fx_buffer, vdpixmapSource.w*vdpixmapSource.h) |
|
||||
|
|
||||
#targaTemp.Save("SpatialForegroundRemover-YUV420-debug-YUV420Planes-to-RGB.tga") |
|
||||
#YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
#TODO: |
|
||||
#--DEPRECATED 2010-06: copy (without alpha) fx_buffer (444 or BGR) onto targaTemp BGR |
|
||||
# (need copy before healing; healed fx_buffer will be drawn onto it using mask) |
|
||||
#Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Copy to targaTemp") |
|
||||
if PReporting.getIsUltraDebug(): |
|
||||
if fx_buffer_BytesPP>3: |
|
||||
unsigned char* lpLineNow=fx_buffer |
|
||||
unsigned char* lpNow |
|
||||
for (unsigned int y=0; y<fx_buffer_h; y++) |
|
||||
lpNow=lpLineNow |
|
||||
for (unsigned int x=0; x<fx_buffer_w; x++) |
|
||||
lpNow[3]=255 |
|
||||
lpNow+=fx_buffer_BytesPP |
|
||||
}#end for x |
|
||||
lpLineNow+=fx_buffer_Stride |
|
||||
}#end for y |
|
||||
}#end if fx_buffer has alpha channel |
|
||||
}#end if bUltraDebug |
|
||||
#CopySurface_BitdepthSensitive(targaTemp.arrbyData, targaTemp.BytesPP(), targaTemp.Stride(), fx_buffer, fx_buffer_BytesPP, fx_buffer_Stride, fx_buffer_w, fx_buffer_h) |
|
||||
#if PReporting.getIsUltraDebug(): # targaTemp.Save("SpatialForegroundRemover-YUV420-debug1-YUV420Planes-to-RGB.tga") |
|
||||
# |
|
||||
#--heal fx_buffer |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: heal fx_buffer...") |
|
||||
#PReporting.setIsUltraDebug(True);#debug only |
|
||||
#Heal_WithAveraging_Sequential |
|
||||
Heal_WithAveraging_Permutations(fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,targaMask.arrbyData,targaMask.BytesPP(),targaMask.Stride(),mask_Channel,fx_buffer_w,fx_buffer_h,(double)mConfig.mReach,rRadialSampleSpacing,(double)mConfig.mDiffusion, bHorizontalSearch, bVerticalSearch) |
|
||||
#Console.Error.Write("debugging frame "+Convert.ToString(fa.pfsi.lCurrentSourceFrame)) |
|
||||
#Console.Error.WriteLine("done. (debug circle drawing)") |
|
||||
#Heal_ToNearestPixel(fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,targaMask.arrbyData,targaMask.BytesPP(),targaMask.Stride(),mask_Channel,fx_buffer_w,fx_buffer_h,(double)mConfig.mReach,rRadialSampleSpacing,(double)mConfig.mDiffusion) |
|
||||
#if PReporting.getIsUltraDebug(): # #NOTE: copying to targaTemp at self point causes debug to be DESTRUCTIVE |
|
||||
# #CopySurface_BitdepthSensitive(targaTemp.arrbyData, targaTemp.BytesPP(), targaTemp.Stride(), fx_buffer, fx_buffer_BytesPP, fx_buffer_Stride, fx_buffer_w, fx_buffer_h) |
|
||||
# #SaveRaw("SpatialForegroundRemover-YUV420-debug-YUV420Planes-to-RGB-AFTERHEAL.raw",(unsigned char*)fx_buffer,vdpixmapSource.w*vdpixmapSource.h*fx_buffer_BytesPP) |
|
||||
# #targaTemp.Save("SpatialForegroundRemover-YUV420-debug-YUV420Planes-to-RGB-AFTERHEAL-DESTRUCTIVEDEBUG.tga") |
|
||||
# Targa targaDebug |
|
||||
# targaDebug.From(fx_buffer_w,fx_buffer_h,fx_buffer_BytesPP,fx_buffer,False) |
|
||||
# #targaDebug.Init(fx_buffer_w,fx_buffer_h,fx_buffer_BytesPP,True) |
|
||||
# #targaDebug.CopyBufferFrom(fx_buffer) |
|
||||
# targaDebug.Save("SpatialForegroundRemover-YUV420-debug2-HEAL-STEP1of2-fx_buffer.tga") |
|
||||
# targaMask.Save("SpatialForegroundRemover-YUV420-debug0-MASK.tga") |
|
||||
# |
|
||||
#--DEPRECATED 2010-06: overlay (with targaMask as alpha) healed fx_buffer (444 or BGR) onto targaTemp BGR |
|
||||
#Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: overlay healed channels to targaTemp using targaMask...") |
|
||||
#PImage.Draw(targaTemp.arrbyData,0,0,targaTemp.Width(),targaTemp.Height(),targaTemp.BytesPP(),targaTemp.Stride(),fx_buffer,fx_buffer_w,fx_buffer_h,fx_buffer_BytesPP,fx_buffer_Stride,targaMask.arrbyData,targaMask.BytesPP(),targaMask.Stride(),mask_Channel) |
|
||||
#if PReporting.getIsUltraDebug(): # targaTemp.Save("SpatialForegroundRemover-YUV420-debug3-HEAL-STEP2of2-444-after-overlay.tga") |
|
||||
# |
|
||||
|
|
||||
if PReporting.getIsMegaDebug(): |
|
||||
bShowDebugCircle=True |
|
||||
|
|
||||
if bShowDebugSquare: |
|
||||
DrawDebugSquareTo_fx_buffer() |
|
||||
}#end if bShowDebugSquare |
|
||||
#Console.Error.Write("...") |
|
||||
if bShowDebugCircle: |
|
||||
PReporting.setParticiple("showing debug circle") |
|
||||
DrawDebugCircleTo_fx_buffer() |
|
||||
}#end if bShowDebugCircle |
|
||||
#--DEPRECATED 2010-06: copy non-planar targaTemp (444 or BGR) channels onto vdpixmapDest planes |
|
||||
#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data,vdpixmapDest.pitch,HasFullLumaRes,targaTemp.arrbyData,0,targaTemp.BytesPP(),targaTemp.Width(),targaTemp.Height());#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data,vdpixmapDest.pitch,bSamplesOnSecondLine,fx_buffer,0,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data2,vdpixmapDest.pitch2,bSamplesOnSecondLine,targaTemp.arrbyData,1,targaTemp.BytesPP(),targaTemp.Width(),targaTemp.Height());#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data2,vdpixmapDest.pitch2,bSamplesOnSecondLine,fx_buffer,1,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data3,vdpixmapDest.pitch3,bSamplesOnSecondLine,targaTemp.arrbyData,2,targaTemp.BytesPP(),targaTemp.Width(),targaTemp.Height());#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data3,vdpixmapDest.pitch3,bSamplesOnSecondLine,fx_buffer,2,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
#--NEW 2010-06: copy fx_buffer non-planar channels to vdpixmapDest planes |
|
||||
#Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: copy channels to video planes...") |
|
||||
PReporting.setParticiple("copying planes") |
|
||||
CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data,vdpixmapDest.pitch,HasFullLumaRes,fx_buffer,0,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h);#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data,vdpixmapDest.pitch,bSamplesOnSecondLine,fx_buffer,0,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data2,vdpixmapDest.pitch2,bSamplesOnSecondLine,fx_buffer,1,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h);#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data2,vdpixmapDest.pitch2,bSamplesOnSecondLine,fx_buffer,1,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data3,vdpixmapDest.pitch3,bSamplesOnSecondLine,fx_buffer,2,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h);#CopyNonPlanarToPlane((unsigned char*)vdpixmapDest.data3,vdpixmapDest.pitch3,bSamplesOnSecondLine,fx_buffer,2,fx_buffer_BytesPP,fx_buffer_w,fx_buffer_h) |
|
||||
if PReporting.getIsMegaDebug()) Console.Error.WriteLine("Finished case for YUV420Planes-to-RGB in SpatialForegroundRemover": |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV411_Planar: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:1:1") |
|
||||
HasFullLumaRes=True |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 0, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data, vdpixmapSource.pitch, vdpixmapSource.w, vdpixmapSource.h, HasFullLumaRes) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 1, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data2, vdpixmapSource.pitch2, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 2, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data3, vdpixmapSource.pitch3, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
#if PReporting.getIsUltraDebug(): # SaveRaw("SpatialForegroundRemover-converted-to-YUV444NonPlanar.raw",(unsigned char*)fx_buffer,fx_buffer_Stride*fx_buffer_h) |
|
||||
# YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, False, False, fx_buffer, vdpixmapSource.w*vdpixmapSource.h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-YUV420-debug-YUV411Planes-to-RGB.tga") |
|
||||
# #YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
#TransformY8(vdpixmapDest.data, vdpixmapDest.pitch, vdpixmapDest.w, vdpixmapDest.h, mConfig.mReach) |
|
||||
|
|
||||
#sw = (vdpixmapSource.w + 3) >> 2 |
|
||||
#sh = vdpixmapSource.h |
|
||||
#TransformY8(vdpixmapDest.data2, vdpixmapDest.pitch2, sw, sh, mConfig.mUScale) |
|
||||
#TransformY8(vdpixmapDest.data3, vdpixmapDest.pitch3, sw, sh, mConfig.mVScale) |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV410_Planar: |
|
||||
bSamplesOnSecondLine=False |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:1:0") |
|
||||
HasFullLumaRes=True |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 0, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data, vdpixmapSource.pitch, vdpixmapSource.w, vdpixmapSource.h, HasFullLumaRes) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 1, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data2, vdpixmapSource.pitch2, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
CopyPlaneToNonPlanar(fx_buffer, 2, fx_buffer_BytesPP, (unsigned char*)vdpixmapSource.data3, vdpixmapSource.pitch3, vdpixmapSource.w, vdpixmapSource.h, bSamplesOnSecondLine) |
|
||||
|
|
||||
#targaTemp.Init(vdpixmapSource.w,vdpixmapSource.h,targaTemp_BytesPP,True) |
|
||||
#if PReporting.getIsUltraDebug(): # SaveRaw("debug-SpatialForegroundRemover-converted-to-YUV444NonPlanar.raw",(unsigned char*)fx_buffer,fx_buffer_Stride*fx_buffer_h) |
|
||||
# YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, False, False, fx_buffer, vdpixmapSource.w*vdpixmapSource.h) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-YUV420-debug-YUV410Planes-to-RGB.tga") |
|
||||
# #YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
#TransformY8(vdpixmapDest.data, vdpixmapDest.pitch, vdpixmapDest.w, vdpixmapDest.h, mConfig.mReach) |
|
||||
|
|
||||
#sw = (vdpixmapSource.w + 3) >> 2 |
|
||||
#sh = (vdpixmapSource.h + 3) >> 2 |
|
||||
#TransformY8(vdpixmapDest.data2, vdpixmapDest.pitch2, sw, sh, mConfig.mUScale) |
|
||||
#TransformY8(vdpixmapDest.data3, vdpixmapDest.pitch3, sw, sh, mConfig.mVScale) |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV422_UYVY: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:2:2 UYVY") |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run Error: has not yet implemented YUV422_UYVY") |
|
||||
break |
|
||||
case nsVDXPixmap.kPixFormat_YUV422_YUYV: |
|
||||
bSamplesOnSecondLine=True |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run: Using YUV 4:2:2 YUYV") |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run Error: has not yet implemented YUV422_YUYV") |
|
||||
break |
|
||||
default: |
|
||||
Console.Error.WriteLine("SpatialForegroundRemoverFilter.Run Error: has not yet implemented less than 24-bit (has only 24- and 32-bit YUV and RGB formats)") |
|
||||
bUnknownPixelFormat=True |
|
||||
break |
|
||||
}#end switch |
|
||||
bGood=True |
|
||||
if (bUnknownPixelFormat) bGood=False |
|
||||
|
|
||||
else: |
|
||||
vdpixmapSource_BytesPP=3 |
|
||||
cerr<<"SpatialForegroundRemoverFilter.Run: using VirtualDub API less than 12"<<endl |
|
||||
CopySurface_BitdepthSensitive(fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,(unsigned char*)fa.dst.data,vdpixmapSource_BytesPP,fa.dst.pitch,fa.dst.w,fa.dst.h) |
|
||||
Heal_WithAveraging_Sequential(fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,targaMask.arrbyData,targaMask.BytesPP(),targaMask.Stride(),mask_Channel,fx_buffer_w,fx_buffer_h,(double)mConfig.mReach,rRadialSampleSpacing,(double)mConfig.mDiffusion) |
|
||||
CopySurface_BitdepthSensitive((unsigned char*)fa.dst.data,vdpixmapSource_BytesPP,fa.dst.pitch,fx_buffer,fx_buffer_BytesPP,fx_buffer_Stride,fx_buffer_w,fx_buffer_h) |
|
||||
#targaTemp.Init(fa.dst.w,fa.dst.h,targaTemp_BytesPP,True) |
|
||||
#if PReporting.getIsUltraDebug(): # CopySurface_BitdepthSensitive((unsigned char*)targaTemp.arrbyData, targaTemp.BytesPP(), targaTemp.Stride(), (unsigned char*)fa.dst.data, vdpixmapSource_BytesPP, fa.dst.pitch, fa.dst.w, fa.dst.h);#YUV444NonPlanarToRGB((unsigned char*)targaTemp.arrbyData, False, False, (unsigned char*)fa.dst.data, fa.dst.h*fa.dst.w) |
|
||||
# targaTemp.Save("SpatialForegroundRemover-RGB(VirtualDub API less than 12)-debug-RGB-to-RGB.tga") |
|
||||
# #YUV444NonPlanarToRGB(targaTemp.arrbyData,fx_buffer,targaTemp.BytesBuffer) |
|
||||
# |
|
||||
bGood=True |
|
||||
|
|
||||
|
|
||||
catch (exception& exn) |
|
||||
bGood=False |
|
||||
PReporting.ShowExn(exn,"","SpatialForegroundRemover.Run") |
|
||||
|
|
||||
catch (...) |
|
||||
bGood=False |
|
||||
PReporting.ShowUnknownExn("","SpatialForegroundRemover.Run") |
|
||||
|
|
||||
if PReporting.getIsUltraDebug(): |
|
||||
Console.Error.WriteLine((bGood?"OK(SpatialForegroundRemover.Run)":"FAILED(SpatialForegroundRemover.Run)")) |
|
||||
Console.Error.WriteLine("Colorspace Conversion debugging info:") |
|
||||
Console.Error.WriteLine(Convert.ToString("YCToRgb source (byte to float direct cast) range {") |
|
||||
+Convert.ToString("Y:")+Convert.ToString(YCToRgb_fMinY)+"to"+Convert.ToString(YCToRgb_fMaxY)+Convert.ToString("; ") |
|
||||
+Convert.ToString("U:")+Convert.ToString(YCToRgb_fMinU)+"to"+Convert.ToString(YCToRgb_fMaxU)+Convert.ToString("; ") |
|
||||
+Convert.ToString("V:")+Convert.ToString(YCToRgb_fMinV)+"to"+Convert.ToString(YCToRgb_fMaxV)+Convert.ToString("; ") |
|
||||
+"}") |
|
||||
Console.Error.WriteLine(Convert.ToString("YCToRgb destination (float to byte) range {") |
|
||||
+Convert.ToString("r:")+Convert.ToString(YCToRgb_byMinR)+"to"+Convert.ToString(YCToRgb_byMaxR)+Convert.ToString("; ") |
|
||||
+Convert.ToString("g:")+Convert.ToString(YCToRgb_byMinG)+"to"+Convert.ToString(YCToRgb_byMaxG)+Convert.ToString("; ") |
|
||||
+Convert.ToString("b:")+Convert.ToString(YCToRgb_byMinB)+"to"+Convert.ToString(YCToRgb_byMaxB)+Convert.ToString("; ") |
|
||||
+"}") |
|
||||
Console.Error.WriteLine(Convert.ToString("RgbToYC destination (byte to float will be rounded to byte) range {") |
|
||||
+Convert.ToString("y:")+Convert.ToString(RgbToYC_fMinY)+"to"+Convert.ToString(RgbToYC_fMaxY)+Convert.ToString("; ") |
|
||||
+Convert.ToString("u:")+Convert.ToString(RgbToYC_fMinU)+"to"+Convert.ToString(RgbToYC_fMaxU)+Convert.ToString("; ") |
|
||||
+Convert.ToString("v:")+Convert.ToString(RgbToYC_fMinV)+"to"+Convert.ToString(RgbToYC_fMaxV)+Convert.ToString("; ") |
|
||||
+"}") |
|
||||
|
|
||||
if (PReporting.getIsMegaDebug()) cerr<<endl<<endl |
|
||||
return |
|
||||
}#end SpatialForegroundRemoverFilter.Run |
|
||||
|
|
||||
def Configure(self, hwnd): |
|
||||
SpatialForegroundRemoverFilterDialog dlg(mConfig, fa.ifp) |
|
||||
return dlg.Show((HWND)hwnd) |
|
||||
|
|
||||
|
|
||||
def GetSettingString(self, *buf, maxlen): |
|
||||
SafePrintf(buf, maxlen, " (Reach%.1f%%, RSamples%.1f%%, Diffusion%.1f%%)" |
|
||||
, mConfig.mReach * 100.0f |
|
||||
, mConfig.mRadialSamples * 100.0f |
|
||||
, mConfig.mDiffusion * 100.0f |
|
||||
) |
|
||||
|
|
||||
|
|
||||
def GetScriptString(self, *buf, maxlen): |
|
||||
SafePrintf(buf, maxlen, "Config(%u, %u, %u)" |
|
||||
, (unsigned)(mConfig.mReach * 1000.0f + 0.5f) |
|
||||
, (unsigned)(mConfig.mRadialSamples * 1000.0f + 0.5f) |
|
||||
, (unsigned)(mConfig.mDiffusion * 1000.0f + 0.5f) |
|
||||
) |
|
||||
|
|
||||
|
|
||||
def ScriptConfig(self, *isi, *argv, argc): |
|
||||
mConfig.mReach = argv[0].asInt() / 1000.0f |
|
||||
mConfig.mRadialSamples = argv[1].asInt() / 1000.0f |
|
||||
mConfig.mDiffusion = argv[2].asInt() / 1000.0f |
|
||||
|
|
||||
|
|
||||
def CTBufferInit(self, int w, int h, int BytesPP): |
|
||||
self.fx_buffer_BytesPP=BytesPP |
|
||||
self.fx_buffer_h=h |
|
||||
self.fx_buffer_w=w |
|
||||
self.fx_buffer_Stride=self.fx_buffer_BytesPP*self.fx_buffer_w |
|
||||
if (self.fx_buffer==NULL: |
|
||||
or (self.fx_buffer_BytesTotal!=(self.fx_buffer_h*self.fx_buffer_Stride)) ) |
|
||||
if self.fx_buffer!=NULL: |
|
||||
free(self.fx_buffer) |
|
||||
self.fx_buffer=NULL |
|
||||
|
|
||||
self.fx_buffer_BytesTotal=self.fx_buffer_h*self.fx_buffer_Stride |
|
||||
self.fx_buffer=(unsigned char*)malloc(self.fx_buffer_BytesTotal) |
|
||||
|
|
||||
}#end CTBufferInit |
|
||||
|
|
||||
#######################################/ |
|
||||
|
|
||||
extern filterDef_SpatialForegroundRemover = VDXVideoFilterDefinition<SpatialForegroundRemoverFilter>("ProtoArmor", "Spatial Foreground Remover", "Removes the destination's foreground at pixels that are non-zero in the specified mask by gathering information from the surrounding destination pixels where mask's pixel value is zero.") |
|
@ -1,86 +0,0 @@ |
|||||
#ifndef F_SPATIALFOREGROUNDREMOVER_H |
|
||||
#define F_SPATIALFOREGROUNDREMOVER_H |
|
||||
|
|
||||
#include <cstdio> |
|
||||
#include <string> |
|
||||
|
|
||||
#include "targa.h" |
|
||||
#include "colorspacetransform.h" |
|
||||
|
|
||||
using namespace std |
|
||||
using namespace ProtoArmor |
|
||||
|
|
||||
class SpatialForegroundRemoverFilterConfig |
|
||||
public: |
|
||||
SpatialForegroundRemoverFilterConfig() |
|
||||
: mReach(1.0f) |
|
||||
, mRadialSamples(1.0f) |
|
||||
, mDiffusion(1.0f) |
|
||||
|
|
||||
|
|
||||
public: |
|
||||
float mReach |
|
||||
float mRadialSamples |
|
||||
float mDiffusion |
|
||||
|
|
||||
|
|
||||
#######################################/ |
|
||||
|
|
||||
class SpatialForegroundRemoverFilterDialog : public VDXVideoFilterDialog |
|
||||
public: |
|
||||
SpatialForegroundRemoverFilterDialog(SpatialForegroundRemoverFilterConfig& config, *ifp) : mConfig(config), mifp(ifp) { |
|
||||
|
|
||||
bool Show(HWND parent) |
|
||||
return 0 != VDXVideoFilterDialog.Show(NULL, MAKEINTRESOURCE(IDD_FILTER_SPATIALFOREGROUNDREMOVER), parent) |
|
||||
|
|
||||
|
|
||||
virtual INT_PTR DlgProc(UINT msg, wParam, lParam) |
|
||||
|
|
||||
protected: |
|
||||
bool OnInit() |
|
||||
bool OnCommand(int cmd) |
|
||||
void OnDestroy() |
|
||||
|
|
||||
void LoadFromConfig() |
|
||||
bool SaveToConfig() |
|
||||
|
|
||||
SpatialForegroundRemoverFilterConfig& mConfig |
|
||||
SpatialForegroundRemoverFilterConfig mOldConfig |
|
||||
IVDXFilterPreview * mifp |
|
||||
|
|
||||
|
|
||||
#######################################/ |
|
||||
|
|
||||
class SpatialForegroundRemoverFilter : public VDXVideoFilter |
|
||||
public: |
|
||||
virtual uint32 GetParams() |
|
||||
virtual void Start() |
|
||||
virtual void Run() |
|
||||
virtual bool Configure(VDXHWND hwnd) |
|
||||
virtual void GetSettingString(char *buf, maxlen) |
|
||||
virtual void GetScriptString(char *buf, maxlen) |
|
||||
|
|
||||
VDXVF_DECLARE_SCRIPT_METHODS() |
|
||||
~SpatialForegroundRemoverFilter() |
|
||||
private: |
|
||||
Targa targaTemp |
|
||||
Targa targaMask |
|
||||
void DrawDebugCircleTo_fx_buffer() |
|
||||
void DrawDebugSquareTo_fx_buffer() |
|
||||
|
|
||||
protected: |
|
||||
unsigned int fx_buffer_w |
|
||||
unsigned int fx_buffer_h |
|
||||
unsigned int fx_buffer_BytesPP |
|
||||
unsigned int fx_buffer_Stride |
|
||||
unsigned int fx_buffer_BytesTotal |
|
||||
unsigned char* fx_buffer |
|
||||
|
|
||||
void ScriptConfig(IVDXScriptInterpreter *isi, *argv, argc) |
|
||||
|
|
||||
void CTBufferInit(unsigned int w, int h, int BytesPP) |
|
||||
|
|
||||
SpatialForegroundRemoverFilterConfig mConfig |
|
||||
|
|
||||
|
|
||||
#endif |
|
@ -1,7 +0,0 @@ |
|||||
#include <vd2/VDXFrame/VideoFilterEntry.h> |
|
||||
|
|
||||
VDX_DECLARE_VIDEOFILTERS_BEGIN() |
|
||||
VDX_DECLARE_VIDEOFILTER(filterDef_SpatialForegroundRemover) |
|
||||
VDX_DECLARE_VIDEOFILTERS_END() |
|
||||
|
|
||||
VDX_DECLARE_VFMODULE() |
|
@ -1,274 +0,0 @@ |
|||||
#ifndef PIMAGE_CPP |
|
||||
#define PIMAGE_CPP |
|
||||
|
|
||||
#include "pimage.h" |
|
||||
#include "pmath.h" |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
bool PImage.bPushToNearest_ShowMaskChannelError=True |
|
||||
bool PImage.bPushToNearestNondirectional_ShowMaskChannelError=True |
|
||||
#/<summary> |
|
||||
#/Returns nearest pixel where channel mask_Channel is outside mask_Threshold |
|
||||
#/xStart, should normally be a pixel center (will be rounded to find pixel location) |
|
||||
#/(nondirectional overload) |
|
||||
#/</summary> |
|
||||
#/<param name="xStart"></param> |
|
||||
#/<param name="yStart"></param> |
|
||||
#/<return>returns False if edge was found before a near pixel was found</return> |
|
||||
def PushToNearest(self, xStart, yStart, mask, int mask_w, int mask_h, int mask_BytesPP, int mask_Stride, int mask_Channel, mask_Threshold, bGreaterThanThreshold_FalseForLessThan): |
|
||||
bool bFound=False |
|
||||
if mask_Channel>=mask_BytesPP: |
|
||||
if bPushToNearestNondirectional_ShowMaskChannelError: |
|
||||
Console.Error.WriteLine("PushToNearest [nondirectional version] error: channel index "+Convert.ToString(mask_Channel)+" (starting from 0) does not exist in "+Convert.ToString(mask_BytesPP*8)+"-bit ("+Convert.ToString(mask_BytesPP)+" bytes per pixel) image--last channel will be used. This message will only be shown once") |
|
||||
bPushToNearestNondirectional_ShowMaskChannelError=False |
|
||||
|
|
||||
mask_Channel=mask_BytesPP-1 |
|
||||
|
|
||||
#double closest_Dist=DBL_MAX |
|
||||
#double closest_X=-1 |
|
||||
#double closest_Y=-1 |
|
||||
double mask_rH=(double)mask_h |
|
||||
double mask_rW=(double)mask_w |
|
||||
double pointNow_Dist=-1.0 |
|
||||
#unsigned int uiLoc |
|
||||
#unsigned int uiLineLoc=mask_Channel |
|
||||
double rRadNow=0.0 |
|
||||
double rRadMax=0.0 |
|
||||
double dAbsNow;#just for caching Abs method result |
|
||||
#NOTE: Since checks distance to all corners, |
|
||||
# still works if xStart, is outside of image. |
|
||||
dAbsNow=PMath.Dist(xStart,yStart,0.0,0.0) |
|
||||
if (dAbsNow>rRadMax) rRadMax=dAbsNow |
|
||||
dAbsNow=PMath.Dist(xStart,yStart,0.0,mask_rH) |
|
||||
if (dAbsNow>rRadMax) rRadMax=dAbsNow |
|
||||
dAbsNow=PMath.Dist(xStart,yStart,mask_rW,0.0) |
|
||||
if (dAbsNow>rRadMax) rRadMax=dAbsNow |
|
||||
dAbsNow=PMath.Dist(xStart,yStart,mask_rW,mask_rH) |
|
||||
if (dAbsNow>rRadMax) rRadMax=dAbsNow |
|
||||
double rDegPerPix |
|
||||
double rAngleNow |
|
||||
double xNow=xStart |
|
||||
double yNow=yStart |
|
||||
unsigned int xRound=(unsigned int)(xNow+.5) |
|
||||
unsigned int yRound=(unsigned int)(yNow+.5) |
|
||||
if not (xRound<0orxRound>=mask_woryRound<0oryRound>=mask_h): |
|
||||
if ( bGreaterThanThreshold_FalseForLessThan |
|
||||
? (mask[yRound*mask_Stride+xRound*mask_BytesPP+mask_Channel]>mask_Threshold) |
|
||||
: (mask[yRound*mask_Stride+xRound*mask_BytesPP+mask_Channel]<mask_Threshold) ) |
|
||||
xStart=(double)xRound |
|
||||
yStart=(double)yRound |
|
||||
bFound=True |
|
||||
|
|
||||
|
|
||||
double rRadAdd=.5 |
|
||||
if ( ((double)xRound!=xStart) or ((double)yRound!=yStart) ) rRadAdd=.25; #in case start is on border |
|
||||
#unsigned int xRoundPrev=0 |
|
||||
#unsigned int yRoundPrev=-1 |
|
||||
if not bFound: |
|
||||
for (rRadNow=rRadAdd; rRadNow<=rRadMax; rRadNow+=rRadAdd) |
|
||||
rDegPerPix=PMath.DegreesPerPixelAt(rRadNow) |
|
||||
if rDegPerPix>0.0: |
|
||||
for (rAngleNow=0.0; rAngleNow<360.0; rAngleNow+=rDegPerPix) |
|
||||
xNow=xStart+PMath.XOfRThetaDeg(rRadNow,rAngleNow) |
|
||||
yNow=yStart+PMath.YOfRThetaDeg(rRadNow,rAngleNow) |
|
||||
xRound=(unsigned int)(xNow+.5) |
|
||||
yRound=(unsigned int)(yNow+.5) |
|
||||
if not (xRound<0orxRound>=mask_woryRound<0oryRound>=mask_h): |
|
||||
if ( bGreaterThanThreshold_FalseForLessThan |
|
||||
? (mask[yRound*mask_Stride+xRound*mask_BytesPP+mask_Channel]>mask_Threshold) |
|
||||
: (mask[yRound*mask_Stride+xRound*mask_BytesPP+mask_Channel]<mask_Threshold) ) |
|
||||
xStart=(double)xRound |
|
||||
yStart=(double)yRound |
|
||||
bFound=True |
|
||||
break |
|
||||
}#end if match (outside threshold) |
|
||||
}#end if in range |
|
||||
}#end for rAngleNow |
|
||||
}#end if rDegPerPix>0.0 |
|
||||
else: |
|
||||
if PReporting.getIsMegaDebug()) Console.Error.WriteLine("PushToClosest error: rDegPerPix too small {rDegPerPix"+Convert.ToString(rDegPerPix)+"}": |
|
||||
|
|
||||
if (bFound) break |
|
||||
}#end for rRadNow |
|
||||
}#end if not matched (i.e. if not already on the pixel) |
|
||||
''' |
|
||||
for (double y=0; y<mask_rH; y+=1.0) uiLoc=uiLineLoc |
|
||||
for (double x=0; x<mask_rW; x+=1.0) if ( bGreaterThanThreshold_FalseForLessThan |
|
||||
? (mask[uiLoc]>mask_Threshold) |
|
||||
: (mask[uiLoc]<mask_Threshold) ) pointNow_Dist=PMath.Dist(x,y,xStart,yStart) |
|
||||
if pointNow_Dist<closest_Dist: closest_Dist=pointNow_Dist |
|
||||
closest_X=x |
|
||||
closest_X=y |
|
||||
bFound=True |
|
||||
|
|
||||
}#end if outside threshold color |
|
||||
uiLoc+=mask_BytesPP |
|
||||
}#end for x |
|
||||
uiLineLoc+=mask_Stride |
|
||||
}#end for y |
|
||||
if bFound: xStart=closest_X |
|
||||
yStart=closest_Y |
|
||||
|
|
||||
''' |
|
||||
return bFound |
|
||||
}#end PushToNearest nondirectional version |
|
||||
#/<summary> |
|
||||
#/Returns nearest pixel where channel mask_Channel is outside mask_Threshold, |
|
||||
#only looking at pixels on the line at the given angle rDirection_Deg |
|
||||
#/xStart, should normally be a pixel center (will be rounded to find pixel location) |
|
||||
#/; directional overload; does not work with out-of-range starting point (checked after rounding) |
|
||||
#/</summary> |
|
||||
#/<param name="xStart"></param> |
|
||||
#/<param name="yStart"></param> |
|
||||
#/<return>returns False if edge was found before a near pixel was found</return> |
|
||||
def PushToNearest(self, xStart, yStart, rDirection_Deg, mask, int mask_w, int mask_h, int mask_BytesPP, int mask_Stride, int mask_Channel, mask_Threshold, bGreaterThanThreshold_FalseForLessThan): |
|
||||
bool bFound=False |
|
||||
if mask_Channel>=mask_BytesPP: |
|
||||
if bPushToNearest_ShowMaskChannelError: |
|
||||
Console.Error.WriteLine("PushToNearest(...,direction,...): error, index "+Convert.ToString(mask_Channel)+" (starting from 0) does not exist in "+Convert.ToString(mask_BytesPP*8)+"-bit ("+Convert.ToString(mask_BytesPP)+" bytes per pixel) image--last channel will be used. This message will only be shown once") |
|
||||
bPushToNearest_ShowMaskChannelError=False |
|
||||
|
|
||||
mask_Channel=mask_BytesPP-1 |
|
||||
|
|
||||
#double xStart, yStart, rDirection_Deg |
|
||||
#byte* mask |
|
||||
#uint mask_w, mask_h |
|
||||
#uint mask_BytesPP |
|
||||
#uint mask_Stride |
|
||||
#uint mask_Channel |
|
||||
#byte mask_Threshold #mask_Needlean |
|
||||
double dSubsampleSpacing=.125;#not 1 since could be intersecting pixels at any point (.125 is 8x subsampling) |
|
||||
#use int to avoid out-of-range starting point |
|
||||
int ixStart |
|
||||
int iyStart |
|
||||
unsigned int uiLoc |
|
||||
int mask_iW=(int)mask_w |
|
||||
int mask_iH=(int)mask_h |
|
||||
do |
|
||||
ixStart=(int)(xStart+.5); #+.5 for rounding |
|
||||
iyStart=(int)(yStart+.5); #+.5 for rounding |
|
||||
if (ixStart<0 or ixStart>=mask_iW or iyStart<0 or iyStart>=mask_iH) break |
|
||||
#if ixStart>=0 and ixStart<mask_iW and iyStart>=0 and iyStart<mask_iH: uiLoc=iyStart*mask_Stride+ixStart*mask_BytesPP+mask_Channel |
|
||||
if ( bGreaterThanThreshold_FalseForLessThan |
|
||||
?(mask[uiLoc]>mask_Threshold) |
|
||||
:(mask[uiLoc]<mask_Threshold) ) |
|
||||
bFound=True |
|
||||
break |
|
||||
|
|
||||
# |
|
||||
#else break |
|
||||
PMath.Travel2d(xStart,yStart,rDirection_Deg,dSubsampleSpacing) |
|
||||
|
|
||||
while (not bFound) |
|
||||
return bFound |
|
||||
}#end PushToNearest |
|
||||
#/<summary> |
|
||||
#/Draws to src0 to dest0 at (xDestStart,yDestStart) using mask0 as alpha for source |
|
||||
#--alpha is neither modified on dest0 nor used from src0 |
|
||||
#/</summary> |
|
||||
#/<param name="mask0">must be same size as source</param> |
|
||||
def Draw(self, char* dest0, xDestStart, yDestStart, int dest_w, int dest_h, int dest_BytesPP, int dest_Stride, char* src0, int src_w, int src_h, int src_BytesPP, int src_Stride, char* mask0, int mask_BytesPP, int mask_Stride, int mask_Channel): |
|
||||
bool bGood=True |
|
||||
try |
|
||||
if (PReporting.getIsMegaDebug()) cerr<<"Draw(dest,...,src,...,mask,...)..."<<flush |
|
||||
unsigned int xSrcStart=0 |
|
||||
unsigned int ySrcStart=0 |
|
||||
if xDestStart<0: |
|
||||
xSrcStart=0-xDestStart |
|
||||
xDestStart=0 |
|
||||
|
|
||||
if yDestStart<0: |
|
||||
ySrcStart=0-yDestStart |
|
||||
yDestStart=0 |
|
||||
|
|
||||
unsigned int xSrc=xSrcStart |
|
||||
unsigned int ySrc=ySrcStart |
|
||||
unsigned int xDest=xDestStart |
|
||||
unsigned int yDest=yDestStart |
|
||||
float rCookedAlpha |
|
||||
unsigned int iSrcChan |
|
||||
unsigned int iDestChan |
|
||||
#unsigned int Debug_PixelsDone=0;#debug only |
|
||||
if dest0!=null: |
|
||||
if src0!=null: |
|
||||
if mask0!=null: |
|
||||
if (xDestStart>=0 and xDestStart<dest_w and yDestStart>=0 and yDestStart<dest_h |
|
||||
and xSrc>=0 and xSrc<src_w and ySrc>=0 and ySrc<src_w) |
|
||||
unsigned char* destLineLoc=&dest0[yDestStart*dest_Stride+xDestStart*dest_BytesPP] |
|
||||
unsigned char* srcLineLoc=&src0[ySrc*src_Stride+xSrc*src_BytesPP] |
|
||||
unsigned char* maskLineLoc=&mask0[mask_Channel+ySrc*mask_Stride+xSrc*mask_BytesPP] |
|
||||
unsigned char* destLoc |
|
||||
unsigned char* srcLoc |
|
||||
unsigned char* maskLoc |
|
||||
for (yDest=yDestStart; yDest<dest_h and ySrc<src_h; yDest++) |
|
||||
destLoc=destLineLoc |
|
||||
srcLoc=srcLineLoc |
|
||||
maskLoc=maskLineLoc |
|
||||
xSrc=xSrcStart |
|
||||
for (xDest=xDestStart; xDest<dest_w and xSrc<src_w; xDest++) |
|
||||
rCookedAlpha=(float)*maskLoc/255.0f |
|
||||
float rCookedInverseAlpha=1.0f-rCookedAlpha |
|
||||
iSrcChan=0 |
|
||||
for (iDestChan=0; iDestChan<dest_BytesPP; iDestChan++) |
|
||||
#alpha formula: (src-dest)*alpharatio+dest |
|
||||
#for each channel of dest (<3 excludes alpha) |
|
||||
if iDestChan<3: |
|
||||
*destLoc=PMath.ByRound( (float)( (float)(*srcLoc-*destLoc)*rCookedAlpha + (float)*destLoc ) ) |
|
||||
#*destLoc=PMath.ByRound( (float)( rCookedInverseAlpha*(float)*destLoc + rCookedAlpha*(float)*srcLoc ) ) |
|
||||
|
|
||||
if iSrcChan<src_BytesPP: |
|
||||
iSrcChan++ |
|
||||
srcLoc++ |
|
||||
|
|
||||
destLoc++ |
|
||||
|
|
||||
while (iSrcChan<src_BytesPP) |
|
||||
iSrcChan++ |
|
||||
srcLoc++ |
|
||||
|
|
||||
maskLoc+=mask_BytesPP; #does NOT need to be incremented during pixel above since only 1 channel is needed |
|
||||
xSrc++ |
|
||||
#Debug_PixelsDone++ |
|
||||
}#end for xDest while xDest&sSrc both in range |
|
||||
destLineLoc+=dest_Stride |
|
||||
srcLineLoc+=src_Stride |
|
||||
maskLineLoc+=mask_Stride |
|
||||
ySrc++ |
|
||||
}#end for yDest while yDest*ySrc both in range |
|
||||
if (PReporting.getIsMegaDebug()) Console.Error.WriteLine((string)"OK (" |
|
||||
#+"Debug_PixelsDone:"+Convert.ToString(Debug_PixelsDone) |
|
||||
+"; xDestStart:"+Convert.ToString(xDestStart) |
|
||||
+"; yDestStart:"+Convert.ToString(yDestStart) |
|
||||
+"; xDest:"+Convert.ToString(xDest) |
|
||||
+"; yDest:"+Convert.ToString(yDest) |
|
||||
+"; dest_w:"+Convert.ToString(dest_w) |
|
||||
+"; dest_h:"+Convert.ToString(dest_h) |
|
||||
+"; xSrcStart:"+Convert.ToString(xSrcStart) |
|
||||
+"; ySrcStart:"+Convert.ToString(ySrcStart) |
|
||||
+"; xSrc:"+Convert.ToString(xSrc) |
|
||||
+"; ySrc:"+Convert.ToString(ySrc) |
|
||||
+"; src_w:"+Convert.ToString(src_w) |
|
||||
+"; src_h:"+Convert.ToString(src_h) |
|
||||
+(string)")") |
|
||||
}#end if any pixels within range |
|
||||
else: |
|
||||
if PReporting.getIsMegaDebug(): |
|
||||
Console.Error.WriteLine("Draw(dest,...,src,...,mask,...): no pixels within range") |
|
||||
|
|
||||
|
|
||||
|
|
||||
else Console.Error.WriteLine("Draw using mask buffer Error: null mask for source") |
|
||||
|
|
||||
else Console.Error.WriteLine("Draw using mask buffer Error: null source") |
|
||||
|
|
||||
else Console.Error.WriteLine("Draw using mask buffer Error: null destination") |
|
||||
|
|
||||
catch (exception& exn) |
|
||||
bGood=False |
|
||||
PReporting.ShowExn(exn,"drawing using mask buffer","PImage.Draw") |
|
||||
|
|
||||
return bGood |
|
||||
}#end Draw using mask buffer |
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,21 +0,0 @@ |
|||||
#ifndef PIMAGE_H |
|
||||
#define PIMAGE_H |
|
||||
|
|
||||
#include <string> |
|
||||
#include "preporting.h" |
|
||||
#include "frameworkdummy.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
class PImage |
|
||||
public: |
|
||||
static bool bPushToNearest_ShowMaskChannelError |
|
||||
static bool bPushToNearestNondirectional_ShowMaskChannelError |
|
||||
static bool PushToNearest(double& xStart, yStart, mask, int mask_w, int mask_h, int mask_BytesPP, int mask_Stride, int mask_Channel, mask_Threshold, bGreaterThanThreshold_FalseForLessThan) |
|
||||
static bool PushToNearest(double& xStart, yStart, rDirection_Deg, mask, int mask_w, int mask_h, int mask_BytesPP, int mask_Stride, int mask_Channel, mask_Threshold, bGreaterThanThreshold_FalseForLessThan) |
|
||||
static bool Draw(unsigned char* dest0, xDestStart, yDestStart, int dest_w, int dest_h, int dest_BytesPP, int dest_Stride, char* src0, int src_w, int src_h, int src_BytesPP, int src_Stride, char* mask0, int mask_BytesPP, int mask_Stride, int mask_Channel) |
|
||||
|
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,39 +0,0 @@ |
|||||
#ifndef PSTRING_CPP |
|
||||
#define PSTRING_CPP |
|
||||
|
|
||||
#include "pstring.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
char PString.carrDigit[]= {'0','1','2','3','4','5','6','7','8','9'}; #char carrDigit[10] |
|
||||
''' |
|
||||
PString.carrDigit[0]='0' |
|
||||
PString.carrDigit[1]='1' |
|
||||
PString.carrDigit[2]='2' |
|
||||
PString.carrDigit[3]='3' |
|
||||
PString.carrDigit[4]='4' |
|
||||
PString.carrDigit[5]='5' |
|
||||
PString.carrDigit[6]='6' |
|
||||
PString.carrDigit[7]='7' |
|
||||
PString.carrDigit[8]='8' |
|
||||
PString.carrDigit[9]='9' |
|
||||
''' |
|
||||
def SequenceDigits(self, val, iMinDigits): |
|
||||
string sReturn=Convert.ToString(val) |
|
||||
while ((int)sReturn.length()<iMinDigits) sReturn="0"+sReturn |
|
||||
return sReturn |
|
||||
}#end SequenceDigits |
|
||||
def IsDigit(self, val): |
|
||||
bool bReturn=False |
|
||||
for (int i=0; i<=9; i++) |
|
||||
if val==PString.carrDigit[i]: |
|
||||
bReturn=True |
|
||||
break |
|
||||
|
|
||||
|
|
||||
return bReturn |
|
||||
}#end IsDigit |
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,21 +0,0 @@ |
|||||
#ifndef PSTRING_H |
|
||||
#define PSTRING_H |
|
||||
|
|
||||
#include <cstdio> |
|
||||
#include <string> |
|
||||
#include <iostream> |
|
||||
#include "frameworkdummy.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
class PString |
|
||||
public: |
|
||||
#static char carrDigit[10] |
|
||||
static char carrDigit[] |
|
||||
static string SequenceDigits(int val, iMinDigits) |
|
||||
static bool IsDigit(char val) |
|
||||
|
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
File diff suppressed because it is too large
@ -1,131 +0,0 @@ |
|||||
#ifndef TARGA_H |
|
||||
#define TARGA_H |
|
||||
|
|
||||
#include <iostream> |
|
||||
#include <iomanip> |
|
||||
#include <fstream> |
|
||||
#include <memory> |
|
||||
#include "frameworkdummy.h" |
|
||||
|
|
||||
using namespace std |
|
||||
namespace ProtoArmor |
|
||||
#Sequential targa.TypeTarga values: |
|
||||
TypeNoImageData = 0 |
|
||||
TypeUncompressedColorMapped = 1 |
|
||||
TypeUncompressedTrueColor = 2 |
|
||||
TypeUncompressedGrayscale = 3 |
|
||||
TypeCompressedColorMapped = 9 |
|
||||
TypeCompressedTrueColor = 10 |
|
||||
TypeCompressedGrayscale = 11 |
|
||||
TypeCompressedColorMappedHuffmanAndDeltaAndRLE = 32 |
|
||||
TypeCompressedColorMappedHuffmanAndDeltaAndRLE4PassQuadTree = 33 |
|
||||
#Sequential targa.MapType values |
|
||||
MapType256 = 1 |
|
||||
#targa.bitsDescriptor bits: |
|
||||
lownibble565Or888NoAlpha = 0; #bit3 |
|
||||
lownibbleAlpha5551 = 1; #bit3 #TODO: read GGGBBBBB ARRRRRGG since targa is always low-high (little endian) |
|
||||
lownibbleAlpha8888 = 8; #bit3 |
|
||||
bitReserved4 = 16; #bit4 |
|
||||
bitNoFlip_NonTruevision = 32; #bit5 #Truevision is a registered trademark of Truevision |
|
||||
bitInterleave4Way = 64; #bit6 |
|
||||
bitInterleave2Way = 128; #bit7 |
|
||||
##region prototypes |
|
||||
def RLESizeUncompressed(self, arrbySrc, iStart, iSrcSize, iBytesPerChunk): |
|
||||
def Compare(self, arrbySrc1, iSrcLoc1, arrbySrc2, iSrcLoc2, iRun): |
|
||||
def RLECompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse, bCountOnlyAndReturnNull): |
|
||||
def RLECompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse): |
|
||||
def RLEUncompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse, bCountOnlyAndReturnNull): |
|
||||
def RLEUncompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse): |
|
||||
def RLEUncompress(self, arrbyDest, iDestSize, arrbySrc, iSrcSize, iBytesPerChunk): |
|
||||
def RLEUncompress(self, arrbyDest, iDestSizeIrrelevantIfCountOnlyIsTrue, arrbySrc, iSrcSize, iBytesPerChunk, iDestStart, iSrcStart, bCountOnlyAndDontTouchDest): |
|
||||
|
|
||||
##region TargaFooter |
|
||||
class TargaFooter |
|
||||
private: |
|
||||
byte *dump |
|
||||
uint u32SizeofDump |
|
||||
public: |
|
||||
TargaFooter() |
|
||||
TargaFooter(byte* lpbyDataPointerToKeep, u32Size) |
|
||||
TargaFooter(byte* arrbyDataSrcToCopyFrom, u32Start, u32Count, u32ActualSourceBufferSize) |
|
||||
~TargaFooter() |
|
||||
bool Init() |
|
||||
bool Init(byte* lpbyDataPointerToKeep, u32Size) |
|
||||
bool Init(FILE* fileNowToReadToEnd) |
|
||||
bool Init(byte* arrbyDataSrc, u32SrcStart, u32Count, u32ActualSourceBufferSize) |
|
||||
int TargaFooter.WriteTo(FILE* pfileAlreadyOpen_ToNotCloseInThisMethod) |
|
||||
int WriteTo(char* byarrDest, iAtDest, iSizeOfDest) |
|
||||
uint ByteCount() |
|
||||
|
|
||||
##endregion TargaFooter |
|
||||
|
|
||||
##endregion prototypes |
|
||||
class Targa |
|
||||
public: |
|
||||
string sFile |
|
||||
TargaFooter footer |
|
||||
byte *arrbyData |
|
||||
|
|
||||
Targa() |
|
||||
~Targa() |
|
||||
int BytesPP() |
|
||||
int Stride() |
|
||||
int BytesAsUncompressed() |
|
||||
int BytesBuffer() |
|
||||
bool Init(int iSetWidth, iSetHeight, iSetBytesPP, bReallocateBuffers) |
|
||||
bool CopyTo(Targa &targaDest) |
|
||||
bool DrawFast(byte* arrbyDest, xAtDest, yAtDest, iDestWidth, iDestHeight, iDestBytesPP, iDestStride) |
|
||||
void ToRect(ref_Rectangle rectReturn) |
|
||||
void ToRect(ref_RectangleF rectReturn) |
|
||||
bool From(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, bUsePointerNotCopyData) |
|
||||
bool From(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, bUsePointerNotCopyData, u32SrcStart) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen, bReInitializeAll) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen, u32SrcStart, bReInitializeAll) |
|
||||
#int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, fileNow, u32SrcRealLen) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, fileNow, bReInitializeAll) |
|
||||
#int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, fileNow, u32SrcStart, bReInitializeAll) |
|
||||
byte* GetBufferPointer() |
|
||||
bool IsLoaded() |
|
||||
bool Save() |
|
||||
bool Save(string sFileNow) |
|
||||
bool Load(string sFileNow) |
|
||||
bool IsOK() |
|
||||
bool Flip() |
|
||||
bool HasAttrib(byte bit) |
|
||||
bool IsSavedAsFlipped() |
|
||||
bool IsCompressed() |
|
||||
bool SetCompressionRLE(bool bOn) |
|
||||
string Dump() |
|
||||
string Dump(bool bDumpFull) |
|
||||
string Description() |
|
||||
string Description(bool bVerbose) |
|
||||
private: |
|
||||
void DeriveVars() |
|
||||
void InitNull() |
|
||||
bool MarkAsCompressed(bool bAsCompressed) |
|
||||
#header: |
|
||||
#(byte)(length of id),(byte)(int)MapType,(byte)(int)TypeTarga,(ushort)iMapOrigin,(ushort)iMapLength,(byte)iMapBitDepth,(ushort)xImageLeft,(ushort)yImageBottom,(ushort)iWidth,(ushort)iHeight,(byte)iBitDepth,(byte)bitsDescriptor,(byte[length of id])sID,(byte[iMapLength])(arrbyColorMap),(byte[iBytesAsUncompressed])(arrbyData) |
|
||||
#int iIDLength; #1 byte implied (length of sID) |
|
||||
int MapType; #1 byte |
|
||||
int TypeTarga; #1 byte |
|
||||
int iMapOrigin; #2 bytes |
|
||||
int iMapLength; #2 bytes |
|
||||
int iMapBitDepth; #1 byte |
|
||||
int xImageLeft; #2 bytes |
|
||||
int yImageBottom; #2 bytes #TODO: don't flip if not zero |
|
||||
int iWidth; #2 bytes |
|
||||
int iHeight; #2 bytes |
|
||||
int iBitDepth; #1 byte #TODO: 16 is 5.5.5.1 (not !not )IF(not !not ) low nibble of descriptor is 1 (otherwise 5.6.5 and descriptor low nibble is zero) |
|
||||
byte bitsDescriptor; #1 byte #(default zero) |
|
||||
string sID; #array of [iTagLength] bytes #[bySizeofID] -- custom non-terminated string |
|
||||
byte *arrbyColorMap; #array of [] bytes #[byMapBitDepth*wMapLength] -- the palette |
|
||||
#arrbyData |
|
||||
#derived fields: |
|
||||
int iBytesPP |
|
||||
int iStride |
|
||||
int iBytesAsUncompressed;#byte sizeof image data only |
|
||||
int iBytesBuffer |
|
||||
};#end class Targa |
|
||||
}#end namespace |
|
||||
#endif |
|
File diff suppressed because it is too large
@ -1,151 +0,0 @@ |
|||||
#ifndef TARGA_H |
|
||||
#define TARGA_H |
|
||||
|
|
||||
#include <iostream> |
|
||||
#include <iomanip> |
|
||||
#include <fstream> |
|
||||
#include <memory> |
|
||||
#include "frameworkdummy.h" |
|
||||
#include "pmemory.h" |
|
||||
#include "preporting.h" |
|
||||
|
|
||||
using namespace std |
|
||||
|
|
||||
namespace ProtoArmor |
|
||||
#Sequential targa.TypeTarga values: |
|
||||
TypeNoImageData = 0 |
|
||||
TypeUncompressedColorMapped = 1 |
|
||||
TypeUncompressedTrueColor = 2 |
|
||||
TypeUncompressedGrayscale = 3 |
|
||||
TypeCompressedColorMapped = 9 |
|
||||
TypeCompressedTrueColor = 10 |
|
||||
TypeCompressedGrayscale = 11 |
|
||||
TypeCompressedColorMappedHuffmanAndDeltaAndRLE = 32 |
|
||||
TypeCompressedColorMappedHuffmanAndDeltaAndRLE4PassQuadTree = 33 |
|
||||
#Sequential targa.MapType values |
|
||||
MapType256 = 1 |
|
||||
#targa.bitsDescriptor low nibble sequential values: |
|
||||
lownibble565Or888NoAlpha = 0; #bits 0-3 |
|
||||
lownibbleAlpha5551 = 1; #bits 0-3 #TODO: read GGGBBBBB ARRRRRGG since targa is always low-high (little endian) |
|
||||
lownibbleAlpha8888 = 8; #bits 0-3 |
|
||||
#targa.bitsDescriptor bits: |
|
||||
bitReserved4 = 16; #bit4 |
|
||||
bitNoFlip_NonTruevision = 32; #bit5 #Truevision is a registered trademark of Truevision |
|
||||
bitInterleave4Way = 64; #bit6 (of 0 to 7) |
|
||||
bitInterleave2Way = 128; #bit7 (highest bit) |
|
||||
##region prototypes |
|
||||
def RLESizeUncompressed(self, arrbySrc, iStart, iSrcSize, iBytesPerChunk): |
|
||||
def Compare(self, arrbySrc1, iSrcLoc1, arrbySrc2, iSrcLoc2, iRun): |
|
||||
def RLECompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse, bCountOnlyAndReturnNull): |
|
||||
def RLECompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse): |
|
||||
def RLEUncompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse, bCountOnlyAndReturnNull): |
|
||||
def RLEUncompress(self, iReturnLength, arrbySrc, iSrcStart, iBytesPerChunk, iBytesToParse): |
|
||||
def RLEUncompress(self, arrbyDest, iDestSize, arrbySrc, iSrcSize, iBytesPerChunk): |
|
||||
def RLEUncompress(self, arrbyDest, iDestSizeIrrelevantIfCountOnlyIsTrue, arrbySrc, iSrcSize, iBytesPerChunk, iDestStart, iSrcStart, bCountOnlyAndDontTouchDest): |
|
||||
##endregion prototypes |
|
||||
|
|
||||
##region TargaFooter |
|
||||
class TargaFooter |
|
||||
private: |
|
||||
byte *dump |
|
||||
uint dump_Length |
|
||||
public: |
|
||||
TargaFooter() |
|
||||
TargaFooter(byte* lpbyDataPointerToKeep, u32Size) |
|
||||
TargaFooter(byte* arrbyDataSrcToCopyFrom, u32Start, u32Count, u32ActualSourceBufferSize) |
|
||||
~TargaFooter() |
|
||||
bool Init() |
|
||||
bool Init(BinaryReader& streamIn_ToReadToEnd) |
|
||||
bool Init(byte* lpbyDataPointerToKeep, u32Size) |
|
||||
bool Init(byte* arrbyDataSrc, u32SrcStart, u32Count, u32ActualSourceBufferSize) |
|
||||
bool WriteTo(BinaryWriter &streamOut) |
|
||||
uint ByteCount() |
|
||||
|
|
||||
##endregion TargaFooter |
|
||||
|
|
||||
class Targa |
|
||||
public: |
|
||||
string sFile |
|
||||
TargaFooter footer |
|
||||
byte *arrbyData |
|
||||
|
|
||||
Targa() |
|
||||
~Targa() |
|
||||
int Width() |
|
||||
int Height() |
|
||||
int BytesPP() |
|
||||
int Stride() |
|
||||
int BytesAsUncompressed() |
|
||||
int BytesBuffer() |
|
||||
bool Init(int iSetWidth, iSetHeight, iSetBytesPP, bReallocateBuffers) |
|
||||
bool CopyTo(Targa &targaDest) |
|
||||
bool DrawFast(byte* arrbyDest, xAtDest, yAtDest, iDestWidth, iDestHeight, iDestBytesPP, iDestStride) |
|
||||
void ToRect(ref_Rectangle rectReturn) |
|
||||
void ToRect(ref_RectangleF rectReturn) |
|
||||
bool From(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, bUsePointerNotCopyData) |
|
||||
bool From(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, bUsePointerNotCopyData, u32SrcStart) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, &streamIn, bReInitializeAll) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen, bReInitializeAll) |
|
||||
int SafeCopyFrom(int iWidthTo, iHeightTo, iBytesPP, arrbySrc, u32SrcRealLen, u32SrcStart, bReInitializeAll) |
|
||||
byte* GetBufferPointer() |
|
||||
bool IsLoaded() |
|
||||
bool Save() |
|
||||
bool Save(string sFileNow) |
|
||||
bool Load(string sFileNow) |
|
||||
bool IsOK() |
|
||||
bool Flip() |
|
||||
bool HasAttrib(byte bit) |
|
||||
bool IsSavedAsFlipped() |
|
||||
bool IsCompressed() |
|
||||
bool SetCompressionRLE(bool bOn) |
|
||||
string Dump() |
|
||||
string Dump(bool bDumpFull) |
|
||||
string Description() |
|
||||
string Description(bool bVerbose) |
|
||||
void Reflect(int& x, y) |
|
||||
void Wrap(int& x, y) |
|
||||
int getChannel_Fast(int x, y, iChan) |
|
||||
int getChannelReflected(int x, y, iChan) |
|
||||
void getColorRgbReflected(byte& R, G, B, x, y) |
|
||||
void getColorArgbReflected(byte& A, R, G, B, x, y) |
|
||||
void getColorRgb_Fast(byte& R, G, B, x, y) |
|
||||
void getColorArgb_Fast(byte& A, R, G, B, x, y) |
|
||||
private: |
|
||||
void DeriveVars() |
|
||||
void InitNull() |
|
||||
bool MarkAsCompressed(bool bAsCompressed) |
|
||||
#header: |
|
||||
#(byte)(length of id),(byte)(int)MapType,(byte)(int)TypeTarga,(ushort)iMapOrigin,(ushort)iMapLength,(byte)iMapBitDepth,(ushort)xImageLeft,(ushort)yImageBottom,(ushort)iWidth,(ushort)iHeight,(byte)iBitDepth,(byte)bitsDescriptor,(byte[length of id])sID,(byte[iMapLength])(arrbyColorMap),(byte[iBytesAsUncompressed])(arrbyData) |
|
||||
#int iIDLength; #1 byte implied (length of sID) |
|
||||
int MapType; #1 byte |
|
||||
int TypeTarga; #1 byte |
|
||||
int iMapOrigin; #2 bytes |
|
||||
int iMapLength; #2 bytes |
|
||||
int iMapBitDepth; #1 byte |
|
||||
int xImageLeft; #2 bytes |
|
||||
int yImageBottom; #2 bytes #TODO: don't flip if not zero |
|
||||
int iWidth; #2 bytes |
|
||||
int iHeight; #2 bytes |
|
||||
int iBitDepth; #1 byte #TODO: 16 is 5.5.5.1 (not !not )IF(not !not ) low nibble of descriptor is 1 (otherwise 5.6.5 and descriptor low nibble is zero) |
|
||||
|
|
||||
#/<summary> |
|
||||
#/Bits 0-3: number of bits of the pixel that are the alpha channel (i.e. 8 for BGRA32 or 1 for 5551 or 0 for BGRx32) |
|
||||
#/Bit 4: reserved |
|
||||
#/Bit 5: screen origin -- {0:lower left; 1:upper left} usually 0 |
|
||||
#/Bits 7-6: interleaving nibble {00:non-interleaved; 01:even-odd; 10:four way; 11: reserved |
|
||||
#/</summary> |
|
||||
byte bitsDescriptor; #1 byte #(usually zero; 17th byte) |
|
||||
|
|
||||
string sID; #array of [iTagLength] bytes #[bySizeofID] -- custom non-terminated string |
|
||||
byte *arrbyColorMap; #array of [] bytes #[byMapBitDepth*wMapLength] -- the palette |
|
||||
#arrbyData |
|
||||
#derived fields: |
|
||||
int iBytesPP |
|
||||
int iStride |
|
||||
int iBytesAsUncompressed;#byte sizeof image data only |
|
||||
int iBytesBuffer |
|
||||
|
|
||||
}#end namespace |
|
||||
|
|
||||
#endif |
|
@ -1,33 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#define _CRT_SECURE_NO_DEPRECATE |
|
||||
#define _CRT_SECURE_NO_WARNINGS |
|
||||
#include <stddef.h> |
|
||||
#include <stdlib.h> |
|
||||
#include <stdio.h> |
|
||||
#include <string.h> |
|
||||
#include <math.h> |
|
||||
|
|
||||
#include <windows.h> |
|
@ -1,220 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#include "stdafx.h" |
|
||||
#include <vd2/VDXFrame/VideoFilter.h> |
|
||||
|
|
||||
#####################################/ |
|
||||
|
|
||||
VDXVideoFilter.VDXVideoFilter() |
|
||||
|
|
||||
|
|
||||
VDXVideoFilter.~VDXVideoFilter() |
|
||||
|
|
||||
|
|
||||
def SetHooks(self, *fa, *ff): |
|
||||
self.fa = fa |
|
||||
self.ff = ff |
|
||||
|
|
||||
|
|
||||
#####################################/ |
|
||||
|
|
||||
def Init(self): |
|
||||
return True |
|
||||
|
|
||||
|
|
||||
def Start(self): |
|
||||
|
|
||||
|
|
||||
def End(self): |
|
||||
|
|
||||
|
|
||||
def Configure(self, hwnd): |
|
||||
return hwnd != NULL |
|
||||
|
|
||||
|
|
||||
def GetSettingString(self, *buf, maxlen): |
|
||||
|
|
||||
|
|
||||
def GetScriptString(self, *buf, maxlen): |
|
||||
|
|
||||
|
|
||||
def Serialize(self, *buf, maxbuf): |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
def Deserialize(self, *buf, maxbuf): |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
def Prefetch(self, frame): |
|
||||
return frame |
|
||||
|
|
||||
|
|
||||
def Prefetch2(self, frame, *prefetcher): |
|
||||
prefetcher.PrefetchFrame(0, Prefetch(frame), 0) |
|
||||
return True |
|
||||
|
|
||||
|
|
||||
def OnEvent(self, event, *eventData): |
|
||||
switch(event) |
|
||||
case kVDXVFEvent_InvalidateCaches: |
|
||||
return OnInvalidateCaches() |
|
||||
|
|
||||
default: |
|
||||
return False |
|
||||
|
|
||||
|
|
||||
|
|
||||
def OnInvalidateCaches(self): |
|
||||
return False |
|
||||
|
|
||||
|
|
||||
#####################################/ |
|
||||
|
|
||||
void __cdecl VDXVideoFilter.FilterDeinit (VDXFilterActivation *fa, *ff) |
|
||||
(*reinterpret_cast<VDXVideoFilter **>(fa.filter_data)).~VDXVideoFilter() |
|
||||
|
|
||||
|
|
||||
int __cdecl VDXVideoFilter.FilterRun ( VDXFilterActivation *fa, *ff) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
pThis.Run() |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
long __cdecl VDXVideoFilter.FilterParam (VDXFilterActivation *fa, *ff) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
return pThis.GetParams() |
|
||||
|
|
||||
|
|
||||
int __cdecl VDXVideoFilter.FilterConfig (VDXFilterActivation *fa, *ff, hwnd) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
return not pThis.Configure(hwnd) |
|
||||
|
|
||||
|
|
||||
int __cdecl VDXVideoFilter.FilterStart (VDXFilterActivation *fa, *ff) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
pThis.Start() |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
int __cdecl VDXVideoFilter.FilterEnd (VDXFilterActivation *fa, *ff) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
pThis.End() |
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
void __cdecl VDXVideoFilter.FilterString ( VDXFilterActivation *fa, *ff, *buf) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
pThis.GetScriptString(buf, 80) |
|
||||
|
|
||||
|
|
||||
bool __cdecl VDXVideoFilter.FilterScriptStr(VDXFilterActivation *fa, *ff, *buf, buflen) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
pThis.GetScriptString(buf, buflen) |
|
||||
|
|
||||
return True |
|
||||
|
|
||||
|
|
||||
void __cdecl VDXVideoFilter.FilterString2 ( VDXFilterActivation *fa, *ff, *buf, maxlen) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
pThis.GetSettingString(buf, maxlen) |
|
||||
|
|
||||
|
|
||||
int __cdecl VDXVideoFilter.FilterSerialize (VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
return pThis.Serialize(buf, maxbuf) |
|
||||
|
|
||||
|
|
||||
void __cdecl VDXVideoFilter.FilterDeserialize (VDXFilterActivation *fa, *ff, *buf, maxbuf) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = fa |
|
||||
|
|
||||
pThis.Deserialize(buf, maxbuf) |
|
||||
|
|
||||
|
|
||||
sint64 __cdecl VDXVideoFilter.FilterPrefetch( VDXFilterActivation *fa, *ff, frame) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
return pThis.Prefetch(frame) |
|
||||
|
|
||||
|
|
||||
bool __cdecl VDXVideoFilter.FilterPrefetch2( VDXFilterActivation *fa, *ff, frame, *prefetcher) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
return pThis.Prefetch2(frame, prefetcher) |
|
||||
|
|
||||
|
|
||||
bool __cdecl VDXVideoFilter.FilterEvent( VDXFilterActivation *fa, *ff, event, *eventData) |
|
||||
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa.filter_data) |
|
||||
|
|
||||
pThis.fa = const_cast<VDXFilterActivation *>(fa) |
|
||||
|
|
||||
return pThis.OnEvent(event, eventData) |
|
||||
|
|
||||
|
|
||||
def SafePrintf(self, *buf, maxbuf, *format, ...): |
|
||||
if maxbuf <= 0: |
|
||||
return |
|
||||
|
|
||||
va_list val |
|
||||
va_start(val, format) |
|
||||
if (unsigned)_vsnprintf(buf, maxbuf, format, val) >= (unsigned)maxbuf: |
|
||||
buf[maxbuf - 1] = 0 |
|
||||
va_end(val) |
|
||||
|
|
||||
|
|
||||
VDXScriptFunctionDef VDXVideoFilter.sScriptMethods[1]= {0 |
|
@ -1,95 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#include "stdafx.h" |
|
||||
#include <windows.h> |
|
||||
#include <vd2/VDXFrame/VideoFilterDialog.h> |
|
||||
|
|
||||
namespace |
|
||||
#if defined(_MSC_VER) and _MSC_VER >= 1300 |
|
||||
extern "C" char __ImageBase |
|
||||
|
|
||||
def GetLocalHInstance(self): |
|
||||
return (HINSTANCE)&__ImageBase |
|
||||
|
|
||||
#else: |
|
||||
def GetLocalHInstance(self): |
|
||||
meminfo = {0 |
|
||||
if not VirtualQuery(GetLocalHInstance, &meminfo, sizeof(meminfo)): |
|
||||
return NULL |
|
||||
|
|
||||
return (HINSTANCE)meminfo.AllocationBase |
|
||||
|
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
VDXVideoFilterDialog.VDXVideoFilterDialog() |
|
||||
: mhdlg(NULL) |
|
||||
|
|
||||
|
|
||||
def Show(self, hInst, templName, parent): |
|
||||
if not hInst: |
|
||||
hInst = GetLocalHInstance() |
|
||||
|
|
||||
return DialogBoxParamA(hInst, templName, parent, StaticDlgProc, (LPARAM)self) |
|
||||
|
|
||||
|
|
||||
def Show(self, hInst, templName, parent): |
|
||||
if not hInst: |
|
||||
hInst = GetLocalHInstance() |
|
||||
|
|
||||
return DialogBoxParamW(hInst, templName, parent, StaticDlgProc, (LPARAM)self) |
|
||||
|
|
||||
|
|
||||
def ShowModeless(self, hInst, templName, parent): |
|
||||
if not hInst: |
|
||||
hInst = GetLocalHInstance() |
|
||||
|
|
||||
return CreateDialogParamA(hInst, templName, parent, StaticDlgProc, (LPARAM)self) |
|
||||
|
|
||||
|
|
||||
def ShowModeless(self, hInst, templName, parent): |
|
||||
if not hInst: |
|
||||
hInst = GetLocalHInstance() |
|
||||
|
|
||||
return CreateDialogParamW(hInst, templName, parent, StaticDlgProc, (LPARAM)self) |
|
||||
|
|
||||
|
|
||||
INT_PTR CALLBACK VDXVideoFilterDialog.StaticDlgProc(HWND hdlg, msg, wParam, lParam) |
|
||||
VDXVideoFilterDialog *pThis |
|
||||
|
|
||||
if msg == WM_INITDIALOG: |
|
||||
pThis = (VDXVideoFilterDialog *)lParam |
|
||||
SetWindowLongPtr(hdlg, DWLP_USER, (LONG_PTR)pThis) |
|
||||
pThis.mhdlg = hdlg |
|
||||
|
|
||||
else: |
|
||||
pThis = (VDXVideoFilterDialog *)GetWindowLongPtr(hdlg, DWLP_USER) |
|
||||
|
|
||||
return pThis ? pThis.DlgProc(msg, wParam, lParam) : FALSE |
|
||||
|
|
||||
|
|
||||
def DlgProc(self, msg, wParam, lParam): |
|
||||
return FALSE |
|
||||
|
|
@ -1,72 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#include "stdafx.h" |
|
||||
#include <vd2/VDXFrame/VideoFilterEntry.h> |
|
||||
|
|
||||
int g_VFVAPIVersion |
|
||||
VDXFilterDefinition **g_VDXRegisteredFilters |
|
||||
int g_VDXRegisteredFilterCount |
|
||||
|
|
||||
VDXFilterDefinition *VDXGetVideoFilterDefinition(int index) |
|
||||
|
|
||||
def VDXVideoFilterModuleInit2(self, VDXFilterModule *fm, *ff, vdfd_ver, vdfd_compat, ver_compat_target): |
|
||||
def_count = 0 |
|
||||
|
|
||||
while(VDXGetVideoFilterDefinition(def_count)) |
|
||||
++def_count |
|
||||
|
|
||||
g_VDXRegisteredFilters = (VDXFilterDefinition **)malloc(sizeof(VDXFilterDefinition *) * def_count) |
|
||||
if not g_VDXRegisteredFilters: |
|
||||
return 1 |
|
||||
|
|
||||
memset(g_VDXRegisteredFilters, 0, sizeof(VDXFilterDefinition *) * def_count) |
|
||||
|
|
||||
for(int i=0; i<def_count; ++i) |
|
||||
g_VDXRegisteredFilters[i] = ff.addFilter(fm, VDXGetVideoFilterDefinition(i), sizeof(VDXFilterDefinition)) |
|
||||
|
|
||||
g_VFVAPIVersion = vdfd_ver |
|
||||
vdfd_ver = VIRTUALDUB_FILTERDEF_VERSION |
|
||||
vdfd_compat = ver_compat_target |
|
||||
|
|
||||
return 0 |
|
||||
|
|
||||
|
|
||||
def VDXVideoFilterModuleDeinit(self, VDXFilterModule *fm, *ff): |
|
||||
if g_VDXRegisteredFilters: |
|
||||
for(int i=g_VDXRegisteredFilterCount-1; i>=0; --i) |
|
||||
VDXFilterDefinition *def = g_VDXRegisteredFilters[i] |
|
||||
|
|
||||
if def: |
|
||||
ff.removeFilter(def) |
|
||||
|
|
||||
|
|
||||
free(g_VDXRegisteredFilters) |
|
||||
g_VDXRegisteredFilters = NULL |
|
||||
|
|
||||
|
|
||||
|
|
||||
def VDXGetVideoFilterAPIVersion(self): |
|
||||
return g_VFVAPIVersion |
|
||||
|
|
@ -1,25 +0,0 @@ |
|||||
# VDXFrame - Helper library for VirtualDub plugins |
|
||||
# Copyright (C) 2008 Avery Lee |
|
||||
# |
|
||||
# The plugin headers in the VirtualDub plugin SDK are licensed differently |
|
||||
# differently than VirtualDub and the Plugin SDK themselves. This |
|
||||
# particular file is thus licensed as follows (the "zlib" license): |
|
||||
# |
|
||||
# This software is provided 'as-is', any express or implied |
|
||||
# warranty. In no event will the authors be held liable for any |
|
||||
# damages arising from the use of self software. |
|
||||
# |
|
||||
# Permission is granted to anyone to use self software for any purpose, |
|
||||
# including commercial applications, to alter it and redistribute it |
|
||||
# freely, to the following restrictions: |
|
||||
# |
|
||||
# 1. The origin of self software must not be misrepresented; you must |
|
||||
# not claim that you wrote the original software. If you use self |
|
||||
# software in a product, acknowledgment in the product |
|
||||
# documentation would be appreciated but is not required. |
|
||||
# 2. Altered source versions must be plainly marked as such, must |
|
||||
# not be misrepresented as being the original software. |
|
||||
# 3. This notice may not be removed or altered from any source |
|
||||
# distribution. |
|
||||
|
|
||||
#include "stdafx.h" |
|
Loading…
Reference in new issue